zoukankan      html  css  js  c++  java
  • 【原】Java学习笔记014

     1 package cn.temptation;
     2 
     3 public class Sample01 {
     4     public static void main(String[] args) {
     5         // 面向对象思想
     6         
     7         // 回顾编程语言思想进化之路:从面向过程到面向对象
     8         
     9         // 面向过程
    10         // 举例:
    11         // 1、冰箱门打开
    12         // 2、大象放进去
    13         // 3、冰箱门关上
    14         // 【面向过程的思路的着眼点在于动作的功能,思考打开、放入、关闭均为动作】
    15         
    16         // 面向对象:随着软件工程的成熟,人们根据自然的、正常的思考逻辑,从概念模型入手,考虑其特征及行为
    17         // 举例:
    18         // 比如:买手机,首先考虑的是有一个手机的概念模型,其特征(便携性、美观性等)及行为(打电话、发短信、上网等)迎合人们的一些方面的需要
    19         // 再去思考面向过程的放大象的这个例子
    20         // 为什么我们会想到打开冰箱门?因为冰箱在我们的头脑中已经形成了一个概念模型,我们知道它有一个特征(门),并且还有其行为(可以打开和关闭)
    21         // 为什么我们会想到大象可以放入冰箱中?因为冰箱给我们另一个特征(是一个大容器,换句话说就是其有容量)
    22         // 所以,我们人类的思考点还是自然而然的聚焦到概念模型上
    23         // 【面向对象的思路的着眼点在于概念模型的特征及行为】
    24         
    25         // 对象:大千世界中的万物都是对象
    26         // 关注对象,主要关注对象的两个方面:特征   和    行为
    27         // 举例:在淘宝上买衣服,关注衣服的外形、颜色、价格等等(特征),还要关注衣服的行为(是不是穿上衣服大家点赞等)
    28         
    29         // 面向对象的思考中,不但要考虑单个对象的特征和行为,而且要考虑对象和对象之间的关联关系
    30         // 举例:买一个手机,关注这个手机的各种参数(特征),还有手机的功能(打电话、上网等)(行为)
    31         //        除此之外,手机能使用,还得需要手机卡,手机卡是另一个对象,手机和手机卡之间有关联关系的(比如:只支持电信的手机就不能使用移动的卡)
    32         
    33         // 对象的特征:表征对象特点的描述,在Java中称为属性
    34         // 对象的行为:表征对象实现功能的途径,在Java中称为方法
    35         
    36         // 类:(成语:物以类聚)
    37         // 定义:在面向对象思想中,类是具有相同的属性 和 行为 的一系列物体的集合,具有抽象意味
    38         
    39         // 举例:学生类
    40         // 属性:学号、年龄、性别、姓名...
    41         // 行为:读书、考试、吃饭、睡觉...
    42         
    43         // 对象:
    44         // 定义:是类的具体表现形式,具体化的、实实在在的物体
    45         
    46         // 举例:张三    是个 学生(对象),他 是学生类的具体化的产物
    47     }
    48 }
     1 package cn.temptation;
     2 
     3 public class Sample02 {
     4     public static void main(String[] args) {
     5         /*
     6          * 类的形式
     7          * 
     8          * 修饰符             class     类名 {
     9          *      成员变量;
    10          *      成员方法;
    11          * }
    12          * 
    13          * 成员变量用来记录属性(特征)
    14          * 成员方法用来记录行为(动作)
    15          * 
    16          * 仅仅有一个类,只是有了一个模板,要具体的使用,还需要有对象
    17          * 依据类这个模板创建具体对象实例的方式或者过程,称为类的实例化,也就是说类的实例化得到的是具体的对象
    18          * 
    19          * 类   是  什么类型的?    类类型  是  一种类型,也是一种引用数据类型
    20          * 引用数据类型的存储特点:声明在栈上,具体的内容通过new关键字存储在堆中开辟的空间里
    21          * 
    22          * 类的实例化的格式:
    23          * 类名     对象名      =    new    类名();
    24          * 
    25          * 如何来使用类这个模板中定义了的成员变量 和  成员方法?
    26          * 借助于   点号运算符 .
    27          * 使用成员变量  对象名.成员变量
    28          * 使用成员方法  对象名.成员方法
    29          */
    30         
    31         // 类的实例化,得到一个具体的对象
    32         Student student = new Student();
    33         System.out.println(student);            // cn.temptation.Student@15db9742
    34         
    35         // 基本数据类型(值类型)的默认值
    36         // byte、short、int、long:0
    37         // float、double:0.0
    38         // char:'u0000'
    39         // boolean:false
    40         
    41         // 引用数据类型的默认值:null
    42         
    43         // 成员变量的使用(取值)
    44         System.out.println(student.studentNumber);        // 0
    45         System.out.println(student.studentName);            // null
    46         System.out.println(student.age);                    // 0
    47         System.out.println(student.gender);                // null
    48         
    49         // 针对成员变量的赋值
    50         student.studentNumber = 7;
    51         student.studentName = "张三";
    52         student.age = 18;
    53         student.gender = "男";
    54         
    55         // 成员变量的使用(取值)
    56         System.out.println(student.studentNumber);        // 7
    57         System.out.println(student.studentName);            // 钱博文
    58         System.out.println(student.age);                    // 18
    59         System.out.println(student.gender);                //60         
    61         // 成员方法的使用
    62         student.study();
    63         student.eat();
    64         student.say("我是钱博文,我喂自己袋盐!");
    65     }
    66 }
    67 
    68 // 类的定义:创建一个学生类
    69 class Student {
    70     // 成员变量
    71     // 学号
    72     int studentNumber;
    73     // 姓名
    74     String studentName;
    75     // 年龄
    76     int age;
    77     // 性别
    78     String gender;
    79     
    80     // 成员方法
    81     // 学习方法
    82     public void study() {
    83         System.out.println("书中自有颜如玉!");
    84     }
    85     
    86     // 吃饭方法
    87     public void eat() {
    88         System.out.println("民以食为天!");
    89     }
    90     
    91     // 说话方法
    92     public void say(String word) {
    93         System.out.println("说:" + word);
    94     }
    95 }
     1 package cn.temptation;
     2 
     3 public class Sample03 {
     4     public static void main(String[] args) {
     5         // 类的实例化
     6         
     7         // 类作为模板,自然可以创建出多个该类类型的对象
     8         Dog dog1 = new Dog();
     9         System.out.println(dog1);        // cn.temptation.Dog@15db9742
    10         
    11         Dog dog2 = new Dog();
    12         System.out.println(dog2);        // cn.temptation.Dog@6d06d69c
    13         
    14         // new关键字使用一次,就在内存的堆中开辟一块空间
    15     }
    16 }
    17 
    18 // 定义狗类
    19 class Dog {
    20     // 成员变量
    21     int id;
    22     String name;
    23     int age;
    24     
    25     // 成员方法
    26     
    27 }
     1 package cn.temptation;
     2 
     3 public class Sample04 {
     4     public static void main(String[] args) {
     5         // 需求:创建一个手机类,其特征为品牌(brand)、价格(price)、颜色(color);其行为有打电话、发短信
     6         
     7         // 类的实例化
     8         Phone phone = new Phone();
     9         phone.brand = "HUAWEI";
    10         phone.price = 1000;
    11         phone.color = "黑色";
    12         
    13         System.out.println("手机的品牌为:" + phone.brand + ",价格为:" + phone.price + ",颜色为:" + phone.color);
    14         
    15         phone.call("110");
    16         phone.sendMsg("120", "快回来吃饭!!");
    17     }
    18 }
    19 
    20 // 定义手机类
    21 class Phone {
    22     // 成员变量
    23     // 品牌
    24     String brand;
    25     // 价格
    26     int price;
    27     // 颜色
    28     String color;
    29     
    30     // 成员方法
    31     // 打电话
    32     public void call(String number) {
    33         System.out.println("打电话给:" + number);
    34     }
    35     
    36     // 发短信
    37     public void sendMsg(String number, String msg) {
    38         System.out.println("发短信给:" + number + ",内容为:" + msg);
    39     }
    40 }
     1 package cn.temptation;
     2 
     3 public class Sample05 {
     4     public static void main(String[] args) {
     5         // 成员变量  和  局部变量
     6         
     7         Test test = new Test();
     8         
     9 //        System.out.println("成员变量i:" + test.i);
    10         // 对于只声明不赋值的成员变量,使用时使用的是它的默认值
    11         
    12 //        test.show1();
    13         test.show2(4);
    14         test.show3();
    15     }
    16 }
    17 
    18 // 定义一个测试类
    19 class Test {
    20     // 成员变量
    21 //    int i;        // 成员变量只做声明不做赋值,语法上OK
    22     int i = 2;    // 成员变量声明时同时进行赋值,语法上OK
    23     // 在成员变量中也声明并赋值一个变量j
    24     int j = 3;
    25     
    26     // 成员方法
    27     public void show1() {
    28 //        System.out.println(i);        // 在成员方法中访问成员变量i,是可以访问的
    29 
    30         // 语法错误:j cannot be resolved to a variable  不声明就直接使用变量j,是无法使用的
    31 //        System.out.println(j);
    32         
    33         // 在方法中声明并赋值了变量j,这里的j是什么变量?            答:局部变量
    34         int j = 5;
    35         // 语法错误:The local variable j may not have been initialized        只声明不赋值,提示未初始化
    36 //        int j;
    37         System.out.println("方法内的变量j:" + j);
    38     }
    39     
    40     public void show2(int j) {
    41         System.out.println("方法内的变量j:" + j);    // 变量j写在方法的形参位置,它既是形参,也是局部变量
    42         // 局部变量的作用域(作用范围)就是从其变量声明的地方开始,到其所在方法的右侧大括号结束
    43     }
    44     
    45     public void show3() {
    46         // 当前方法中没有该变量名的局部变量的声明,同时又没有该变量名的成员变量的声明,直接使用该变量名,有语法错误
    47         // 语法错误:j cannot be resolved to a variable  不声明就直接使用变量j,是无法使用的
    48         // 当前方法中没有该变量名的局部变量的声明,同时有该变量名的成员变量的声明,直接使用该变量名,没有语法错误
    49         System.out.println(j);
    50         // 这里直接使用了作为成员变量j的值,也就是说在方法中,如果没有同名的局部变量j,使用变量j时,就会到成员变量中找是否有j
    51         
    52         // 疑问:
    53         // 1、show3方法中没有定义j变量,为何没有去上面的方法show1 和 show2中去找?
    54         // 答:从局部变量的作用域来看,局部变量只能在其所在方法中使用的,超出了这个范围就无法使用了
    55         // 2、Test类中有成员变量j,show1方法 和 show2方法中又有局部变量j,调用方法时,为何显示的还是局部变量j的值?
    56         // 答:变量的调用原则:就近原则
    57     }
    58 }
    59 /*
    60  * 成员变量    和    局部变量的区别:
    61  * 1、代码位置上的区别:
    62  * A、局部变量:在方法中或是在方法的形参中定义的
    63  * B、成员变量:在类中且在方法外定义的
    64  * 
    65  * 2、内存中位置的区别:
    66  * A、局部变量:存储在栈上(方法调用时,会将方法压入栈中;方法调用结束后,会将方法从栈中弹出)
    67  * B、成员变量:存储在堆中
    68  * 
    69  * 3、生命周期上的区别:
    70  * A、局部变量:跟着方法来的,方法被调用,方法被压入栈中,局部变量产生了;方法调用结束后,方法从栈中弹出,局部变量也就销毁了
    71  * B、成员变量:随着对象的创建而创建,随着对象的消亡而消亡
    72  * 
    73  * 4、初始值上的区别:
    74  * A、局部变量:需要被初始化才可以使用,换句话说就是没有默认值
    75  * B、成员变量:有默认值,可以不用初始化就拿着默认值使用
    76  */
  • 相关阅读:
    237. Delete Node in a Linked List
    430. Flatten a Multilevel Doubly Linked List
    707. Design Linked List
    83. Remove Duplicates from Sorted List
    160. Intersection of Two Linked Lists
    426. Convert Binary Search Tree to Sorted Doubly Linked List
    142. Linked List Cycle II
    类之间的关系
    初始化块
    明确类和对象
  • 原文地址:https://www.cnblogs.com/iflytek/p/6528200.html
Copyright © 2011-2022 走看看