跟我一起学JAVAEE吧——JAVA_SE篇——day05上课笔记(类与对象,封装)

day 05

类与对象

  • 什么是面向对象:

    • 洗衣服:
      • 面向过程:把衣服脱下来 -> 找一个盆 -> 放洗衣粉 -> 加点水 -> 浸泡几分钟 -> 搓洗 -> 清洗衣服 -> 拧干 -> 晾起来
      • 面向对象:把衣服脱下来 -> 打开全自动洗衣机 -> 扔进去 -> 按按钮 -> 拿出来晾起来
    • 区别:
      • 面向过程:强调步骤
      • 面向对象:强调对象,这里的对象就是洗衣机
    • 特点:面向对象思想是一种更符合我们思考习惯的思想,
  • 什么是类

    • 类:是一组相关属性和行为的集合。可以看成可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物
    • 属性:就是该事物的状态信息
    • 行为:就是该事物能做什么
    • 举例:小猫
      • 属性:名字、体重、年龄、颜色
      • 行为:走、跑、叫
  • 什么是对象

    • 对象:是一类事物的具体体现,对象是类的一个实例(对象并不是找个女朋友),必然具备该类事物的属性和行为
    • 举例:一只小猫
      • 属性:tom、5kg、2 years、yellow
      • 行为:溜墙根走、蹦跶的跑、喵喵叫
  • 类与对象的关系

    • 类是对一类事物的描述,是抽象的
    • 对象是一类事物的实例,是具体的
    • 类是对象的模板,对象是类的实体
  • 事物与类的对比

    • 属性:事物的状态信息 行为:对事物的行为
    • 成员变量:对应事物的属性 成员方法:对应事物的行为
  • 类的定义格式

    public class ClassName{
        成员变量
        成员方法
    }
    
    • 定义类:就是定义类的成员,包括成员变量和成员方法
    • 成员变量:和以前定义变量几乎是一样的,只不过位置发生了改变,在类中方法外
    • 成员方法:和以前方法几乎一样,只不过把static去掉(后面详解static的作用)
    public class Student {
        成员变量
        String name;
        int age;
        char sex;
        //成员方法
        public void eat(){}
        public void sleep(){}
        public void study(){}
    }
    
  • 对象的使用

    • 导包 :也就是告诉编译器类在什么位置

    • 导包格式: import 包名.类名

      import java.utill.Scanner
      
    • 创建对象

      • 格式: 类名 对象名 = new 类名();

        Student s1=new Student();//s1就是一个对象
        
    • 使用对象访问类中的成员

      • 格式:

        • 对象名.成员变量
        • 对象名.成员方法();
        s1.name;//访问成员变量
        s1.eat();//访问成员对象
        

        对象使用格式举例

        public class Test01_Student {
        public static void main(String[] args) {
        //创建对象格式:类名 对象名 = new 类名(); 
        Student s = new Student();
        System.out.println("s:"+s);//cn.itcast.Student@100363
        
        //直接输出成员变量值
        System.out.println("姓:"+s.name);//null
        System.out.println("年龄:"+s.age); //0
        System.out.println("‐‐‐‐‐‐‐‐‐‐");
        
        //给成员变量赋值
        s.name = "赵丽颖"; s.age = 18;
        
        //再次输出成员变量的值
        System.out.println("姓名:"+s.name);//赵丽颖
        System.out.println("年龄:"+s.age); //18
        System.out.println("‐‐‐‐‐‐‐‐‐‐");
        
        //调用成员方法
        s.study(); // "好好学习,天天向上" 
        s.eat(); // "学习饿了要吃饭"
        }
        
    • 成员变量的默认值

      类型 数据类型 默认值
      基本类型 整数型(byte,short,int,long) 0
      基本类型 浮点型(float,double) 0.0
      基本类型 字符型(char) ‘\u0000’
      基本类型 布尔型(Boolean) false
      引用类型 数组,类,接口 null
  • 类与对象练习:

    //定义手机类
    public Class Phone{
        //成员变量
        String brand;//品牌
        int price;//价格
        String color;//颜色
        
        //成员方法
        public void call(){
            System.out.println("打电话")}
        public void sendMessage(){
            System.out.println("群发短信")
        }
    }
    
    //定义测试类
    public class TestPhone{
        public static void main(String[] args){
            Phone p = new Phone();//创建对象
            System.out.println("品牌:"+p.brand);//null
            System.out.println(" 价 格 :"+p.price);//0
            System.out.println("颜色:"+p.color);//null
            
            //给成员变量赋值
            p.brand="锤子";
            p.price=2999;
            p.color="棕色"//再次输入成员变量的值
            System.out.println("品牌:"+p.brand);//锤子
            System.out.println(" 价 格 :"+p.price);//2999
            System.out.println("颜色:"+p.color);//棕色
            
            //成员方法
            p.call();
            p.sendMessage();
        }
    }
    
  • 成员变量和局部变量的区别

    public class Car{
        String color;//成员变量
        public void drive(){
            int speed=80;//局部变量
            System.out.println("时速"+speed);
        }
    }
    
    • 在类中的位置不同
      • 成员变量:类中,方法外
      • 局部变量:方法中或者方法声明上(形式参数)
    • 作用范围不一样
      • 成员变量:类中
      • 局部变量:方法中
    • 初始化值的不同
      • 成员变量:有默认值
      • 局部变量:没有默认值。必须先 定义,赋值,最后使用
    • 在内存中的位置不同
      • 成员变量:堆内存
      • 局部变量:栈内存
    • 生命周期不同
      • 成员变量:随着对象的创建而存在,随着对象的消失而消失
      • 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

三大特征:封装,继承,多态之封装

  • 原则:将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问

  • 封装的步骤

    • 使用private关键字来修饰成员变量
    • 对需要访问的成员变量,提供对应的一对getXXX方法,setXXX方法
  • private关键字

    • 含义

      • private是一个权限修饰符,代表最小权限
      • 可以修饰成员变量和成员方法
      • 被private修饰后的成员变量和成员方法,只在本类中才能访问
  • 使用格式

    • private:

      private 数据类型 变量名;
      
        public class Student{
          private String name;
            private int age;
        }
      
    • 提供getXXX方法,setXXX方法,可以访问成员变量

      public class Student{
          private String name;
          private int age;
      }
      
      	public void setName(String n){
              name=n;
          }
      	public String getName(){
              return name;
          }
      	public void setAge(int a){
              age=a;
          }
      	public int getAge(){
              return age;
          }
      

      肯定有同学会问,有this为啥不用this呢,同学莫慌,后面就有,循环渐进

  • 封装优化1——this关键字

    • 含义:this代表所在类的当前对象引用(地址值),即对象自己的引用

      • 记住:方法被哪个对象调用,方法中的this就代表哪个对象。即谁在调用,this就代表谁
    • this使用格式

      this.成员变量名
      
      • 使用this修饰方法中的变量,解决成员变量被隐藏的问题

        public class Student{
            private String name;
            private int age;
            
            public void setName(String name){
                //name =name相当于之前的name=n;
                this.name=name
            }
            public String getName(){
                return name;
            }
            public void setAge(int age){
                //age=age相当于age=a;
                this.age=age;
            }
            public int getAge(){
                return age;
            }
        }
        

        idea中快捷键(其中一中方式):

        1.光标移至类中

        2.alt+insert快捷键

        3.选中Getter and Settet

        4.全选所有的成员变量

        5.ok

  • 封装优化2——构造方法

    • 含义:构造方法又叫构造器,当一个对象被创建的时候,构造方法用来初始化该对象,给对象的成员变量赋初值

      • 无论你与否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个无参数构造方法, 一旦自己定义了构造方法,Java自动提供的默认无参数构造方法就会失效
    • 定义格式

      修饰符 构造方法名(参数列表){
          方法体
      }
      
      public class Student{
          private String name;
          private int age;
          //空参构造器
          public Student(){
              
          }
          //全参构造器
          public Student(String name,int age){
              this.name=name;
              this.age=age;
          }
      }
      
    • 注意事项

      • 如果你不提供构造方法,系统会给出无参数构造方法
      • 如果你提供了构造方法,系统将不再提供无参数构造方法
      • 构造方法是可以重载的,既可以定义参数,也可以不定义参数
  • 标准代码——JavaBean规范

    • JavaBean是java语言编写类的一种标准规范。符合JavaBean的类,要求类必须是具体的 和 公共的,并且具有无参数的构造方法,提供用来操作成员变量的set和get方法

    • 标准格式

      public class ClassName{
          //成员变量
          //构造方法
          //无参构造方法(必须)
          //有参构造方法【建议】
          //成员方法
          //getXXX()
          //setXXX()
      }
      
    • 编写符合JavaBean规范的类,以学生类为例

      public class Student{
          //成员变量
          private String name;
          private int age;
          
          //构造方法
          public student(){}//无参构造
          public student(String name,int age){//全参构造
              this.name=name;
              this.age=age;
          }
          
          //成员方法
          public void setName(String name){
              this.name=name;
          }
          public String getName(){
              return name;
          }
          public void setAge(int age){
              this.age=age;
          }
          public int getAge(){
              return age;
          }
      }
      
      public class TestStudent{
          public static void main(String[] args){
              Student s=new Student();//无参构造使用
              s.setName("柳岩");
              s.setAge(18);
              System.out.println(s.getName()+"---"s.getAge());
              
              Student s2=new Student("赵丽颖"18)//带参构造使用
              System.out.println(s2.getName()+"---"+s2.getAge());
          }
      }
      

猜你喜欢

转载自blog.csdn.net/weixin_44115522/article/details/107414403