关键字
1.访问限定符
1.public
1.公共的访问修饰符。
2.它的可见性是在同一个工程(project)下
3.用public限定的属性和方法可以被在同一工程下的类调用。
2.protected
1.公开性低于public的访问限定符。
2.它的可见性是在同一个包下(package)。
3.在同一个包中的类都可以调用protected限定的属性和方法。
3.默认的
1.默认的即不加任何访问限定符。
2.它与protected相似,可见性是在同一包下。
4.private
1.私有的访问限定符,私有性最高,可访问级别最低。
2.用private限定的属性和方法只能在本类中使用。
2.this与super
1.this
1.表示本类中的属性或方法。
public class A { private String name; //带参数的构造函数 public A(String name) { this.name = name; } }
2.实例化后表示本对象的属性或方法。
3.调用其他的构造函数
public class A { private String name; public A(){ //调用下面的构造函数 this("调用带一个参数的构造函数"); } //带参数的构造函数 public A(String name) { this.name = name; } static void play(){ System.out.println("B在玩!"); } }
2.super
1.调用父类的构造器或者方法。
2.用super之前必须要继承。
public class B extends A{ public B(){ super(); } static void play(){ System.out.println("B在玩!"); } public void study(){ System.out.println("B在学习!"); } }
类B继承了父类A,在B中调用了父类的构造器。
注意:
1.子类继承父类后,在子类默认的构造其中调用了父类的默认构造器。
2.子类实例化对象实质上是子类调用父类的无参构造器去创建对象。
3.如果父类中没有无参数构造器,那么程序就会报错。
4
.public class B extends A{ public B(){ //super(); } }
这些代码与上面的代码是一样的效果,也就是说子类的无参构造器中可以不写super(),因为子类已经默认写了。
3.final
1.最终的,这是用来定义常量的,也就是说它只能被赋值一次,赋值后就不能再修改它的值。
2.使用final定义的八种基本数据类型和String的属性必须初始化值。
4.static
1.静态的,一个类中的某个属性定义成为static的,那么这个属性就存储在静态区域,由该类实例化的所有对象的这个属性都指向静态区域的同一个地址。
2.某一静态属性的值被修改后,则有这个类实例化的对象的这个静态属性的值都改变了,这个值由最后赋的值决定。
3.static定义的方法可以由类名直接调用。
如:2.2.2中的代码,可以直接用类名B调用其中的静态方法play()
B.play();
4.注意点:
实例化的对象去调用该类中的静态方法时,实质上是这个类去调用这个静态方法。
如:
B b = new B(); b.play();//输出结果是"B在玩!"
上面的b.play()实质上是B.play();
5.一个对象自动转型为哪种类型,那么用该对象调用某一静态方法时,实质上是用自动转型的类去调用该类中的静态方法。
如:
A b1 = new B(); a.play();//虽然是用B去创建对象,但实质上是调用A中无参构造器去创建对象a的;这里调用的是A类中的play方法,输出结果是"A在玩!"
6.如果B类继承A类,但是A中没有静态的study方法,那么下面的代码就有错
A b2 = new B(); b2.study();//这里将会报错,使用了自动转型后,该对象不能调用子类中有而父类中没有的方法。
5.java程序执行顺序:
1.执行主程序前先装载类,装载静(static)态块
2.最先装载静态属性到静态块中。
3.在
public class D { static String name = "BBB"; public static void main(String[] args) { System.out.println("aaa"); } static{ System.out.println("ddd"); } }
该代码运行时输出结果是:
ddd
aaa
在运行该代码前会先装载静态的方法,如本例中装载过程就将"ddd"结果输出了。
static{ System.out.println("ddd"); }