1.如果一个类包含了属性与方法,那么该类的每一个对象都具有自己的属性,但无论一个类有多少个对象,这些对象共享同一个方法。
属性:
当一个类new出一个对象,这个对象在堆里面,堆里面会容纳属性变量。
如果再new一个对象,堆里面又会容纳这个对象自己的属性。
这两个对象之间的属性互不干扰。张三和李四两个不同的对象,各自有年龄属性,他们之间的年龄互不干扰没有关系
方法:
类里面定义的方法,存放在内存中一个叫方法区的内存区域,这部分内存只有一份。无论这个类定义了多少对象,这些对象会使用内存中的同一个方法
2.关于方法参数传递的总结:对于Java中的方法参数传递,无论传递的是原生数据类型还是引用类型,统一是传值(pass by value)。
public class ParamTest
{
public static void main(String[] args)
{
Person person = new Person();---------------------person是引用~~~引用值相同时,代表指向相同的对象。 引用值是地址,把地址传过去,说明两个引用有相同的地址,指向同一个对象,因此,通过一个引用对对象做出的修改,就会立刻反映到另一个引用上面去。
person.change(person);
int age = person.age;
System.out.println(age);--------------------------------输出20
System.out.println("--------------------------");
int i = 10;
person.change2(i);
System.out.println(i);---------------------------------------此时输出10!!因为i是i,age是age,仅仅是值的传递,并不影响i的本身。
}
}
class Person
{
int age = 20;
public void change(Person person)
{
person = new Person();
person.age = 30;
}
public void change2(int age)
{
age = 40;
}
}
3.什么类型的引用就能指向什么类型的对象
比如People类型的引用就能指向People类型的对象,但不能指向Student类型的对象。比如:
People people = new People(); // 正确。People 类型的引用,才能指向People()类型的对象
People people = new Student(); //错误
4.构造方法(Constructor)——用于完成对象属性的初始化工作
构造方法的特点——
a) 构造方法的名字必须与类名完全一致(包括大小写)
b) 构造方法没有返回值,连void也不能出现。
c) 如果在定义一个类的时候,没有为类声明构造方法,那么Java编译器会自动为类添加一个没有参数且方法体为空的构造方法(默认的构造方法)
d) 如果在定义一个类的时候,为类声明了构造方法,那么Java编译器就不会再为类添加构造方法了。
e) 不能显式调用类的构造方法,构造方法通常是通过new关键字隐式调用。
5.5new关键字在生成对象时按顺序完成了以下三件事情:
a) 为对象开辟内存空间。
b) 调用类的构造方法。
c) 将生成的对象的地址返回
6.默认的构造方法
构造方法没有参数且方法体为空。
7.使用new来生成对象的时候,后面的小括号()表示构造方法的参数列表
如果构造方法不接收参数,那么小括号中的内容为空;
如果构造方法接收参数,那么小括号中的实际参数就需要与构造方法定义中的形式参数保持一致(参数数量一致、参数类型一致、按照顺序逐一赋值)。
eg.
public class PersonTest
{
public static void main(String[] args)
{
Person person = new Person(50);----------------实参为int类型的50。所以构造方法的作用是为对象的属性进行初始化。
System.out.println(person.age);--------------------输出50,
}
}
class Person
{
int age;
public Person(int i)-----------------------------------------带参数的构造方法
{
age = i;
}
}