1、访问限定符
修饰:修饰类、属性、方法、构造方法
限定的范围:项目、包、类
包括: public 同一个项目
protected 同一个包、(相同包或不同包)子类
默认的 同一个包
private 同一个类
注意点:private 修饰类时,只能在内部嵌套使用
在子类中方法被重写时,不可减小访问限定符
2、this
作用: 表示当前正在被操作(调用)的对象
在构造方法中调用本类的某一个构造方法
注意点:在构造方法中调用构造方法,必须在第一行
3、super
作用: 本类的父类对象(常用在在子类中调用父类方法时)
在子类的构造方法中调用父类的构造方法
注意点:在构造方法中调用构造方法,必须在第一行
4、this与super的区别:
(1)属性:访问本类中的属性,本类没有则从父类中访问;直接访问父类中的属性
(2)方法:访问本类中的方法,本类没有则从父类中访问;直接访问父类中的方法
(3)构造:调用本类的构造方法,必须放在构造方法的首行;调用父类的构造方法,必须放在子类构造方法的首行;
(4)特殊:表示当前对象;表示本类的父类对象
5、final
使用final声明 :类---不能有子类,不能被继承
方法----不能在子类中被重写
属性----变量变为常量,不能被修改
注意点:常量只能被赋值一次
全局常量:static final声明的变量
6、static
(1)程序运行过程:
装载类:static声明的属性、代码块执行(static声明的方法在被调用时执行)
创建对象:非静态属性、代码块执行
(2)声明属性: 全局属性,一个属性可以被对象所公用
修改一个对象的属性,其他对象的属性全部改变
对象.属性 相当于 类.属性
(3)声明方法: 只与对象的类型有关
没有static声明的方法:先看其类中是否有对应的方法,再看对象:new 类 ();这个类
(4)声明类: 可声明内部类,然后用外部类.内部类的形式使用
注意点:static属性、代码块在对象没有实例化时就可以调用和执行了
static代码块:在装载时初始化数据
非静态代码块:在对象实例化时初始化数据(不常用)
7、代码块(补充)
{}的部分
包括: 普通代码块:直接定义在方法中的代码
构造块:将代码块定义在类中
构造块优先于构造方法执行
只要实例化对象产生,就执行构造块
静态代码块:直接使用static声明的代码块
不论实例化多少次对象,只执行一次
为静态属性初始化
同步代码块
优先顺序:在主方法所在类中定义的静态代码块——主方法——
——普通类中的静态代码块——构造块——构造方法
8、ABC练习的总结与扩展
public class A {
public A(){
System.out.println("A");
}
}
public class B extends A{
public B(){
System.out.println("B");
}
}
public class C {
public static A a = new A();
public B b = new B();
public C(){
System.out.println("C");
}
public static void main(String[] args) {
C.change();
}
public static void change(){
B b1 = new B();
}
}
运行结果: A
A
B
public class A {
public A(){
System.out.println("A");
}
}
public class B extends A{
public B(){
System.out.println("B");
}
}
public class C {
public static A a = new A();
public B b = new B();
public C(){
System.out.println("C");
}
public static void main(String[] args) {
C c=new C();
c.change();
}
public void change(){
B b1 = new B();
}
}
运行结果:
A
A
B
C
A
B
public class A {
public A(){
System.out.println("A");
}
{
System.out.println("1");
}
static{
System.out.println("2");
}
}
public class B extends A{
public B(){
System.out.println("B");
}
}
public class C {
static{
System.out.println("3");
}
{
System.out.println("4");
}
public static A a = new A();
public B b = new B();
public C(){
System.out.println("C");
}
public static void main(String[] args) {
C c=new C();
c.change();
}
public void change(){
B b1 = new B();
}
}
运行结果:
3
2
1
A
4
1
A
B
C
1
A
B
练习的总结:
优先顺序:在主方法所在类中定义的静态代码块——静态属性——主方法——实例化对象
——普通属性——普通构造块——构造方法——所调用的方法
普通类中的静态代码块——构造块——构造方法
static属性和代码块,在装载类时已然可以实现;
普通的属性的代码块则需要在实例化对象是才可以实现;
static代码块只会执行一次。