zoukankan      html  css  js  c++  java
  • 《java笔记 day07》

     1 //匿名对象_1
     2 class Car
     3 {
     4     //描述属性;
     5     String color;
     6     int number;
     7 
     8     //描述行为:
     9     void run()
    10     {
    11         System.out.println(color+":"+number);
    12     }
    13 }
    14 class CarDemo
    15 {
    16     //定义主函数,为了让程序运行起来。
    17     public static void main(String[] args) 
    18     {
    19         //创建Car.class类的对象。
    20         //Car c = new Car();    //这个c是类类型的变量。类类型的变量一定
    21                             //指向对象。(引用型的变量也可以不指向
    22                             //变量,例如Car c = null)
    23         //调用对象的成员。
    24         //c.color = "red";
    25         //c.number = 4;
    26         //c.run();
    27 
    28         //这两句可以简化。
    29         //Car c = new Car();
    30         //c.run();
    31 
    32         //简化成如下写法,匿名对象就是为了简化书写。
    33         new Car().run();    //这个对象没有名字,这就是匿名对象。
    34 
    35         /*
    36         记住:凡是简化的都有局限。
    37 
    38         */
    39 
    40         new Car().color = "red";    //这一句一旦在堆内存中执行完,
    41                                     //因为没有任何对象去指向这个对象,
    42                                     //这个对象就成为了垃圾,至于什么
    43                                     //时候被垃圾回收机制回收这片内存,
    44                                     //要等到多线程才能理解。
    45         new Car().number = 4;
    46         new Car().run();
    47 
    48         /*
    49         匿名对象有什么用呢?为了简化书写。
    50         使用场景:当对象对对方法进行调用时,而且只调用一次时,
    51         可以简化成匿名对象。
    52         Car c = new Car(); c.run(); --->new Car().run();
    53 
    54         Car c = new Car();
    55         c.run();
    56         c.run();
    57         c.run();
    58         是不可以简化成以下书写的。因为对象不同。
    59         new Car().run();
    60         new Car().run();
    61         new Car().run();
    62         记住:当对象需要调用多次成员的时候,不可以简化成匿名对象调用。
    63         */
    64     }
    65 }
     1 //匿名对象_2  匿名对象作为实参。
     2 class Car
     3 {
     4     //描述属性;
     5     String color;
     6     int number;
     7 
     8     //描述行为:
     9     void run()
    10     {
    11         System.out.println(color+":"+number);
    12     }
    13 }
    14 
    15 class CarDemo2
    16 {
    17     public static void main(String[] args)
    18     {
    19         /*
    20         Car c = new Car();
    21         c.color = "red";
    22         c.number = 4;
    23         c.run();
    24 
    25         Car c1 = new Car();
    26         c1.color = "red";
    27         c1.number = 4;
    28         c1.run();
    29         */
    30 
    31         //以上代码的复用性差,只有对象不同,而调用的成员和赋值都相同。
    32         //可以进行抽取,定义一个功能。将重复的代码进行封装。
    33         Car c = new Car();
    34         Car c1 = new Car();
    35         show(c);//简化成show(new Car())
    36         //show(c1);
    37         show(new Car());
    38         
    39     }
    40 
    41     //功能的结果是什么呢?没有具体值,所以是void.
    42     //功能的未知参数是什么呢?对象不明确,可以将其定义成函数。
    43     public static void show(Car cc)//Car cc = c
    44     {
    45         cc.color = "red";
    46         cc.number = 4;
    47         cc.run();
    48     }
    49 }
     1 //基本数据和引用数据参数传递过程。
     2 class Demo
     3 {
     4     public static void main(String[] args) 
     5     {
     6         int x = 4;
     7         show(x);
     8         System.out.println("x="+x);//打印结果为:x=4
     9     }
    10     public static void/*int*/ show(int x)
    11     {
    12         x = 5;
    13         //return x;
    14     }
    15 }
    16 
    17 class Demo2
    18 {
    19     int x;
    20     public static void main(String[] agrs)
    21     {
    22         Demo2 d = new Demo2();
    23         d.x = 5;
    24         show(d);//show(new Demo());
    25         System.out.println("x="+d.x);//打印结果为x=6
    26     }
    27     public static void show(Demo d)
    28     {
    29         d.x = 6;
    30     }
    31 }

      1 //封装。
      2 
      3 /*
      4 封装:
      5 表现:
      6 1,函数就是一个封装最基本的封装体。
      7 2,类其实也是一个封装体。
      8 
      9 从以上两点得出结论:
     10 1,提高了代码的复用性。
     11 2,隐藏了实现的细节,对外提供访问方式。
     12 3,提高了安全性。
     13 它也是面向对象思想的特征之一。
     14 共有三个特征:封装,继承,多态。
     15 
     16 举例:机箱。隐藏了板卡设备的细节,对外提供了插口以及开关等
     17       访问内部细节的方式。
     18 */
     19 //描述人。Person
     20 //属性:说话:说出自己的年龄。
     21 
     22 
     23 /*
     24 总结:
     25 类中不需要对外提供的内容私有化,包括属性和行为。 
     26 
     27 selectSort(int[] arr)
     28 {
     29     swap(){}
     30 }
     31 
     32 bubbleSort(int[] arr)
     33 {
     34     swap(){}
     35 }
     36 
     37 重点:以后再描述事物,属性都私有化,并提供setXXX,getXXX方法对其进行访问。
     38 */
     39 class Person
     40 {
     41     //属性。
     42     private int age;    //age就被修饰为了private私有,
     43                         //也就是被隐藏了,这就是封装的
     44                         //一种体现。
     45 
     46     //行为。
     47     void speak()
     48     {
     49         System.out.println("age="+age);
     50     }
     51 
     52     /*
     53     年龄已被私有,错误的值无法赋值,可是正确的值也赋值不了。不行。
     54     咋办,安照之前所学习的封装的原理,隐藏后,还需要提供访问方式。
     55     通过方法的方式,让其他程序访问到就可以了,更重要的是可以在方法
     56     中加入逻辑判断。
     57 
     58     记住:对变量的访问操作有两个动作;赋值(设置),取值(获取).
     59     所以,对私有的变量访问的方式就是set变量,get变量--->setAge,getAge.
     60     */
     61 
     62     //定义一个对age赋值的方法,
     63     void setAge(int a)
     64     {
     65         //加入逻辑判断。
     66         if(a>0 && a<130)
     67             age = a;
     68         else
     69     //        System.out.println("对不起,您的年龄数值"+a+"是非法的。");
     70     //    throw new RuntimeException("对不起,您的年龄数值"+a+"是非法的。");//异常。一旦出现,程序结束,需要修改代码。
     71     }
     72 
     73     //定义一个获取age值得方法。
     74     int getAge()
     75     {
     76         return age;
     77     }
     78 }
     79 
     80 class PersonDemo
     81 {
     82     public static void main(String[] args)
     83     {
     84         //测试Person.class.
     85         //创建对象。
     86         Person p = new Person();
     87 
     88         /*
     89         赋值-20是可以的,因为age属性是int型的,但是不符合现实生活中的
     90         事物属性。
     91 
     92         不让它访问就可以了,怎么在代码中体现呢?需要使用一个java中的关
     93         键字private。(私有 修饰符)
     94         */
     95 //        p.age = -20;//age不能再Person类以外的程序中直接访问了。
     96 
     97         //演示:对age设置和获取方法的体现。
     98         p.setAge(-20);
     99         int a = p.getAge();
    100         System.out.println("a="+a);
    101 //        p.speak();
    102     }
    103 }
    104 
    105 /*
    106 什么叫做封装:
    107 隐藏了实现细节,提供对外访问的方式,这才叫封装,而私有仅仅是
    108 封装的一种体现。
    109 */
      1 //面向对象---构造函数。
      2 /*
      3 需求:为了描述事物更准确,发现事物对应的很多对象一创建时,
      4       就有了一些基本的属性等内容。一些初始化的数据,在类中
      5       该如何完成。
      6     
      7 通过Java中的另一个小技术完成:就是构造函数,对象本身就是构造出来的。
      8 构造时,需要做一些动作,这些应该定义在函数内。
      9 
     10 构造函数有什么用?可以在对象创建时对对象进行初始化。
     11 1,没有返回值类型。因为构造对象,创建完成就结束,不需要结果。void也不要写
     12    因为要区别于一般函数。
     13 2,构造函数的名字和类名一样。(构造函数就是给类在创建对象是而提供的)
     14 3,没有具体的返回值。
     15 接下来,安照以上三点,在Person类中定义一个构造函数。
     16 Person类的对象一创建就具备了姓名。
     17 
     18 发现了问题.
     19 没有学习构造函数时,对象也被创建出来了,那么该对象是否有被构造呢?后者
     20 说是否有调用构造函数呢?
     21 
     22 是的,必须调用!
     23 那么类中那个构造函数是什么呢?
     24 
     25 class Person
     26 {
     27     //Person(){}//默认的空参数的构造函数。
     28 }
     29 
     30 main()
     31 {
     32     Person p = new Person();    //这个已经调用了Person类中的空参数的构造
     33                                 //函数,类中有定义构造函数吗?有的,只要
     34                                 //定义了一个类,该类中就有一个空参数的构造
     35                                 //函数,是编译器编译时自动加上的。
     36                                 
     37                                 //注意:如果在类中自定义了构造函数,那么默认
     38                                 //的空参数的构造函数就不添加了。防止冲突。
     39                                 
     40                                 //原理:没有定义对象的初始化过程,编译器会添加一个默认的
     41                                 //初始化过程,如果定义了指定的初始化过程,默认的就不添加了。
     42 }
     43 
     44 什么时候需要些构造函数呢?
     45 如果对象一初始化就具备了一些内容,这需要写构造函数,在对象被创建的时候,用这个构造函数来初始化这个对象。
     46 如果对象初始化时不具备内容,这不需要写构造函数。用setXXX来指定。
     47 
     48 
     49 构造函数细节:
     50 1,一个类可以有多个构造函数,它们的存在是以重载的形式体现的。
     51 2,构造函数中也是有return语句的,用于结束初始化动作的。
     52 3,构造函数是否能被private修饰呢? 能。作用就是,其他程序无法创建该类的对象。
     53   但是在本类里面还是可以创建对象的。
     54 class Person
     55 {
     56     private person(){}//私有化构造函数。
     57 }
     58 main()
     59 {
     60     Person p = new Person();    //创建对象无法初始化
     61 }
     62 
     63 构造函数和一般函数的区别:
     64 1,写法不一样。
     65 2,运行上有差别,对象一创建就会调用对应的构造函数。
     66     一般方法是对象创建后,才会调用所需的一般函数。
     67 问:有了构造函数初始化姓名,那么还需要setName方法吗?需要,因为对象创建之后,
     68     如果需要对数据进行修改,可以通过set完成。
     69 3,构造函数在对象创建时,仅调用一次(因为初始化动作只做一次,而且先执行)。而一般方法可以被调用多次。
     70 class Person
     71 {
     72     //这个类里面还有一个默认的空参数构造函数。
     73     void Person(){}//这不是构造函数,这是一般函数。
     74 }
     75 main()
     76 {
     77     Person p = new Person();
     78 }
     79 */
     80 class Person
     81 {
     82     //属性:姓名,年龄
     83     private String name;
     84     private int age;
     85 
     86     //一初始化,既没有姓名,又没有年龄。
     87     Person()
     88     {
     89 
     90     }
     91 
     92     //return语句用于结束初始化动作演示:
     93 //    Person(int a)
     94 //    {
     95 //        if(a<0)
     96 //            return;    //return语句用于提前结束初始化动作。
     97 //        age = a;
     98 //    }
     99 
    100     //定义构造函数。
    101     Person(String n)
    102     {
    103         //将接受到的值赋值给对象的name。
    104         this.name = n;
    105     }
    106 
    107     //一初始化,既有姓名,又有年龄。
    108     Person(String n,int a)
    109     {
    110         name = n;
    111         age = a;
    112     }
    113 
    114     //行为:
    115     public void speak()
    116     {
    117         System.out.println("name="+this.name+",age="+age);
    118     }
    119 }
    120 class  PersonDemo2
    121 {
    122     public static void main(String[] args) 
    123     {
    124         Person p1 = new Person();
    125         Person p = new Person("lisi");    //对象创建时,必须会调用对应的构造函数。
    126         Person p2 = new Person("wangwu",18);
    127         p.speak();
    128         p1.speak();
    129         p2.speak();
    130     }
    131 }
     1 //构造函数——之间的调用。
     2 /*
     3 当构造函数之间进行互相调用时,该如何解决呢?
     4 
     5 构造函数是对象初始化时调用的。
     6 给哪个对象初始化呢?通过this关键字来明确被初始化的对象。
     7 
     8 在构造函数中调用其他构造函数的格式:this(实参列表);就会调用对应的构造函数。
     9 
    10 小结:
    11 this到底代表什么呢?
    12 this就代表对象,代表哪个对象呢?哪个对象调用了this所在的函数,this就代表了哪个对象。
    13 */
    14 class Person
    15 {
    16     private String name;
    17     private int age;
    18     Person()
    19     {
    20 
    21     }
    22     //初始化姓名。
    23     private Person(String n)
    24     {
    25         name = n;
    26 //        cry();    //构造函数调用一般方法,
    27     }
    28     //初始化姓名和年龄,既然第二个构造函数已经做完了构造姓名的动作,这个构造函数就没有必要做了。直接调用就好了。
    29     Person(String n,int a)
    30     {
    31         this(n);    //thsi代表当前对象,//这是在调用一个字符串参数的构造函数。
    32                     //注意:调用其他构造函数的语句,必须定义在构造函数的第一行,
    33                     //原因是,初始化动作必须要先执行。
    34     //    name = n;
    35         age = a;
    36     }
    37     
    38     //一般方法,
    39     void cry()
    40     {
    41 
    42     }
    43 }
    44 
    45 class  PersonDemo3
    46 {
    47     public static void main(String[] args) 
    48     {
    49         
    50     }
    51 }

     1 //this关键字的应用。
     2 /*
     3 this关键字的另一个作用:
     4 可以用this标识符哪个变量是成员变量。这个标识符可以省略不写。
     5 但是,当局部变量和成员变量同名时,this不能省略,因为要用this
     6 标识成员变量。
     7 */
     8 
     9 class Person
    10 {
    11     private String name;
    12     private int age;
    13 
    14     Person(String name,int age)
    15     {
    16         this.name = name;
    17         this.age = age;
    18     }
    19     
    20     public void speak()
    21     {
    22         String name = "haha";
    23         System.out.println("name="+this.name+",age="+this.age);
    24     }
    25 
    26     public void method()
    27     {
    28         this.speak();//这个方法可以省略,因为方法如果同名的话还可以用参数列表来区分。
    29     }
    30 
    31     //定义一个功能,判断两个人是否是同龄人。
    32     //1,明确结果,boolean 2,明确未知内容,1个,Person类型。
    33     public boolean equalsAge(Person pp)
    34     {
    35         /*
    36         if(pp.age == this.age)//当函数中使用到了调用该函数的对象时,用this表示这个对象。
    37             return true;
    38         return false;
    39         */
    40 //        return (pp.age == this.age)?true:false;
    41         return pp.age == this.age;
    42     }
    43 }
    44 
    45 class  PersonDemo4
    46 {
    47     public static void main(String[] args) 
    48     {
    49         /*
    50         Person p = new Person("lisi",20);
    51         p.speak();
    52         Person p1 = new Person("xiaoming",24);
    53         p1.speak();
    54         p1.method();
    55         */
    56         Person p = new Person("lisi",20);
    57         boolean l = p.equalsAge(new Person("xiaoming",21));
    58         System.out.println(l);
    59     }
    60 }
  • 相关阅读:
    wampServer多站点配置
    wamp中根目录自定义
    [学习笔记] 七步从Angular.JS菜鸟到专家(2):Scopes [转]
    [学习笔记] 七步从Angular.JS菜鸟到专家(1):如何开始 [转]
    [学习笔记] Python标准库简明教程 [转]
    [学习笔记] Python标准库的学习准备 [转]
    [学习笔记] socket通信简介 [转]
    [学习笔记] 国内主流php框架比较 [转]
    [学习笔记] symfony核心类 [转]
    [学习笔记] Symfony2安全机制
  • 原文地址:https://www.cnblogs.com/sun-/p/5318347.html
Copyright © 2011-2022 走看看