面向对象三大特性:封装、继承、多态
一、封装之private:
定义: 封装就是将对象的属性和实现细节隐藏起来,仅对外提供公共的访问方式。
注意:private仅仅是封装的一个体现形式,并不代表封装全部。
private详解:
A:private是一个关键字,表示私有的意思,属于访问权限修饰符
B:private修饰的成员,在本类中能直接访问,在其他类中不能被直接访问
C:一般情况下,在程序设计的时候,所有成员变量都应该使用private修饰,然后通过public修饰的方法来访问私有的成员变量
二、构造方法的概述 和使用
构造方法格式和特点:
A:构造方法名要与类名一致
B:没有返回值类型
C:没有具体返回值
构造方法的作用:用于给对象进行初始化
给成员变量赋值的方式:
A:通过公有的setter方法给成员变量赋值
B:通过构造方法传入的参数给成员变量赋值
注意:
A:虽然构造方法可以给成员变量赋值,但是这个不是构造方法最主要的功能;
B:setter方法的存在,就是为了给对象的成员变量赋值使用的。在实际情况下,某些对象的属性值不是一成不变的,有可能在某些时候需要修改属性的值;
当需要修改属性的值时,构造方法就起不了作用了。只能通过setter方法来变更属性的值。
因此,虽然构造方法有给成员变量赋值的功能,但是还需要setter方法的存在。
代码体现如下:
public class Student {
// 定义学生的属性
private String name;
private int age;
// 构造方法
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
//setter和getter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
构造方法注意事项:
A:如果在类中没有定义任何构造方法,JVM默认会添加一个无参的构造方法;
B:如果类中已定义了构造方法,JVM就不会再添加无参的构造方法了;
C:构造方法也可以重载(参数列表不同)
三、this关键字的概述和应用
A:this关键字代表谁:哪个对象调用非静态方法,在方法里面就有一个this关键字,代表该对象
B:应用场景:解决了局部变量隐蔽成员变量的问题(当成员变量和局部变量重名时,无法给成员变量赋值的问题)
this关键字的标准代码:
<span style="white-space:pre"> </span>private String name;
private int age;
public Dog(String name,int age)
{
this.name = name;
this.age = age;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
四、代码块的概述(面试)
A:局部代码块:
1、概念:定义在方法中,用{}括起来的一段代码;
2、作用:可以让局部代码块中的变量尽快从内存中消失,提高内存的利用率。
B:构造代码块:
1、概念:定义在类的成员位置,用{}括起来的一段代码;
2、作用:如果类中所有的构造方法都共享一个内容时,可以将该内容定义在构造代码块里,统一初始化。
局部代码块 示例代码:
public void method(){
{
int x = 10;
System.out.println(x);
}
}
构造代码块 示例代码:
public class Student {
// 定义学生的属性
private String name;
private int age;
//构造代码块
{
speak();
}
//一般方法
void speak(){
System.out.println("哇哇叫");
}
// 构造方法
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
五、对象的初始化过程(面试) 例:Person p = new Person();
1、将Person.class加载到内存中;
2、在栈内存中开辟一个名字为p的空间;
3、new Person()在堆内存中开辟空间,建立对象;
4、方法进方法区,成员变量进堆内存并默认初始化;
5、对成员变量进行显式初始化(假如有的话);
6、如有有构造代码块,会执行代码块中的内容;
7、执行构造方法,对象初始化;
8、对象初始化完成,将堆内存中对象的首地址赋值给栈内存中的变量p。
六、static关键字
概述:是一个关键字,代表静态的意思,可以修饰成员变量和成员方法;
成员特点:
A:随着类的加载而加载,因此在static修饰的方法中,没有this和super关键字,因为这都是在对象建立的时才存在;
B:优先于对象而存在;
C:可以使用类名直接调用——类名.方法名;
什么情况下使用static:
当一个事物中的某个内容被类中所有对象共享时,可以用static修饰这部分内容;如果是对象中的特有内容,那么不可以用static修饰。