构造方法

Posted lyywj170403

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构造方法相关的知识,希望对你有一定的参考价值。

构造方法:给对象的数据进行序列化

格式:1.方法名与类名相同

           2.没有返回值类型,没有void

           3.没有具体的返回值


(3)构造方法的注意事项

A:如果我们没写构造方法,系统将提供一个默认的无参构造方法

B:如果我们给出了构造方法,系统将不再提供默认构造方法

如果这个时候,我们要使用无参构造方法,就必须自己给出。

推荐:永远手动自己给出无参构造方法。


(4)给成员变量赋值的方式

A:setXxx()

B:带参构造方法


(5)标准案例

 1 /*
 2  * 给成员变量赋值方法:
 3  *   1.setxx()方法
 4  *   2.构造方法
 5  * 输出成员变量方法
 6  *   1.getxx()方法
 7  *   2.调用show()方法
 8  */
 9 public class Student {
10 
11     private String name;
12     
13     private int age;
14     
15     //构造方法
16     public Student(){
17     }
18     
19     public Student(String name, int age){
20         this.name = name;
21         this.age = age;
22     }
23     
24     public String getName(){
25         return name;
26     }
27     
28     public void setName(String name){
29         this.name = name;
30     }
31     
32     public int getAge(){
33         return age;
34         
35     }
36 
37     public void setAge(int age){
38         this.age = age;
39     }
40     
41     //输出所有成员变量值
42     public void show(){
43         System.out.println(name + "-----" + age);
44     }
45 }
 1 public class Test {
 2 
 3     public static void main(String[] args) {
 4         /*
 5          * 方法一给成员变量赋值
 6          * 无参构造+setxx()
 7          */
 8         Student s1 = new Student();
 9         s1.setName("张三");
10         s1.setAge(34);
11         //输出值
12         System.out.println(s1.getName() + "-------" + s1.getAge());
13         s1.show();
14         
15         /*
16          * 方法二给成员变量赋值
17          * 
18          */
19         Student s2 = new Student("张三",20);
20         System.out.println(s2.getName() + "-------" + s2.getAge());
21         s2.show();
22     }
23 }

 

 



测试:

 1 public class Student {
 2 
 3     private String name;//初始化为null
 4     
 5     private int age;//初始化为0
 6     
 7     public Student(){
 8         System.out.println("无惨构造方法");
 9     }
10     
11     //构造方法的重载格式
12     public Student(String name){
13         System.out.println("这是一个带String类型的构造方法");
14         this.name = name;
15     }
16 
17     public Student(int age){
18         System.out.println("这是一个带int类型的构造方法");
19         this.age = age;
20     }
21     
22     public Student(String name, int age){
23         System.out.println("这是一个带多个类型的构造方法");
24         this.name = name;
25         this.age = age;
26     }
27     
28     public void show(){
29         System.out.println(name + "-----" + age);
30     }
31 }
 1 public class Test {
 2 
 3     public static void main(String[] args) {
 4         //创建对象
 5         Student s = new Student();
 6         s.show();
 7         System.out.println("------------");
 8     
 9         //创建对象2
10         Student s2 = new Student("张三");
11         s2.show();
12         System.out.println("------------");
13     
14         //创建对象3
15         Student s3 = new Student(34);
16         s3.show();
17         System.out.println("------------");
18     
19         //创建对象4
20         Student s4 = new Student("张三", 34);
21         s4.show();
22         System.out.println("------------");
23     
24     }
25 }

 


8:代码:Student s = new Student();做了哪些事情?

(1)把Student.class文件加载到内存

(2)在栈内存为s开辟空间

(3)在堆内存为学生对象申请空间

(4)给学生的成员变量进行默认初始化。

(5)给学生的成员变量进行显示初始化。

(6)通过构造方法给成员变量进行初始化。

(7)对象构造完毕,把地址赋值给s变量

 

 1 public class Student {
 2 
 3     private String name;//初始化为null
 4     
 5     private int age;//初始化为0
 6     
 7     public Student(){
 8         System.out.println("构造方法");
 9     }
10 
11 }
 1 public class Test {
 2 
 3     public static void main(String[] args) {
 4         //创建对象
 5         Student s = new Student();
 6         
 7         System.out.println(s);
 8         /*
 9          * 构造方法
10            [email protected]
11          */
12     }
13 }

 







以上是关于构造方法的主要内容,如果未能解决你的问题,请参考以下文章

无法解析片段中的 ViewModelProvider 构造?

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

将初始数据提供给片段的正确方法?

将初始数据提供给片段的正确方法?

防止 Proguard 删除片段的空构造函数