zoukankan      html  css  js  c++  java
  • Java基础语法Day_06(面相对象和封装)

    第1节 描述类介绍与使用

      day06_01_面向对象思想的概述

      day06_02_面向对象思想的举例

      day06_03_类和对象的关系

      day06_04_类的定义

      day06_05_对象的创建及其使用

      day06_06_手机类练习

      day06_07_一个对象的内存图

      day06_08_两个对象使用同一个方法的内存图

      day06_09_两个引用指向同一个对象的内存图

      day06_10_使用对象类型作为方法的参数

      day06_11_使用对象类型作为方法的返回值

      day06_12_成员变量和局部变量的区别

      day06_13_面向对象三大特征之封装性

      day06_14_private关键字的作用及使用

      day06_15_练习使用private关键字定义学生类

      day06_16_this关键字的作用

      day06_17_构造方法

      day06_18_定义一个标准的类(自动生成代码练习题)

      小节测试

     1 package cn.itcast.day06.demo01;
     2 
     3 import java.util.Arrays;
     4 
     5 /*
     6 面向过程:当需要实现一个功能的时候,每一个具体的步骤都要亲力亲为,详细处理每一个细节。
     7 面向对象:当需要实现一个功能的时候,不关心具体的步骤,而是找一个已经具有该功能的人,来帮我做事儿。
     8  */
     9 public class Demo01PrintArray {
    10 
    11     public static void main(String[] args) {
    12         int[] array = { 10, 20, 30, 40, 50, 60 };
    13 
    14         // 要求打印格式为:[10, 20, 30, 40, 50]
    15         // 使用面向过程,每一个步骤细节都要亲力亲为。
    16         System.out.print("[");
    17         for (int i = 0; i < array.length; i++) {
    18             if (i == array.length - 1) { // 如果是最后一个元素
    19                 System.out.println(array[i] + "]");
    20             } else { // 如果不是最后一个元素
    21                 System.out.print(array[i] + ", ");
    22             }
    23         }
    24         System.out.println("==============");
    25 
    26         // 使用面向对象
    27         // 找一个JDK给我们提供好的Arrays类,
    28         // 其中有一个toString方法,直接就能把数组变成想要的格式的字符串
    29         System.out.println(Arrays.toString(array));
    30     }
    31 
    32 }
     1 package cn.itcast.day06.demo01;
     2 
     3 /*
     4 定义一个类,用来模拟“学生”事物。其中就有两个组成部分:
     5 
     6 属性(是什么):
     7     姓名
     8     年龄
     9 行为(能做什么):
    10     吃饭
    11     睡觉
    12     学习
    13 
    14 对应到Java的类当中:
    15 
    16 成员变量(属性):
    17     String name; // 姓名
    18     int age; // 年龄
    19 成员方法(行为):
    20     public void eat() {} // 吃饭
    21     public void sleep() {} // 睡觉
    22     public void study() {} // 学习
    23 
    24 注意事项:
    25 1. 成员变量是直接定义在类当中的,在方法外边。
    26 2. 成员方法不要写static关键字。
    27  */
    28 public class Student {
    29 
    30     // 成员变量
    31     String name; // 姓名
    32     int age; // 姓名
    33 
    34     // 成员方法
    35     public void eat() {
    36         System.out.println("吃饭饭!");
    37     }
    38 
    39     public void sleep() {
    40         System.out.println("睡觉觉!");
    41     }
    42 
    43     public void study() {
    44         System.out.println("学习!");
    45     }
    46 
    47 }
     1 package cn.itcast.day06.demo01;
     2 
     3 /*
     4 通常情况下,一个类并不能直接使用,需要根据类创建一个对象,才能使用。
     5 
     6 1. 导包:也就是指出需要使用的类,在什么位置。
     7 import 包名称.类名称;
     8 import cn.itcast.day06.demo01.Student;
     9 对于和当前类属于同一个包的情况,可以省略导包语句不写。
    10 
    11 2. 创建,格式:
    12 类名称 对象名 = new 类名称();
    13 Student stu = new Student();
    14 
    15 3. 使用,分为两种情况:
    16 使用成员变量:对象名.成员变量名
    17 使用成员方法:对象名.成员方法名(参数)
    18 (也就是,想用谁,就用对象名点儿谁。)
    19 
    20 注意事项:
    21 如果成员变量没有进行赋值,那么将会有一个默认值,规则和数组一样。
    22  */
    23 public class Demo02Student {
    24 
    25     public static void main(String[] args) {
    26         // 1. 导包。
    27         // 我需要使用的Student类,和我自己Demo02Student位于同一个包下,所以省略导包语句不写
    28 
    29         // 2. 创建,格式:
    30         // 类名称 对象名 = new 类名称();
    31         // 根据Student类,创建了一个名为stu的对象
    32         Student stu = new Student();
    33 
    34         // 3. 使用其中的成员变量,格式:
    35         // 对象名.成员变量名
    36         System.out.println(stu.name); // null
    37         System.out.println(stu.age); // 0
    38         System.out.println("=============");
    39 
    40         // 改变对象当中的成员变量数值内容
    41         // 将右侧的字符串,赋值交给stu对象当中的name成员变量
    42         stu.name = "赵丽颖";
    43         stu.age = 18;
    44         System.out.println(stu.name); // 赵丽颖
    45         System.out.println(stu.age); // 18
    46         System.out.println("=============");
    47 
    48         // 4. 使用对象的成员方法,格式:
    49         // 对象名.成员方法名()
    50         stu.eat();
    51         stu.sleep();
    52         stu.study();
    53     }
    54 
    55 }

     手机类练习

     1 package cn.itcast.day06.demo02;
     2 
     3 /*
     4 定义一个类,用来模拟“手机”事物。
     5 属性:品牌、价格、颜色
     6 行为:打电话、发短信
     7 
     8 对应到类当中:
     9 成员变量(属性):
    10     String brand; // 品牌
    11     double price; // 价格
    12     String color; // 颜色
    13 成员方法(行为):
    14     public void call(String who) {} // 打电话
    15     public void sendMessage() {} // 群发短信
    16  */
    17 public class Phone {
    18 
    19     // 成员变量
    20     String brand; // 品牌
    21     double price; // 价格
    22     String color; // 颜色
    23 
    24     // 成员方法
    25     public void call(String who) {
    26         System.out.println("给" + who + "打电话");
    27     }
    28 
    29     public void sendMessage() {
    30         System.out.println("群发短信");
    31     }
    32 }
     1 package cn.itcast.day06.demo02;
     2 
     3 public class Demo01PhoneOne {
     4 
     5     public static void main(String[] args) {
     6         // 根据Phone类,创建一个名为one的对象
     7         // 格式:类名称 对象名 = new 类名称();
     8         Phone one = new Phone();
     9         System.out.println(one.brand); // null
    10         System.out.println(one.price); // 0.0
    11         System.out.println(one.color); // null
    12         System.out.println("=========");
    13 
    14         one.brand = "苹果";
    15         one.price = 8388.0;
    16         one.color = "黑色";
    17         System.out.println(one.brand); // 苹果
    18         System.out.println(one.price); // 8388.0
    19         System.out.println(one.color); // 黑色
    20         System.out.println("=========");
    21 
    22         one.call("乔布斯"); // 给乔布斯打电话
    23         one.sendMessage(); // 群发短信
    24     }
    25 
    26 }

    一个对象的内存图

    两个对象的内存图

     1 package cn.itcast.day06.demo02;
     2 
     3 public class Demo02PhoneTwo {
     4 
     5     public static void main(String[] args) {
     6         Phone one = new Phone();
     7         System.out.println(one.brand); // null
     8         System.out.println(one.price); // 0.0
     9         System.out.println(one.color); // null
    10         System.out.println("=========");
    11 
    12         one.brand = "苹果";
    13         one.price = 8388.0;
    14         one.color = "黑色";
    15         System.out.println(one.brand); // 苹果
    16         System.out.println(one.price); // 8388.0
    17         System.out.println(one.color); // 黑色
    18         System.out.println("=========");
    19 
    20         one.call("乔布斯"); // 给乔布斯打电话
    21         one.sendMessage(); // 群发短信
    22         System.out.println("=========");
    23 
    24         Phone two = new Phone();
    25         System.out.println(two.brand); // null
    26         System.out.println(two.price); // 0.0
    27         System.out.println(two.color); // null
    28         System.out.println("=========");
    29 
    30         two.brand = "三星";
    31         two.price = 5999.0;
    32         two.color = "蓝色";
    33         System.out.println(two.brand); // 三星
    34         System.out.println(two.price); // 5999.0
    35         System.out.println(two.color); // 蓝色
    36         System.out.println("=========");
    37 
    38         two.call("欧巴"); // 给欧巴打电话
    39         two.sendMessage(); // 群发短信
    40     }
    41 
    42 }

     day06_09_两个引用指向同一个对象的内存图

     1 package cn.itcast.day06.demo02;
     2 
     3 public class Demo03PhoneSame {
     4 
     5     public static void main(String[] args) {
     6         Phone one = new Phone();
     7         System.out.println(one.brand); // null
     8         System.out.println(one.price); // 0.0
     9         System.out.println(one.color); // null
    10         System.out.println("=========");
    11 
    12         one.brand = "苹果";
    13         one.price = 8388.0;
    14         one.color = "黑色";
    15         System.out.println(one.brand); // 苹果
    16         System.out.println(one.price); // 8388.0
    17         System.out.println(one.color); // 黑色
    18         System.out.println("=========");
    19 
    20         one.call("乔布斯"); // 给乔布斯打电话
    21         one.sendMessage(); // 群发短信
    22         System.out.println("=========");
    23 
    24         // 将one当中保存的对象地址值赋值给two
    25         Phone two = one;
    26         System.out.println(two.brand); // 苹果
    27         System.out.println(two.price); // 8388.0
    28         System.out.println(two.color); // 黑色
    29         System.out.println("=========");
    30 
    31         two.brand = "三星";
    32         two.price = 5999.0;
    33         two.color = "蓝色";
    34         System.out.println(two.brand); // 三星
    35         System.out.println(two.price); // 5999.0
    36         System.out.println(two.color); // 蓝色
    37         System.out.println("=========");
    38 
    39         two.call("欧巴"); // 给欧巴打电话
    40         two.sendMessage(); // 群发短信
    41     }
    42 
    43 }

    使用对象类型作为方法的参数

    package cn.itcast.day06.demo02;
    
    public class Demo04PhoneParam {
    
        public static void main(String[] args) {
            Phone one = new Phone();
            one.brand = "苹果";
            one.price = 8388.0;
            one.color = "土豪金";
    
            method(one); // 传递进去的参数其实就是地址值
        }
    
        public static void method(Phone param) {
            System.out.println(param.brand); // 苹果
            System.out.println(param.price); // 8388.0
            System.out.println(param.color); // 土豪金
        }
    
    }

    05-使用对象类型作为方法的返回值

     1 package cn.itcast.day06.demo02;
     2 
     3 public class Demo05PhoneReturn {
     4 
     5     public static void main(String[] args) {
     6         Phone two = getPhone();
     7         System.out.println(two.brand); // 苹果
     8         System.out.println(two.price); // 8388.0
     9         System.out.println(two.color); // 玫瑰金
    10     }
    11 
    12     public static Phone getPhone() {
    13         Phone one = new Phone();
    14         one.brand = "苹果";
    15         one.price = 8388.0;
    16         one.color = "玫瑰金";
    17         return one;
    18     }
    19 
    20 }

    成员变量和局部变量的区别

     1 package cn.itcast.day06.demo03;
     2 
     3 /*
     4 局部变量和成员变量
     5 
     6 1. 定义的位置不一样【重点】
     7 局部变量:在方法的内部
     8 成员变量:在方法的外部,直接写在类当中
     9 
    10 2. 作用范围不一样【重点】
    11 局部变量:只有方法当中才可以使用,出了方法就不能再用
    12 成员变量:整个类全都可以通用。
    13 
    14 3. 默认值不一样【重点】
    15 局部变量:没有默认值,如果要想使用,必须手动进行赋值
    16 成员变量:如果没有赋值,会有默认值,规则和数组一样
    17 
    18 4. 内存的位置不一样(了解)
    19 局部变量:位于栈内存
    20 成员变量:位于堆内存
    21 
    22 5. 生命周期不一样(了解)
    23 局部变量:随着方法进栈而诞生,随着方法出栈而消失
    24 成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失
    25  */
    26 public class Demo01VariableDifference {
    27 
    28     String name; // 成员变量
    29 
    30     public void methodA() {
    31         int num = 20; // 局部变量
    32         System.out.println(num);
    33         System.out.println(name);
    34     }
    35 
    36     public void methodB(int param) { // 方法的参数就是局部变量
    37         // 参数在方法调用的时候,必然会被赋值的。
    38         System.out.println(param);
    39 
    40         int age; // 局部变量
    41 //        System.out.println(age); // 没赋值不能用
    42 
    43 //        System.out.println(num); // 错误写法!
    44         System.out.println(name);
    45     }
    46 
    47 }

    面向对象三大特征之封装性

     1 package cn.itcast.day06.demo03;
     2 
     3 /*
     4 面向对象三大特征:封装、继承、多态。
     5 
     6 封装性在Java当中的体现:
     7 1. 方法就是一种封装
     8 2. 关键字private也是一种封装
     9 
    10 封装就是将一些细节信息隐藏起来,对于外界不可见。
    11  */
    12 public class Demo02Method {
    13 
    14     public static void main(String[] args) {
    15         int[] array = {5, 15, 25, 20, 100};
    16 
    17         int max = getMax(array);
    18         System.out.println("最大值:" + max);
    19     }
    20 
    21     // 给我一个数组,我还给你一个最大值
    22     public static int getMax(int[] array) {
    23         int max = array[0];
    24         for (int i = 1; i < array.length; i++) {
    25             if (array[i] > max) {
    26                 max = array[i];
    27             }
    28         }
    29         return max;
    30     }
    31 
    32 }

    private关键字的作用及使用

     1 package cn.itcast.day06.demo03;
     2 
     3 /*
     4 问题描述:定义Person的年龄时,无法阻止不合理的数值被设置进来。
     5 解决方案:用private关键字将需要保护的成员变量进行修饰。
     6 
     7 一旦使用了private进行修饰,那么本类当中仍然可以随意访问。
     8 但是!超出了本类范围之外就不能再直接访问了。
     9 
    10 间接访问private成员变量,就是定义一对儿Getter/Setter方法
    11 
    12 必须叫setXxx或者是getXxx命名规则。
    13 对于Getter来说,不能有参数,返回值类型和成员变量对应;
    14 对于Setter来说,不能有返回值,参数类型和成员变量对应。
    15  */
    16 public class Person {
    17 
    18     String name; // 姓名
    19     private int age; // 年龄
    20 
    21     public void show() {
    22         System.out.println("我叫:" + name + ",年龄:" + age);
    23     }
    24 
    25     // 这个成员方法,专门用于向age设置数据
    26     public void setAge(int num) {
    27         if (num < 100 && num >= 9) { // 如果是合理情况
    28             age = num;
    29         } else {
    30             System.out.println("数据不合理!");
    31         }
    32     }
    33 
    34     // 这个成员方法,专门私语获取age的数据
    35     public int getAge() {
    36         return age;
    37     }
    38 
    39 }
     1 package cn.itcast.day06.demo03;
     2 
     3 public class Demo03Person {
     4 
     5     public static void main(String[] args) {
     6         Person person = new Person();
     7         person.show();
     8 
     9         person.name = "赵丽颖";
    10 //        person.age = -20; // 直接访问private内容,错误写法!
    11         person.setAge(20);
    12         person.show();
    13     }
    14 
    15 }

      练习使用private关键字定义学生类

     1 package cn.itcast.day06.demo03;
     2 
     3 /*
     4 对于基本类型当中的boolean值,Getter方法一定要写成isXxx的形式,而setXxx规则不变。
     5  */
     6 public class Student {
     7 
     8     private String name; // 姓名
     9     private int age; // 年龄
    10     private boolean male; // 是不是爷们儿
    11 
    12     public void setMale(boolean b) {
    13         male = b;
    14     }
    15 
    16     public boolean isMale() {
    17         return male;
    18     }
    19 
    20     public void setName(String str) {
    21         name = str;
    22     }
    23 
    24     public String getName() {
    25         return name;
    26     }
    27 
    28     public void setAge(int num) {
    29         age = num;
    30     }
    31 
    32     public int getAge() {
    33         return age;
    34     }
    35 }
     1 package cn.itcast.day06.demo03;
     2 
     3 public class Demo04Student {
     4 
     5     public static void main(String[] args) {
     6         Student stu = new Student();
     7 
     8         stu.setName("鹿晗");
     9         stu.setAge(20);
    10         stu.setMale(true);
    11 
    12         System.out.println("姓名:" + stu.getName());
    13         System.out.println("年龄:" + stu.getAge());
    14         System.out.println("是不是爷们儿:" + stu.isMale());
    15     }
    16 
    17 }

    this关键字的作用

     1 package cn.itcast.day06.demo04;
     2 
     3 /*
     4 当方法的局部变量和类的成员变量重名的时候,根据“就近原则”,优先使用局部变量。
     5 如果需要访问本类当中的成员变量,需要使用格式:
     6 this.成员变量名
     7 
     8 “通过谁调用的方法,谁就是this。”
     9  */
    10 public class Person {
    11 
    12     String name; // 我自己的名字
    13 
    14     // 参数name是对方的名字
    15     // 成员变量name是自己的名字
    16     public void sayHello(String name) {
    17         System.out.println(name + ",你好。我是" + this.name);
    18         System.out.println(this);
    19     }
    20 
    21 }
     1 package cn.itcast.day06.demo04;
     2 
     3 public class Demo01Person {
     4 
     5     public static void main(String[] args) {
     6         Person person = new Person();
     7         // 设置我自己的名字
     8         person.name = "王健林";
     9         person.sayHello("王思聪");
    10 
    11         System.out.println(person); // 地址值
    12     }
    13 
    14 }

    构造方法

     1 package cn.itcast.day06.demo04;
     2 
     3 /*
     4 构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法。
     5 格式:
     6 public 类名称(参数类型 参数名称) {
     7     方法体
     8 }
     9 
    10 注意事项:
    11 1. 构造方法的名称必须和所在的类名称完全一样,就连大小写也要一样
    12 2. 构造方法不要写返回值类型,连void都不写
    13 3. 构造方法不能return一个具体的返回值
    14 4. 如果没有编写任何构造方法,那么编译器将会默认赠送一个构造方法,没有参数、方法体什么事情都不做。
    15 public Student() {}
    16 5. 一旦编写了至少一个构造方法,那么编译器将不再赠送。
    17 6. 构造方法也是可以进行重载的。
    18 重载:方法名称相同,参数列表不同。
    19  */
    20 public class Student {
    21 
    22     // 成员变量
    23     private String name;
    24     private int age;
    25 
    26     // 无参数的构造方法
    27     public Student() {
    28         System.out.println("无参构造方法执行啦!");
    29     }
    30 
    31     // 全参数的构造方法
    32     public Student(String name, int age) {
    33         System.out.println("全参构造方法执行啦!");
    34         this.name = name;
    35         this.age = age;
    36     }
    37 
    38     // Getter Setter
    39     public void setName(String name) {
    40         this.name = name;
    41     }
    42 
    43     public String getName() {
    44         return name;
    45     }
    46 
    47     public void setAge(int age) {
    48         this.age = age;
    49     }
    50 
    51     public int getAge() {
    52         return age;
    53     }
    54 
    55 }
     1 package cn.itcast.day06.demo04;
     2 
     3 public class Demo02Student {
     4 
     5     public static void main(String[] args) {
     6         Student stu1 = new Student(); // 无参构造
     7         System.out.println("============");
     8 
     9         Student stu2 = new Student("赵丽颖", 20); // 全参构造
    10         System.out.println("姓名:" + stu2.getName() + ",年龄:" + stu2.getAge());
    11         // 如果需要改变对象当中的成员变量数据内容,仍然还需要使用setXxx方法
    12         stu2.setAge(21); // 改变年龄
    13         System.out.println("姓名:" + stu2.getName() + ",年龄:" + stu2.getAge());
    14 
    15     }
    16 
    17 }

    定义一个标准的类

     1 package cn.itcast.day06.demo05;
     2 
     3 /*
     4 一个标准的类通常要拥有下面四个组成部分:
     5 
     6 1. 所有的成员变量都要使用private关键字修饰
     7 2. 为每一个成员变量编写一对儿Getter/Setter方法
     8 3. 编写一个无参数的构造方法
     9 4. 编写一个全参数的构造方法
    10 
    11 这样标准的类也叫做Java Bean
    12  */
    13 public class Student {
    14 
    15     private String name; // 姓名
    16     private int age; // 年龄
    17 
    18     public Student() {
    19     }
    20 
    21     public Student(String name, int age) {
    22         this.name = name;
    23         this.age = age;
    24     }
    25 
    26     public String getName() {
    27         return name;
    28     }
    29 
    30     public void setName(String name) {
    31         this.name = name;
    32     }
    33 
    34     public int getAge() {
    35         return age;
    36     }
    37 
    38     public void setAge(int age) {
    39         this.age = age;
    40     }
    41 }
     1 package cn.itcast.day06.demo05;
     2 
     3 public class Demo01Student {
     4 
     5     public static void main(String[] args) {
     6         Student stu1 = new Student();
     7         stu1.setName("迪丽热巴");
     8         stu1.setAge(20);
     9         System.out.println("姓名:" + stu1.getName() + ",年龄:" + stu1.getAge());
    10         System.out.println("=================");
    11 
    12         Student stu2 = new Student("古力娜扎", 21);
    13         System.out.println("姓名:" + stu2.getName() + ",年龄:" + stu2.getAge());
    14         stu2.setAge(22);
    15         System.out.println("姓名:" + stu2.getName() + ",年龄:" + stu2.getAge());
    16     }
    17 
    18 }
  • 相关阅读:
    形象理解ERP(转)
    禁用windows server 2008 域密码复杂性要求策略
    How to adding find,filter,remove filter on display method Form
    Windows Server 2008 R2激活工具
    How to using bat command running VS development SSRS report
    Creating Your First Mac AppGetting Started
    Creating Your First Mac AppAdding a Track Object 添加一个 Track 对象
    Creating Your First Mac AppImplementing Action Methods 实现动作方法
    Creating Your First Mac AppReviewing the Code 审查代码
    Creating Your First Mac AppConfiguring the window 设置窗口
  • 原文地址:https://www.cnblogs.com/yaozhenhua/p/10321118.html
Copyright © 2011-2022 走看看