java学习总结(关键字)
关键字
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"); }
?