Java SE 第十一讲 面向对象 封装
Java SE 第十一讲
1. 如果一个类包含了属性与方法,那么该类的每一个对象都具有自己的属性(先不考虑static),但无论一个类有多少个对象,这些对象共享同一个方法。
2. 关于方法参数传递的总结:对于Java中的方法参数传递,无论传递的是原生数据类型还是引用类型,统一是传值(pass by value)。
3. 什么类型的引用就能指向什么类型的对象,比如People类型的引用就能指向People类型的对象,但不能指向Student类型的对象。比如:
People people = new People(); // 正确
People people = new Student(); //错误
4. 构造方法(Constructor):构造方法用于完成对象属性的初始化工作,构造方法的特点:
a) 构造方法的名字必须与类名完全一致(包含大小写)
b) 构造方法没有返回值,连void也不能出现。
c) 如果在定义一个类的时候,没有为类声明构造方法,那么Java编译器会自动为类添加一个没有参数且方法体为空的构造方法(默认的构造方法)
d) 如果在定义一个类的时候,为类声明了构造方法(不管有没有参数),那么Java编译器就不会再为类添加构造方法了。
e) 不能显式调用类的构造方法,构造方法通常是通过new关键字隐式调用。注:也可以通过反射调用
5. new关键字在生成对象时完成了三件事情:
a) 为对象开辟内存空间。
b) 调用类的构造方法。
c) 将生成的对象的地址返回。
6. 默认的构造方法:构造方法没有参数且方法体为空。
7. 使用new来生成对象的时候,后面的小括号()表示构造方法的参数列表,如果构造方法不接收参数,那么小括号中的内容为空;如果构造方法接收参数,那么小括号中的实际参数就需要与构造方法定义中的形式参数保持一致(参数数量一致、参数类型一致、按照顺序逐一赋值)。
public class ParamTest{public static void main(String[] args){Person person = new Person();person.change(person);int age = person.age;System.out.println(age);System.out.println("--------------------------");int i = 10;person.change2(i);System.out.println(i);}}class Person{int age = 20;public void change(Person person){person = new Person();person.age = 30;}public void change2(int age){age = 40;}}//引用类型传的是地址 基本数据类型传的是真实的值