面向对象

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                                                              

 

posted @ 2022-04-08 23:06  默以思道  阅读(24)  评论(0)    收藏  举报