5初始化与清理

Posted guyuangang

tags:

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

5.1 用构造器确保初始化

  1、构造器与类名相同,构造器没有返回值,这与返回值为"void"明显不同。

  2、构造器有助于减少错误,并使代码更易于阅读,Java中的"初始化"和"创建"是捆绑在一起的,两者不可分离 

  练习一创建一个类,它包含一个未初始化的String引用,验证该引用被Java初始化成了null。

技术图片
 1 package cn.gyg.test;
 2 /*
 3 练习1:创建一个类,它包含一个未初始化的String引用,验证该引用被Java初始化成了null
 4 */
 5 public class Test01 {
 6     public static String str1;
 7     public static void main(String[] args) {
 8         System.out.println(str1);
 9     }
10 }
11 
12 out:null
练习一
 练习二:创建一个类,它包含一个在定义时就被初始化了的String域,以及另一个通过构造器
      初始化的String域。这两种方式有和差异。
技术图片
 1 package cn.gyg.test;
 2 
 3 /*
 4 练习二:创建一个类,它包含一个在定义时就被初始化了的String域,以及另一个通过构造器
 5 初始化的String域。这两种方式有和差异
 6 */
 7 public class Test02 {
 8 
 9     public static String str1 = "aaa";
10     public static String str2;
11 
12     public static void main(String[] args) {
13         System.out.println("----------创建对象前---------");
14 
15         System.out.println("str1:" + str1);
16         System.out.println("str2:" + str2);
17         System.out.println("----------创建对象后---------");
18         new Test02("bbb");
19         System.out.println("str1:" + str1);
20         System.out.println("str2:" + str2);
21     }
22 
23     /*区别:str1在类加载的时候被初始化为"aaa"
24             str2在类加载的时候被初始化为null
25             str2在创建对象的时候被初始化为"str2"
26     */
27     public Test02(String s) {//通过构造器初始化str2
28         this.str2 = s;
29     }
30 
31     public Test02() {
32     }
33 }
34 
35 out:
36 ----------创建对象前---------
37 str1:aaa
38 str2:null
39 ----------创建对象后---------
40 str1:aaa
41 str2:bbb
练习二

5.2 方法重载

  当创建一个对象时,也就是给此对象分配到的内存空间取了一个名字。而方法则是给某个动作取的名字。

  1、区分重载方法:参数列表不同。不可以用返回值类型不同区分方法重载,不推荐使用参数顺序不同区分方法重载

  2、基本数据类型作为重载方法的参数:如果传入的数据类型(实际参数的类型)小于方法中形式参数的类型,实际参数类型就会被提升。

  3、char类型作为重载方法的参数:如果无法找到恰好能够接受char类型参数的方法,char会直接提升为int。

  4、在编写一个类的时候,编译器会默认提供一个无参构造器,但如果自己定义了构造器,编译器将不会提供默认构造器,所以建议在设计类的时候都提供一个无参构造器。

练习三:创建一个带默认构造器(即无参构造器)的类,在构造器中打印一条消息,为这个类创建一个对象。
技术图片
 1 package cn.gyg.test;
 2 /*
 3 练习三:创建一个带默认构造器(即无参构造器)的类,在构造器中打印一条消息,为这个类创建一个对象
 4 */
 5 public class Test03 {
 6     public Test03() {//Test03的无参构造方法
 7         System.out.println("调用了Test03的无参构造器");
 8     }
 9     public static void main(String[] args) {
10         new Test03();
11     }
12 }
13 out:
14 调用了Test03的无参构造器
练习三

 练习四:为前一个练习中的类添加一个重载构造器,令其接收一个字符串参数,并在构造器中把自己的消息和接收的参数一起打印出来。

技术图片
 1 package cn.gyg.test;
 2 
 3 public class Test04 {
 4 
 5     public Test04() {//Test03的无参构造方法
 6         System.out.println("调用了Test04的无参构造器");
 7     }
 8 
 9     public Test04(String s) {//重载构造器
10         System.out.println("调用了Test04的重载构造器");
11         System.out.println("s:" + s);
12     }
13 
14     public static void main(String[] args) {
15         new Test04("aaa");
16     }
17 }
18 out:
19 调用了Test04的重载构造器
20 s:aaa
练习四

 

练习五:创建一个名为Dog的类,它具有重载的bark方法,此方法根据不同的基本数据类型进行重载,
并根据被调用的版本,打印出不同类型的狗吠(barking)、咆哮(howling)等信息。编写main()
来调用所有不同版本的方法。
技术图片
 1 package cn.gyg.test;
 2 
 3 public class Dog {
 4     public void bark(int i){
 5         System.out.println("int:打鼾");
 6     }
 7 
 8     public void bark(double d) {
 9         System.out.println("double:barking");
10     }
11 
12     public void bark(char c) {
13         System.out.println("char:howling");
14     }
15 }
Dog类

 

技术图片
 1 package cn.gyg.test;
 2 /*
 3 练习五:创建一个名为Dog的类,它具有重载的bark方法,此方法根据不同的基本数据类型进行重载,
 4 并根据被调用的版本,打印出不同类型的狗吠(barking)、咆哮(howling)等信息。编写main()
 5 来调用所有不同版本的方法
 6  */
 7 public class Test05 {
 8     public static void main(String[] args) {
 9         Dog dog = new Dog();
10         dog.bark(1);
11         dog.bark(1.1);
12         dog.bark(‘a‘);
13     }
14 }
15 out:
16 int:打鼾
17 double:barking
18 char:howling
练习五

 

以上是关于5初始化与清理的主要内容,如果未能解决你的问题,请参考以下文章

导航上的片段生命周期重叠

初始化与清理

[读书笔记]Java编程思想第5章之初始化与清理

初始化与清理

以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?

初始化与清理(下)