面向对象与面向过程分析
对象相当于一种数据结构,但不仅包含属性(Field),还包含了方法(Method)。
面向过程:数据和方法相互分离
面向对象:数据和方法集成在一起
在简单问题上可以面向过程;在复杂问题上宏观上用面向对象细化问题,在微观上仍用面向过程解决问题
面向对象的三大特征
封装:
继承:
多态:
对象与类的关系
对象(instance)是具体的事物
类(class)是对对象的抽象
类具有对象的特征(属性)与行为(方法),系统可以根据类创建(实例化)对象
类的定义
一个类的定义包括属性(field)、方法(method)和构造器(constructor)
若在类中未定义构造器,则在编译代码时jvm会自动生成一个默认无参空构造器
class 类名{
属性
方法
}
注意:类名首字母大写,其余小写,单词间驼峰原则。 例如:
class StudentOfNcu{
private String name;
private String number;
public String getName(){
return this.name;
}
}
使用new关键字来创建对象 使用对象.变量来引用变量 使用对象.方法来调用方法
StudentOfNcu student1 = new StudentOfNcu();
student1.name = "张三";
student.getName();
同一类的不同对象有不同的成员变量存储空间
同一类的不同对象共享该类的方法
类的构造器无返回值,且方法名与类名一致
class Student{
private String name;
private String number;
public String getName(){
return this.name;
}
public Student(){} //默认无参空构造器
public Student(String namen, String number){ //有参构造器
this.name = name;
this.number = number;
}
}
// 可以通过构造器初始化对象
Student student = new Student("张三", "123456");
注:当写了一个构造器后,就不再有默认的无参空构造器了,若需要则要再写
类的内存分析
栈:
- 每个线程私有,不能实现线程间共享
- .局部变量放置于栈中
- .栈由系统自动分配,速度快,是一个连续的存储空间
- 基础数据类型直接存放于栈中
- 引用数据类型存放该变量在堆中的地址
堆:
- 放置对象(new)
- 堆是一个非连续的存储空间,分配灵活,但速度慢
方法区:
- 被所有线程共享
- 用来存放程序中永远不变或唯一的内容(常量池)(类代码信息,静态变量和字符串常量
例如:
class Hello{
public static void main(String args[]){
Student student = new Student();
}
}
程序运行时首先在栈中开辟一块main函数的栈帧,创建对象(student)时是通过编译时加载至方法区的Student.class字节码文件生成对象,并在堆中开辟一块内存用于存储该对象的属性信息。此时在main的栈帧中存储的对象值为其在堆中对应的地址,程序通过该地址找到堆中的信息进行访问与操作。