1.面向对象
(1) 面向对象的三大特征:
①封装性:保护内部的操作不被破坏;
②继承性:在原本的基础之上继续进行扩充;
③多态性:在一个指定的范围之内进行概念的转换。
(2) 面向对象名词扩展
OOA:面向对象分析
OOD:面向对象设计
OOP:面向对象编程
2. 类与对象
Ⅰ.类与对象的定义与使用
(1) 类:是抽象的概念集合,表示的是一个共性的产物,类之中定义的是属性和行为(方法);
对象:对象是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不同对象。
(2)在Java中定义类,使用关键字class完成。
语法如下:
class 类名称 {
属性1;
属性2;
属性n...;
方法1(){}
方法2(){}
方法n(){}...
}
范例:定义一个Person类
class Person{
public String name;
public int age;
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public String getPersonInfo(){
return "姓名:"+this.name+",年龄:"+this.age;
}
}
Ⅱ.定义(生产)对象
类名称 对象名称 = new 类名称();
以Person类为例, 我们可以如下产生一个Person类的实例(对象)
Person p1 = new Person();
Person p2 = new Person("Steven",25);
范例
Person p = new Person("Steven",25);
System.out.println(p.name);
System.out.println(p.getPersonInfo());
Ⅲ.对象内存分析
( 1 )栈内存(虚拟机局部变量表):存放的是局部变量(包含编译期可知的各种基本数据类型、对象引用-即堆内存的地址,可以简单的理解为对象的名称),Java栈是与线程对应起来的,每当创建一个线程,JVM就会为这个线程创建一个对应的Java栈。
( 2 )堆内存:保存的是真正的数据,即对象的属性信息。
class Person {
String name ;
int age ;
public void get() {
System.out.println("姓名:" + name + ",年龄:" + age);
}
}
public class TestDemo {
public static void main(String args[]) {
Person per = new Person();
per.name = "张三" ;
per.age = 30 ;
}
}
运行结果:
姓名:张三,年龄:30
Ⅳ.引用传递分析
3.封装和构造方法
Ⅰ. private实现封装
封装是面向对象中最复杂的概念,使用private关键字实现的封装处理只是封装的第一步(后续还有继承和多态)。
setter方法:主要用于进行属性内容的设置与修改
getter方法:主要用于属性内容的取得
private实现封装的最大特征在于:只允许本类访问,而不允许外部类访问。
Ⅱ.类的设计原则
编写类时,类中的所有属性必须使用private封装。
属性若要被外部访问,必须定义setter、getter⽅法。
Ⅲ.构造方法
①类名称 ②对象名称 = ③new ④类名称();
Ⅳ.构造方法重载
4.this关键字
Ⅰ.this调用本类属性
当参数与类中属性同名时,类中属性方法被正确赋值。此时我们加上this关键字便可以正确给对象属性赋值。只要在类中方法访问类中属性,一定要加this关键字。
Ⅱ.this调用本类方法
this调用本类方法有以下两种情况:
①.调用普通方法:this.方法名称(参数)
②.调用构造方法:this(参数)
使用this调用构造方法时请注意:
1. this调用构造方法的语句必须在构造方法首行
2. 使用this调用构造方法时,请留有出口
面试问题1:对象的产生需要以下两步:
①:为对象开辟内存
②:调用合适的构造函数
Ⅲ.this表示当前对象
只要对象调用了本类中的方法,这个this就表示当前执行的对象
面试问题2:怎么理解this?
①:this表示当前对象的引用
②:可以调用其他的构造函数