构造方法,this关键字,static关键字,封装,静态变量

1.构造方法

构造方法是一种特殊的方法,是专门用于创建/实例化对象的方法。

构造方法根据是否有参数分为两类:1.无参构造方法  2.有参构造方法

1.1无参构造方法

无参构造方法就是构造方法中没有参数。构造方法在创建对象(new Dog())时使用.无参构造方法一般用于给属性赋默认值。如果开发中没有定义无参构造方法,jvm默认给类分配一个无参构造方法。格式如下

[修饰符] 类名(){

}

1.2有参构造方法

当构造/实例化一个对象的时候,可以向构造方法中传递参数,这样的构造方法叫做有参构造方法。有参构造方法格式如下

[修饰符] 类名(type arg1,type arg2,...){
    //初始化代码
}

有参构造和无参构造是方法重载的关系

2.1局部变量和成员变量的优先级

在一个代码块(作用域)中,局部变量和成员变量同名,局部变量的优先级高于成员变量。

2.2有参构造常见问题

在一个类中,当定义了有参构造的时候,jvm不再默认分配无参构造。但是在一些情况下我们仍然需要用到无参构造方法,如反射,只能用无参构造,不能用有参构造。所以,一般情况下,我们在定义有参构造的时候,同时也会定义无参构造。

3this关键字(上)

this关键字一般指向对象本身。this关键字用于访问成员属性,可解决局部变量和成员变量同名时优先级的问题。如下

1 public Dog2(String name,int health,int love,String strain){
2 System.out.println("this:"+this);
3     this.name = name;
4     this.health = health;
5     this.love = love;
6     this.strain = strain;
7 }
1 public class Test04{
2     public static void main(String[] args){
3         
4         Dog2 dog = new Dog2("二狗",100,0,"土狗");
5         System.out.println("dog:"+dog);
6         dog.showInfo();
7     }
8 }

通过打印this的地址,和dog类的地址。可以发现他们都指向同一个地址。由此可知,this指向对象本身。

4static关键字

4.1静态变量

static关键字,表示静态的,可以修饰变量,也可以修饰方法。

static修饰的变量称为静态变量,形式如下:

static type 变量名 [=初始值]

静态变量,也叫类变量,归类所有。存放在方法区(共享区)中的静态区中,可以被类的对象共享访问。

静态变量的访问方式:

类名.静态变量(推荐)

对象名.静态变量

通过以下需求加深理解:

需求:统计汽车工厂成产了多少台汽车?

 1 public class Car{
 2     String brand;
 3     String type;
 4     float price;
 5 
 6     static int count = 0;
 7     
 8     public Car(){
 9         Car.count++;
10     }
11     
12     public Car(String brand,String type,float price){
13         this.brand = brand;
14         this.type = type;
15         this.price = price;
16         Car.count++;
17     }
18     
19     public void showInfo(){
20         System.out.println("车辆信息:");
21         System.out.println("品牌:"+this.brand);
22         System.out.println("型号:"+this.type);
23         System.out.println("价格:"+this.price);
24         System.out.println("我是第"+Car.count+"辆车");
25     }
26     
27     
28 }
 1 public class Test01{
 2     public static void main(String[] args){
 3         Car car1 = new Car("奔驰","漏油GL300",66);
 4         car1.showInfo();
 5         
 6         
 7         Car car2 = new Car("奔驰","漏油GL400",66);
 8         car2.showInfo();
 9         
10         System.out.println(Car.count);
11         System.out.println(car1.count);
12         System.out.println(car2.count);
13         
14     }
15 }

类中包含静态成员(静态属性,静态方法)和实例成员(实例变量,实例方法)。

4.2静态方法

static修饰的方法称为静态方法,形式如下:

[修饰符] static 返回值类型 方法名(arg..){

}

静态方法归类所有,调用方式:

类名.方法名()(推荐)

对象名.方法名()

需注意的是:实例方法可以访问静态成员。

      静态方法不能访问非静态成员。

5封装

封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

封装的步骤:[1]属性私有化

      [2]提供公共的设置器和访问器

      [3]在设置器和访问器中添加业务校验逻辑

例子如下:

 1 public class Dog{
 2     
 3     // 【1】private 私有的,对外不可见
 4     private String name;
 5     private int health;
 6     private int love;
 7     private String strain;
 8 
 9     // 【2】提供公共的设置器(setter)和访问器(getter)
10     public void setName(String name){
11         // 【3】逻辑校验
12         if(name.equals("")){
13             System.out.println("姓名不能为空.");
14         }else{
15             this.name = name;
16         }
17     }
18     public String getName(){
19         return this.name;
20     }
21     
22     public void setHealth(int health){
23         if(health < 0){
24             System.out.println("健康值不合法.");
25             this.health = 0;
26         }else{
27             this.health = health;
28         }
29     }
30     public int getHealth(){
31         return this.health;
32     }
33     
34     public void setLove(int love){
35         if(love < 0){
36             System.out.println("亲密度不合法.");
37             this.love = 0;
38         }else{
39             this.love = love;
40         }
41     }
42     public int getLove(){
43         return this.love;
44     }
45     
46     public void setStrain(String strain){
47         if(strain.equals("")){
48             System.out.println("品种不能为空.");
49         }else{
50             this.strain = strain;
51         }
52     }
53     public String getStrain(){
54         return this.strain;
55     }
56     
57     
58     public Dog(){
59         
60     }
61 
62     public Dog(String name,int health,int love,String strain){
63         this.setName(name);
64         this.setHealth(health);
65         this.setLove(love);
66         this.setStrain(strain);
67     }
68     
69     public void showInfo(){
70         System.out.print("我的名字叫"+this.name);
71         System.out.print(",健康值"+this.health);
72         System.out.print(",亲密度"+this.love);
73         System.out.println(",我是一只"+this.strain);
74     }
75 }

6.this关键字(下)

this表示对象本身。

[1]this调用属性

[2]this调用方法

[3]this调用本类的构造方法。形式如下:

1 this(arg1,arg2,...)

 通过下面练习加深理解

 1 public Dog(){
 2         
 3     }
 4     
 5     public Dog(String name,int health,int love){
 6         this.setName(name);
 7         this.setHealth(health);
 8         this.setLove(love);
 9     }
10     
11 
12     public Dog(String name,int health,int love,String strain){
13         //this.setName(name);
14         //this.setHealth(health);
15         //this.setLove(love);
16         
17         // this调用本类的其他构造方法
18         // System.out.println("test");
19         this(name,health,love);
20         this.setStrain(strain);
21         
22         // showInfo();
23         //this.showInfo();
24     }

注意:this调用其它构造方法时,只能放在构造方法的第一行

7.静态常量

在程序运行过程中,如果有一个量的值不发生改变,可以把该量声明成一个静态常量,用static final修饰。

 

posted @ 2019-04-20 22:10  cowbe  阅读(376)  评论(0编辑  收藏  举报