类、对象、构造方法

102 阅读3分钟

类与对象

1.1.类与对象

  • 类:数据类型; 一组事物相同的属性和行为(功能)的抽象;
  • 类是一个模板

1.1.1.类的定义

  • 类中包含2大成员:成员变量(或者说属性)和方法

  • 如何定义成员变量

    • 权限修饰符(4个) 任意数据类型 属性名(首字母小写);
    • 成员变量都有默认值:是其数据类型的零值
  • 方法,和之前定义方式相同

package com.package1;

public class Class01 {
    //属性
     String name;
     String timed;
     int num;

     //方法
     public void learning(){
         System.out.println("正在学习");
     }
     public void outlearing(){
         System.out.println("学习结束");
     }
}

1.1.2.对象的操作

  • 创建对象使用关键字 new
  • 只要碰到new 都会在堆空间新开辟空间;创建出来的对象都在堆;
  • 创建对象后,可以操作对象的成员变量和方法,使用实心点 . 运算符进行操作
package com.package1;

public class Class01Text {
    public static void main(String[] args){
        //创建对象 new:都会在堆空间新开辟空间;创建出来的对象都在堆;
        Class01 stu1 = new Class01();
        //访问成员变量
        stu1.name = "Python";
        System.out.println(stu1.name);
        //方法的调用
        stu1.learning();
    }
}
练习题

学生类型:

/**
 * 模板:相同的属性和行为
 */
public class SMStudent {
    public String name;
    public int id;
    public char gender;
    public Computer com; //null   注意

    public void eat() {
        System.out.println("正在吃饭");
    }

    public void study() {
        System.out.println("使用" + com.brand + "在学习");
    }
}

电脑类型

public class Computer {
    public String brand;
    public double price;

    public void online() {
        System.out.println("上网");
    }
}

测试代码

private static void method3() {
        SMStudent tom = new SMStudent();
        tom.name = "tom";
        tom.gender = 'f';
        // 创建一个真正的电脑对象
        Computer computer1 = new Computer();
        computer1.brand = "戴尔";
        computer1.price = 66.6;
        tom.com = computer1;    //注意
        System.out.println(tom.com.brand);//
        System.out.println(tom.com.price);
        //
        SMStudent jerry = new SMStudent();
        Computer computer2 = new Computer();
        computer2.brand = "华硕";
        computer2.price = 99.9;
        jerry.com = computer2;
        System.out.println("=============");
        System.out.println(jerry.com.brand);
        System.out.println(jerry.com.price);
        tom.study();
        jerry.study();
    }

1.1.3.构造方法

  • 构造方法(构造器):为了给对象的成员变量赋程序员给的初始值

    • 没有返回值
    • 方法名和类名相同
  • 何时调用:new创建对象的时候 调用构造方法

  • 注意点:

    • 当类中没有任何构造器的时候,编译器添加一个无参构造(默认添加)
    • 一旦显示写了构造器之后,不会再默认添加无参构造;
    • 保持习惯:定义类时,无参构造都要添加
/**
     * 构造方法(构造器):为了给对象的成员变量赋程序员给的初始值
     * 1 没有返回值
     * 2 方法名和类名相同
     */
    public Computer(String brand, double price) {
        //this()必须出现在首行
        this(brand);
        this.price = price;
    }

    public Computer(String brand) {
        this.brand = brand;
    }

    public Computer() {
        System.out.println("无参构造执行了");
    }

1.1.4.成员变量和局部变量区别

  • 声明位置不同。成员变量声明在类体;局部变量声明在方法体;
  • 作用域不同。成员变量的作用域是整个类体;局部变量的作用域在方法体
  • 使用不同。局部变量使用之前一定要赋值;成员变量可以直接使用,JVM给了默认值;
  • 存储位置不同。成员变量的值存在堆空间;局部变量的值存储在栈空间;
  • 成员变量和局部变量重名的时候,优先访问局部变量,可以使用this访问成员变量;