JavaSE--对象的创建与使用
一、对象的创建及使用
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);
}
}