1. 面向对象和面向过程的区别?
面向过程就是分析出解决问题的步骤,然后用函数一步一步实现,在使用的时候调用即可;
面向对象则是把解决的问题按照一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题。
面向对象优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
缺点:性能比面向过程低
2. 类和对象
什么是类?什么是对象?
1)现实世界是由很多对象组成的
基于对象抽出了类
2)对象:真实存在的单个的个体
类:类型/类别,一类个体
3)类中可以包含:
3.1)所有对象所共有的特征/属性(静)---变量
3.2)所有对象所共有的行为(动)------方法
4)一个类可以创建多个对象
同一个类的多个对象,结构相同,数据不同
5)类是对象的模板,对象是类的具体的实例
3. 对象的创建流程?
4.1)javac编译源代码,生成若干个字节码
4.2)java将相关的字节码文件加载进JVM中的方法区
4.3)JVM在方法区中找main主函数加载进栈内存中运行
4.4)主函数进栈
4.5)创建对象的流程
在堆内存中开辟对象的空间并分配地址
对成员变量进行默认初始化
相应的构造函数进栈 先进行显示初始化
再执行构造函数的代码 进行针对性初始化
构造函数出栈 对象创建完毕 将对象的地址赋予在函数中的变量
创建对象内存图解
4. 私有private关键字
- 是一个权限修饰符,用于修饰成员变量和成员方法.
- 私有是针对类,而不是针对对象,也就是说,同一个类的所有的不同的对象之间,可以互相访问别的对象的的私有的成员.
- 被私有化的成员只在本类中有效.
- 因此对私有的变量进行访问 可以提供对应的 setXxx或者getXxx的方法
class Person{
private int age; //私有成员变量
private String name;
//对外提供设置成员变量的方法
public void setAge(int a){
//由于是设置成员变量的值,这里可以加入数据的验证
if( a < 0 || a > 130 ){
System.out.println(a+"不符合年龄的数据范围");
return;
}
}
public int getAge(){
return age;
}
}
5. 构造函数
构造函数(构造方法、构造器、构建器)
1)常常用于给成员变量赋初值
2)构造函数名与类同名,没有返回类型(不写void),有return。
3)在创建(new)对象时被自动调用(有参传参)
4)若自己不写构造函数,则编译器默认提供无参构造,若自己写了构造,则不再默认提供
5)构造方法可以重载
构造函数的格式
修饰符 构造函数名(参数列表){ }
class Person{
private int age;
private String name;
//Person的无参构造
Person(){
}
//Person的一个参数构造
Person(int a){
this.age=a;
}
//Person的两个参数构造
Person(int a,String nm){
this.age=a;
this.name=nm;
}
}
6. 构造函数和成员函数的区别?
构造函数没有返回值 成员函数可有可没有
构造函数只有在创建对象时被调用 对象创建完毕后不能被对象调用。成员函数在对象创建之后由对象调用
构造函数可以调用构造函数
构造函数可以调用成员函数 但是这个成员函数一般不会当作对象的特有行为去看待。
7. this关键字
指代当前对象,哪个对象调指的就是哪个对象,方法中访问成员变量之前默认都有个this
this的用法:
1)this.成员变量名-------访问成员变量
2)this.方法名()---------------调用方法
3)this()--------------------------调用构造方法,不能相互调用,必须在第一行