面向对象
1.static关键字的使用
1.1求圆的面积
1 /* 2 * 求圆的面积 3 * 属性 :半径/id/创建园的个数,需要考虑类变量 4 * 方法 : 5 */ 6 7 public class CircleTest { 8 public static void main(String[] args) { 9 Circle p1 = new Circle(1); 10 Circle p2 = new Circle(2); 11 Circle p3 = new Circle(3); 12 System.out.println(Circle.getTotal()); 13 System.out.println(p3.getId()); 14 System.out.println(p3.findArea()); 15 16 } 17 } 18 class Circle{ 19 private double radius; 20 21 private int id; 22 //构造器作用 创建对象 和初始化对象 23 24 public Circle(){//记录id 和 个数的构造方法 25 id = init++; 26 total++; 27 } 28 public Circle(double radius){//初始化radius的构造方法 29 this();//不确定使用哪个构造器,为了保证每次创建都记录,需要将上一个构造器的内容也填加过来,使用this关键字 30 // id = init++; 31 // total++; 32 this.radius = radius; 33 } 34 //下面两个属性是对象所共享的,不会随着对象的不同而改变 35 public static int total;//记录创建圆的个数,不需要赋值了,int类型默认初始化值为0 36 private static int init = 1001;//记录创建圆的id编号初始值 37 38 public int getId() { 39 return id; 40 } 41 42 public static int getTotal() {//只有静态方法才能调用类变量 43 return total; 44 } 45 46 public double findArea(){ 47 return Math.PI*radius*radius; 48 } 49 }
2.static关键字的使用
2.1代码块的执行顺序
1 public class LeafTest {//加载子类之前,先加载父类静态代码块,静态代码块随着类的加载而执行 2 public static void main(String[] args) { 3 new Leaf(); //创建对象,有限加载父类的非静态结构和构造器 4 System.out.println("****************"); 5 new Leaf(); //静态结构只执行一次 6 } 7 } 8 class Root{ 9 static{ 10 System.out.println("Root的静态初始化块"); 11 } 12 { 13 System.out.println("Root的普通初始化块"); 14 } 15 public Root(){ 16 System.out.println("Root的无参数的构造器"); 17 } 18 } 19 class Mid extends Root{ 20 static{ 21 System.out.println("Mid的静态初始化块"); 22 } 23 { 24 System.out.println("Mid的普通初始化块"); 25 } 26 public Mid(){ 27 System.out.println("Mid的无参数的构造器"); 28 } 29 public Mid(String msg){ 30 //通过this调用同一类中重载的构造器 31 this(); 32 System.out.println("Mid的带参数构造器,其参数值:" 33 + msg); 34 } 35 } 36 class Leaf extends Mid{ 37 static{ 38 System.out.println("Leaf的静态初始化块"); 39 } 40 { 41 System.out.println("Leaf的普通初始化块"); 42 } 43 public Leaf(){ 44 //通过super调用父类中有一个字符串参数的构造器 45 super("尚硅谷"); 46 System.out.println("Leaf的构造器"); 47 } 48 } 49 50 51 52 class Father { 53 static { 54 System.out.println("11111111111"); 55 } 56 { 57 System.out.println("22222222222"); 58 } 59 60 public Father() { 61 System.out.println("33333333333"); 62 63 } 64 }
Root的静态初始化块
Mid的静态初始化块
Leaf的静态初始化块
Root的普通初始化块
Root的无参数的构造器
Mid的普通初始化块
Mid的无参数的构造器
Mid的带参数构造器,其参数值:尚硅谷
Leaf的普通初始化块
Leaf的构造器
****************
Root的普通初始化块
Root的无参数的构造器
Mid的普通初始化块
Mid的无参数的构造器
Mid的带参数构造器,其参数值:尚硅谷
Leaf的普通初始化块
Leaf的构造器
1 public class Son extends Father { 2 public static void main(String[] args) { // 由父及子 静态先行 3 System.out.println("77777777777");//main方法也是静态方法,随着类的加载而加载 4 System.out.println("************************"); 5 new Son();//创建对象 加载非静态代码块-->构造器 6 System.out.println("************************"); 7 new Son(); 8 System.out.println("************************"); 9 new Father(); 10 } 11 static { 12 System.out.println("44444444444"); 13 } 14 { 15 System.out.println("55555555555"); 16 } 17 public Son() { 18 System.out.println("66666666666"); 19 } 20 } 21 22 class Father { 23 static { 24 System.out.println("11111111111"); 25 } 26 { 27 System.out.println("22222222222"); 28 } 29 30 public Father() { 31 System.out.println("33333333333"); 32 33 } 34 }
11111111111
44444444444
77777777777
************************
22222222222
33333333333
55555555555
66666666666
************************
22222222222
33333333333
55555555555
66666666666
************************
22222222222
33333333333
3.final关键字
1 public class Something { 2 public int addOne(final int i){ 3 // return i++;//不可以,对其值进行修改 4 return i + 1;//可以 i的值并没有改变 5 } 6 }
1 public class Something { 2 public static void main(String[] args) { 3 Other O = new Other(); 4 new Something().addOne(O); 5 } 6 public void addOne(final Other O) { 7 // o = new Other();//此时不可以,改变对象了 8 O.i++;//此时O是一个对象,是常量的,其中的属性改变了,不影响 9 } 10 } 11 class Other { 12 public int i; 13 }
4.接口:interface

浙公网安备 33010602011771号