Java基础笔记-面向对象2

构造函数:(当类中没有定义构造函数时,系统会默认给该类加入一个空参数的构造函数)

格式:

class Person

{

  Person(){} //空参数

}

1.函数名与类名相同,

2,不定义返回值类型,即不能写return语句.

作用:给对象进行初始化.

与一般函数的区别:

1.构造函数 只执行一次,其他函数可以被执行多次.

 

构造代码块:

构造代码块,给对象进行初始化,对象一建立就运行,且优先于构造函数


与构造函数的区别:

相同点是,都是给对象进行初始化使用的.

构造代码块是给所有对象进行初始化的,而构造函数是给对应的对象进行初始化.


构造代码块中定义的是不同对象的共性的初始化内容.
格式:

例如:
 {
  System.out.println("构造代码块!");
 }

 

 

this关键字:

作用:用于区别成员变量局部变量 同名的情况.

例如:

class Person{

String name; //--->成员变量name.

Person(String name) //--->局部变量ame.

{

  this.name=name;  // this.name  ===>中的name指的就是成员变量的name.

  name = name; //如果这样定义,这两个name都是局部变量name.

}

}


this代表它所在类的所属对象的引用,

通俗来讲:即哪个函数调用this所在的函数,this就代表哪个对象.

 

有关this关键字,构造函数和构造代码块的相关代码演示.

 1 class Person

 2 {

 3     private int age;

 4     private String name ;

 5     /*

 6     构造代码块,给对象进行初始化,对象一建立就运行,且优先于构造函数.

 7     与构造函数的区别:构造代码块是给所有对象进行初始化的,而构造函数是给对应的对象进行初始化.

 8     构造代码块中定义的是不同对象的共性的初始化内容.

 9     */

10     {

11         System.out.println("构造代码块!");

12         cry();

13     }

14     //构造函数

15     Person()

16     {

17         System.out.println("A: name = "+name+"    age = "+age);

18         //cry();

19     }

20     /*this: 关键字

21     作用:用于区别成员变量与局部变量同名的情况.

22     this代表它所在类的所属对象的引用,即哪个函数调用this所在的函数,this就代表哪个对象.

23     */

24     Person(int age)

25     {

26         this.age = age;

27         System.out.println("B: name = "+name+"    age = "+age);

28         //cry();

29     }

30     Person(int age ,String name)

31     {

32         this.age = age;

33         this.name = name;

34         System.out.println("C: name = "+this.name+"    age = "+this.age);

35         //cry();

36     }

37     

38     /*

39     this的应用:定义一个函数,比较两个人年龄是否相同.

40     */

41     public boolean compare(Person p)

42     {    

43         return this.age == p.age;  //this.age中的this代表的是调用这个函数的对象. ===>77行中的对象p4调用了compare函数,this就是代表的p4.

44     }

45     

46     //设置名字的函数

47     public void setName(String name)

48     {

49         this.name = name;

50     }

51     //获取名字的函数

52     public String getName()

53     {

54         return name;

55     }

56     

57     public void cry()

58     {

59         System.out.println("Cry--------!");

60     }

61 }

62 

63 class PersonDemo2

64 {

65     public static void main(String args [])

66     {

67         Person p1 = new Person();

68         Person p2 = new Person(10);

69         Person p3 = new Person(5,"Tom");

70         System.out.println(p3.getName());

71         

72         p3.setName("Paul");

73         System.out.println(p3.getName());

74         

75         Person p4 = new Person(25);

76         Person p5 = new Person(20);

77         boolean b = p4.compare(p5);  

78         System.out.println(b);

79 

80     }

81 }


 

static关键字:

用于修饰成员变量(全局变量)和函数.

被static修饰的变量,叫类变量,也叫做静态变量.

static成员变量只初使化一次,防止在其他文件单元中再被引用.

 

static局部变量和普通局部变量的区别:

1.把局部变量改变为静态变量后,改变了它的存储方式即改变了它的生存期.

2.把成员变量改变为静态变量后,改变了它的作用域,限制了它的使用范围.

static局部变量只被初始化一次,下一次依据上一次结果值;   

<什么时候定义静态函数:当功能内部没有访问到静态数据(对象的特有数据)时,该函数可以定义为静态函数.>???

 

由于静态函数在内存中只有一个实例,在使用过程中不需要再new实例化对象.这些类一般都是无状态的,函数谁调用都是一样的.

因此它们适用于工具类中.

工具类应用的有关代码练习操作:

  1 /**

  2 这是一个可以对数组进行操作的工具类,可以获取最值,排序,打印等功能.

  3 @author JerryHo

  4 @version V1.0

  5 */

  6 //要生成帮助文档,这个类必须是public的.

  7 public class ArrayTool

  8 {

  9     //将构造函数私有化以后,可以强制该类不能建立对象

 10     /**

 11     空参数构造函数.

 12     */

 13     private ArrayTool()

 14     {

 15         //系统会有个默认的构造函数

 16     }

 17     /**

 18     获取整型数组中的最大值.

 19     @param arr 接收一个int类型的数组.

 20     @return 返回该数组中的一个最大值.

 21     */    

 22     public static int getMax(int arr[])

 23     {

 24         int max=0;

 25         for(int x=0; x<arr.length;x++)

 26         if(arr[max]<arr[x])

 27         {

 28             max = x;

 29         }

 30         return arr[max];

 31     }

 32     /**

 33     获取整型数组中的最小值.

 34     @param arr 接收一个int类型数组.

 35     @return 返回该数组中的一个最小值.

 36     */

 37     public static int getMin(int arr[])

 38     {

 39         int min=0;

 40         for(int x=0;x<arr.length;x++)

 41         {

 42             if(arr[min]>arr[x])

 43             {

 44                 min = x;

 45             }

 46         }

 47         return arr[min];

 48     }

 49     /**

 50     对int类型的数组进行选择排序.

 51     @param arr 接收一个int类型数组.

 52     */

 53     public static void selectSort(int arr[])

 54     {

 55         for(int x =0;x<arr.length-1;x++)

 56         {

 57             for(int y=x+1;y<arr.length;y++)

 58             {

 59                 if(arr[x]>arr[y])

 60                 {

 61                     //int temp =arr[x];

 62                     //arr[x]=arr[y];

 63                     //arr[y]=temp;

 64                     swap(arr,x,y);

 65                 }

 66             }

 67         }

 68     }

 69     /**

 70     对数组进行冒泡排序.

 71     @param arr 接收一个int类型数组.

 72     */

 73     public static void  bubbleSort(int arr[])

 74     {

 75         for(int x=0;x<arr.length-1;x++)

 76         {

 77             for(int y =0;y<arr.length-1-x;y++)

 78                 if(arr[y]>arr[y+1])

 79                 {

 80                     //int temp =arr[y];

 81                     //arr[y]=arr[y+1];

 82                     //arr[y+1]=temp;

 83                     swap(arr,y,y+1);

 84                 }

 85         }

 86     }

 87     /**

 88     交换整型数组中的两个变量的值.

 89     @param arr 接收一个int类型数组.

 90     @param a 要置换的位置.

 91     @param b 要置换的位置.

 92     */

 93     private static void swap(int[]arr,int x,int y)

 94     {

 95         int temp =arr[x];

 96         arr[x]=arr[y];

 97         arr[y]=temp;

 98     }

 99     

100     /**

101     打印整型数组中的元素.

102     @param arr 接收一个int类型数组.

103     打印形式为:[element1,element2,...]

104     */

105     public static void printArray(int arr[])

106     {    

107         System.out.print("[");

108         for(int x=0;x<arr.length;x++)

109         {

110             if(x!=arr.length-1)

111             {

112                 System.out.print(arr[x]+",");

113             }

114             else

115             {

116                 System.out.println(arr[x]+"]");

117             }

118         }

119     }

120 }
 1 class ArrayToolDemo

 2 {

 3     public static void main(String args[])

 4     {

 5         /*

 6         int [] arr= new int[]{3,5,1,8,4,9,12};

 7         int [] arr1 = new int[]{9,3,6,18,13,4,23};

 8         ArrayTool at = new ArrayTool();

 9         

10         int max = at.getMax(arr);

11         System.out.println("max = "+max);

12         

13         int min =at.getMin(arr);

14         System.out.println("min = "+min);

15         

16         at.printArray(arr);

17         at.selectSort(arr);

18         at.printArray(arr);

19         

20         at.printArray(arr1);

21         at.bubbleSort(arr1);

22         at.printArray(arr1);

23         */

24         

25         //直接用类名调用有关的函数.

26         int [] arr= new int[]{3,5,1,8,4,9,12};

27         int [] arr1 = new int[]{9,3,6,18,13,4,23};

28         

29         int max = ArrayTool.getMax(arr);

30         System.out.println("max = "+max);

31         int min = ArrayTool.getMin(arr);

32         System.out.println("min = "+min);

33         

34         int Max = ArrayTool.getMax(arr1);

35         System.out.println("max = "+Max);

36         int Min = ArrayTool.getMin(arr1);

37         System.out.println("min = "+Min);

38         

39         ArrayTool.printArray(arr);

40         ArrayTool.selectSort(arr);

41         ArrayTool.printArray(arr);

42         

43         ArrayTool.printArray(arr1);

44         ArrayTool.selectSort(arr1);

45         ArrayTool.printArray(arr1);

46         

47         

48     }

49 }

 

昨天停了快一天的电,一晚上热的没睡好,早上起来就开始看,看完教程还得自己思考,好多地方不是很懂不过还是慢慢来把,感觉脑袋都有些僵硬了,看完视频教程都快11点多了,又得做笔记,还得想想总结一天学的东西,然后敲代码,编译以后发现总是好多问题,又改来改去的看问题出现在哪里,一折腾就11点快12点了,在还得写博客记录,一天下来感觉又充实又累人,有种高三的感觉啊,洗澡睡觉去,明天还得继续..hold on...!

 

你可能感兴趣的:(java基础)