封装
概念:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。
访问限定符:private protected public
default(默认,相当于是没有输入任何访问限定符)
private
只能在同包中的同一类中使用
class Test {
public int a;
private int b;
public void show() {
Test test1 = new Test();
test1.a = 1;
test1.b = 2;
}
}
public class Access {
public static void main(String[] args) {
Test test1 = new Test();
test1.a = 30;
test1.b = 20;
System.out.println(test1.a);
}
}
如上代码,在Test类中 用public修饰 a 用private 修饰 b 方法show可以调用同类中的a 和 b,在Access类中 只能调用Test类中的 a,而不能调用 b, 因 b 用private修饰,只能在同包中的同一类中使用。
static成员
在Java中,被static修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对
象,是所有对象所共享的。
static修饰的成员变量,称为静态成员变量。
静态成员变量特性:
1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
3. 类变量存储在方法区当中
4. 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)
如图,在TestStatic类中 ,我们定义了name、age、classRoom 三个变量,但是我们在实例化对象student1的时候输入 “student.” 只自动弹出了age 和 name 并没有弹出classRoom对象,但是如果我们手动输入student1.classRoom的时候,将它输出也是可以的(不建议这样,同特性2)。
建议使用类名+"."+变量名。
运行结果相同 建议使用第二种方式输出。
静态成员方法
Java中,被static修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的。静态成员一般是通过静态方法来访问的。
静态方法特性:
1. 不属于某个具体的对象,是类方法
2. 可以通过对象调用,也可以通过类名.静态方法名(...)方式调用,更推荐使用后者
3. 不能在静态方法中访问任何非静态成员变量
static成员变量初始化
静态成员变量的初始化分为两种:就地初始化 和 静态代码块初始化。
就地初始化:
静态代码块初始化
往下看
代码块
public class TestCode {
public static void main(String[] args) {
{ //直接用{}定义,普通代码块
int x = 10;
System.out.println(x);
}
int x = 100;
System.out.println(x);
}
}
执行结果
构造代码块:定义在类中的代码块(不加修饰符)。也叫:实例代码块。构造代码块一般用于初始化实例成员变量。
public class TestCode {
private String name;
private int age;
public TestCode() {
System.out.println("构造方法");
}
//实例代码块
{
this.age = 10;
this.name = "张三";
System.out.println("实例代码块");
}
public void show() {
System.out.println(name + " " + age + " ");
}
public static void main(String[] args) {
TestCode testCode = new TestCode();
testCode.show();
}
}
在如上代码可以看出,在实例化对象的时候 先执行实例化代码块 然后执行构造方法
静态代码块
public class TestCode {
private String name;
private int age;
public TestCode() {
System.out.println("构造方法");
}
static{
System.out.println("静态代码块");
}
//实例代码块
{
this.age = 10;
this.name = "张三";
System.out.println("实例代码块");
}
public void show() {
System.out.println(name + " " + age + " ");
}
public static void main(String[] args) {
TestCode testCode = new TestCode();
testCode.show();
}
}
由以上代码可以知道 在实例化对象时,先执行静态代码块,再执行非静态(实例)代码块,最后执行构造方法。
注意: