类与对象,构造方法
一、类与对象
关系:客观世界中每一个具体的个体都是一个对象,而拥有一些对象的共同基本特征就形成一个个类。例如,张三、李四都是对象,而人类、书包、电脑都是类。类中有属性和方法。要使用一个类就要产生对象,对象之间是靠各个属性的不同来区分的。
类
1、类名字的第一个字母要大写
2、属性——访问权限 属性类型 属性名称
3、方法——访问权限 返回值类型 方法名称(参数类型 参数名称,...){
方法体
}
class Student{
String name;
int age;
public void tell(){
System.out.println("姓名:"+name+", 年龄:"+age);
}
}
对象
类名 对象名称 = new 类名();
引用数据类型使用这样的定义样式。
public class Test{
public static void main(String[] args){
Student stu = new Student(); //创建并实例化对象
}
}
所有的对象名称在栈内存中保存,对象的具体内容保存在对应的堆内存中,即栈中存放的是堆空间的地址。必须使用关键字new才能开辟堆内存空间。当创建多个对象时,使用上述方法可以分别开辟堆内存。
注意! 一个栈内存空间智能指向一个堆内存空间,而一个堆内存空间的使用权可以给多个栈内存空间,每个栈内存空间都可以修改堆内存的内容。
public class Student{
public static void main(String[] args){
Student stu1 = new Student(); //实例化对象stu1
Student stu2 = null; //声明对象stu2
stu2 = stu1; //把stu1的堆内存空间使用权给stu2
stu1.name = "Jack";
stu1.age = 25; //设置stu1的属性,stu2的也改变
stu2.name= "Rose";
stu2.age = 22; //设置stu2中的属性,此时stu1也与stu2相同
stu1.tell();
stu2.tell(); //输出两个对象的信息
//可以发现都是 姓名:Rose, 年龄:22————这就是引用传递
}
}
二、构造方法
在对象实例化时,用了这样的结构:A a = new A();这之中就调用了构造方法。可以利用构造方法在对象实例化时就直接把对象的值赋值给属性。
构造方法的定义:
1、构造方法名称与类名相同
2、构造方法没有返回值类型的声明
3、没有return返回一个值
所有类都存在一个构造方法,当类中没有声明构造方法时,编译时会自动生成一个无参的构造方法 public Student(){} 如果一个类已经声明了构造方法,那么编译时就不会再生成无参构造方法了。
构造方法是可以重载的。
class Student{
String name;
int age;
public Student(String name){
this.name = name; //构造方法,一个参数name
}
public Student(String name,int age){
this.name = name;
this.age = age; //构造方法,两个参数name,age
}
public void tell(){
System.out.println("姓名:"+name+", 年龄:"+age);
}
}
public class Test{
public static void main(String[] args){
Student stu = new Student("Jack"); //实例化,调用一个参数的方法
stu.tell(); //得到的信息是 姓名:Jack, 年龄:0
}
}