面向对象系列之给出一些比较重要又比较容易忽略的知识点。
1. 类类的常用成员有:属性和方法
修饰外部类的权限修饰符只能是public或缺省。这是因为private是保证一个成员在类内部可以被直接调用,而外部类已经是最外层,这样其他类也没办法访问和使用这个类,这就使这个类没有任何意义;如果是protect的话,则其保证的是在同一个包内的所有类可以直接访问被protect修饰的成员,这在同一个包内的作用和缺省一样;但是protect的另一个作用是让不同包的子类也可以直接访问其父类中被protect修饰的结构,而在另一个包中,要先能访问这个类才能继承这个类,可是它一开始都不能访问由怎么继承呢。所以protect也是没有意义的。综合下来只有public和缺省就够了。
2. 内存分区在Java中,内存分为栈、堆和方法区。其中栈用来存储局部变量、堆用来存储对象实例、方法区中的常量池用来保存常量。
3. 对象创建的内存解析创建对象的代码格式如下:类名 对象名=new 构造器。
在执行这个代码时,内存中发生如下变化:首先在栈空间中保存一个局部变量,然后再调用了构造器以后在堆空间 中生成一个对象实例,接着通过new把堆空间中生成的对象实例的地址值传递给栈空间中的局部变量。
4. 属性属性又称为成员变量,而在方法中声明的变量被称为局部变量。
成员变量和局部变量之间的区别
- 声明位置不同:成员变量声明在类内,局部变量声明在方法体中。
- 修饰符不同:局部变量只能使用final,不能使用权限修饰符和static等。
- 初始化值:成员变量有默认初始化值而局部变量没有默认初始化值。
- 内存中的位置不同:成员变量保存在对课件中二局部变量保存在栈空间中。
- 方法内不能定义类
- 可变个数形参。语法格式如下:权限修饰符 返回值类型 方法名(参数类型1 参数名,参数类型2 参数名2,其他参数,参数类型n...参数名n)。这里最后一个参数传入的实参个数是可变的,使用时当做数组来使用就可以了。(一个方法内只能有一个可变形参而且可变形参只能放在形参的最后面。)
对于一个类中,出现的同名不同参数的方法之间构成重载。程序调用时通过提供的参数不同来区分调用的是哪个方法。(这里只能是同名不同参数,权限修饰符和返回值类型不参与比较)
7. 值传递机制在调用方法,将实参传递给形参时,如果形参时基本数据类型则将实参数据的值传递给形参;如果形参是引用数据类型则将实参保存的实例的地址值传递给形参。这时实参和形参同时指向堆空间的同一个对象。
同理在赋值时如果是引用数据类型也是将右边变量所保存的实例的地址值赋值左边变量。
8. 封装通过不同权限修饰符来限制类的成员的可见性,实现该隐藏的隐藏该暴露的暴露。
9. 四个权限修饰符- public:所有地方都可以直接访问一个类中被public修饰的成员。
- protect:在同一个包内,可以直接访问;不同包的子类可以直接访问。
- 缺省:同一个包内可以直接访问。
- private:只能是类内部访问。
类的成员之一。该成员与类同名、不声明返回值、只能用权限修饰符修饰、不能有return语句。
11. 属性的赋值过程默认初始化---->代码块/显示初始化---->构造器---->对象调用方法或直接赋值。
12. this关键字的使用谨记:this永远代表当前对象,不管它是否出现在父类中。
this调用构造器的方法:this(实参列表)。
13. package和import关键字注意:import只能导入指定的包,对于包内的子包需要再而外导入。



