IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java中的封装 代码块分类 -> 正文阅读

[Java知识库]Java中的封装 代码块分类

1 封装

定义:将数据和操作数据有机的结合 隐藏对象的属性和实现细节,反对对外公开接口和对象进行交互
封装最主要的功能就是我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程序码更容易理解和维护,也加强了程序码的安全性

1.1 封装的优点

  • 良好的封装能减少耦合
  • 内部结构可以自主修改
  • 可以对成员变量进行更精确的控制
  • 颖仓信息,实现细节

1.2 实现Java封装的步骤

1.修改属性的可见性来限制对属性的访问
对每个值属性提供对外的公共方法访问。用于对私有属性的访问

public class Person{
    private String name;
    private int age;
?
    public int getAge(){
      return age;
    }
?
    public String getName(){
      return name;
    }
?
    public void setAge(int age){
      this.age = age;
    }
?
    public void setName(String name){
      this.name = name;
    }
}

采用this关键字是为了解决实例变量和局部变量制碱法生同名的冲突

1.3 Java 封装类的例子

public class EncapTest{
 
   private String name;
   private String idNum;
   private int age;
 
   public int getAge(){
      return age;
   }
 
   public String getName(){
      return name;
   }
 
   public String getIdNum(){
      return idNum;
   }
 
   public void setAge( int newAge){
      age = newAge;
   }
 
   public void setName(String newName){
      name = newName;
   }
 
   public void setIdNum( String newId){
      idNum = newId;
   }
}

以上实例中public方法是外部类访问该类成员变量的入口。

通常情况下,这些方法被称为getter和setter方法。

因此,任何要访问类中私有成员变量的类都要通过这些getter和setter方法。

在Java中,getter和setter是两种常规方法,用于检索和更新变量的值。 以下代码是带有私有变量和几个getter / setter方法的简单类的示例: 该类声明一个私有变量number。 由于number是私有的,因此此类外部的代码无法直接访问该变量。

1.4 访问限定符

类可以将数据以及封装数据的方法结合在一起 而访问限制符用来控制哪些方法或者属性需要在类外直接使用。
在这里插入图片描述
pubic:理解为公共
default:理解为 “家丑”
private:只有自己知道
protected: 主要用于继承

public class computer{
private String cpu;
private String memory;
public String screen;
String brand;

public Computer(String brand, String cpu, String memory, String screen) {
 this.brand = brand;
 this.cpu = cpu;
 this.memory = memory;
 this.screen = screen;
 }
 public void Boot(){
 System.out.println("开机~~~");
 }
 public void PowerOff(){
 System.out.println("关机~~~");
 }
 public void SurfInternet(){
 System.out.println("上网~~~");
 }
}
public class TestComputer {
 public static void main(String[] args) {
 Computer p = new Computer("HW", "i7", "8G", "13*14");
 System.out.println(p.brand); // default属性:只能被本包中类访问
 System.out.println(p.screen); // public属性: 可以任何其他类访问
 // System.out.println(p.cpu); // private属性:只能在Computer类中访问,不能被其他类访问
 }
} 

一般情况下成员变量设置为 private,成员方法设置为public。

2.static

2.1 static修饰成员变量

static修饰的成员变量,称为静态成员变量,静态成员变量最大的特性:不属于某个具体的对象,是所有对象所共享的

静态成员变量特性

  1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
  2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
  3. 生命周期伴随类的一生

2.2 static修饰成员的方法

被static修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的
静态方法特性

  1. 不属于某个具体的对象,是类方法
  2. 可以通过对象调用,也可以通过类名,静态方法名(…)
  3. 静态方法没有隐藏的this引用参数
  4. 静态方法中不能调用任何非静态方法

2.3 static成员变量初始化

** 分为就地初始化和静态代码块初始化**
1.就地初始化
就地初始化指的是:在定义直接给出初始值

private static String classRoom = "Bit306";

2.静态代码块初始化

3.代码块

3.1 代码块概念以及分类

使用{}定义的一段代码称为代码块

  • 普通代码块
  • 构造块
  • 静态块
  • 同步代码块
    3.2普通代码块
    定义在方法中的代码块
public class Main{
 public static void main(String[] args) {
 { //直接使用{}定义,普通方法块
 int x = 10 ;
 System.out.println("x1 = " +x);
 }
 int x = 100 ;
 System.out.println("x2 = " +x);
 }
}
// 执行结果
//x1 = 10
//x2 = 100

3.3 构造代码块
实例代码块 构造代码块一般用于初始化实例成员变量

class CodeBlock {
    //构造代码块,在方法外出现
    {
        int number1 = 10;
        System.out.println("number1: " + number1);
    }

    //构造方法
    public CodeBlock() {
        System.out.println("这是构造方法");
    }

    //在构造代码块在构造方法前后出现,但构造代码块先于构造方法执行
    {
        int number2 = 100;
        System.out.println("number2: " + number2);
    }
}

3.4 静态代码块
使用static定义的代码块称为静态代码块,一般用于初始化静态成员变量

static {
 classRoom = "bit306";
 System.out.println("I am static init()!");
 }

1.静态代码块不管生成多少个对象,其只会执行一次
2.静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
3.如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次合并,最终放在生成的<>方法中,该方法在类加载时调用,并且只调用一次。
4.实例代码块只有在创建对象时才会执行。

构造代码块与构造函数的区别:构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化,因为构造函数是可以多个的,运行哪个构造函数就会建立什么样的对象,但无论建立哪个对象,都会先执行相同的构造代码块。
也就是说,构造代码块中定义的是不同对 共性的初始化内容

代码块初始化时机:构造代码块在实例对象创建时进行初始化;静态代码块在类加载时进行初始化。

代码块执行顺序:静态代码块 ==> main()方法 ==> 构造代码块 ==> 构造方法 ==> 局部代码块 。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-12 13:02:20  更:2021-09-12 13:02:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:44:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码