JavaSE--对象的创建与使用

洛小依ovo / 2023-08-09 / 原文

一、对象的创建及使用

1、创建使用

public class StudentTest{
    public static void main(String[] args){
        // 不能通过“类名”直接访问“实例变量”
        // System.out.println(Student.name);
        // s1这个局部变量叫做引用
        Student s1 = new Student();
        System.out.println(s1.no);
        System.out.println(s1.age);
        System.out.println(s1.address);
        Student s2 = new Student();
        System.out.println(s2.no);
        System.out.println(s2.age);
        System.out.println(s2.address);
        // 修改s1这个学生的学号
        s1.no = 111;
        s1.age = 20;
        s1.address = "shan";
        // 再次赋值修改
        s1.address = "shui";
    }
}
public class Student{
    // 成员变量
    // 成员变量又被称为实例变量
    // 对象被称为实例,实例变量实际上就是对象级别的变量
    String no;
    int age;
    String address;
}

二、空指针异常

// 垃圾回收器GC

public class NullPointerTest{
    public static void main(String[] args){
        Customer c = new Customer();
        c.id = 78612;
        
        c = null;
        // 会产生空指针异常
        System.out.println(c.id);
        // 该对象没有“引用”指向他了,Java中规定堆内存程序员是无权利直接操作的,此时
        //     这个对象就会像氢气球一样飘走,等待垃圾回收器回收,GC会将这个垃圾对象释放掉
        // 垃圾回收器GC主要针对回收的是堆内存中的垃圾数据,没有任何引用指向该对象时就会被回收
    }
}

class Customer{
    int id;
}

三、方法调用时参数的传递问题

规则:不管是基本数据类型还是引用数据类型,在传递参数时都是将变量中保存的那个“值”复制一份,传过去

int x = 1;
int y = x;// x中保存的1复制一份给y

Person p1 = 0x1234;
Person p2 = p1;// 把p1中保存的0x1234复制一份给p2
// 但是0x1234是一个堆内存地址,所以p2也指向堆内存中0x1234地址

四、构造方法

1、构造方法:

  构造方法是一个比较特殊的方法,通过构造方法可以完成对象的创建以及实例变量的初始化

  换句话来说,构造方法就是用来创建对象,并且同时给对象的属性赋值的

注意:当一个类没有提供任何构造方法时,系统会自动默认提供一个无参构造方法(缺省构造器)

2、调用构造方法

  使用new运算符来调用

3、构造方法语法结构

  注意:构造方法名必须和类名一致

[修饰符列表] 构造方法名(形式参数列表){
    构造方法体;
    // 通常在构造方法中给属性赋值,完成属性的初始化
}

4、调用构造方法

new 构造方法名(实际参数列表);

5、一个规则

  当一个类中没有提供任何构造方法,系统默认提供一个

  当一个类中手动的提供了构造方法,则系统不提供无参构造了

public class Student{
    int no;
    String name;
    int age;
    // 无参构造
    public Student(){
        // System.out.println("无参构造方法被调用");
        // 实际上是在无参构造方法中给属性赋默认值
        no = 1;
        name = "aa";
        age = 20;
        // 如果手动赋值,那么系统就不会采用默认值了
    }
    // 有参构造
    public Student(int i){
        
    }
}

6、构造方法重载

  构造方法支持重载

  在一个类中构造方法可以有多个,并且所有的构造方法名字都是一样的

public class Vip{
    long no;
    String name;
    boolean sex;
    // 有参构造
    public Vip(long huiYuanHao,String xingMing){
        no = huiYuanHao;
        name = xingMing;
        // 没有手动赋值的,系统会赋默认值
    }
    public Vip(long huiYuanHao,String xingMing,boolean xingBie){
        no = huiYuanHao;
        name = xingMing;
        sex = xingBie;
    }
}
public class ConstructorTest01{
    public static void main(String[] args){
        Vip v1 = new Vip();
        Vip v2 = new Vip(1111L,"xiyang");
        Vip v3 = new Vip(2222L,"huitai",true);
    }
}