【狂神说Java】面向对象
面向对象
- 面向过程(线性思维)
- 步骤清晰简单,第一步做什么,第二步做什么,依次进行
- 适合处理些简单的问题
- 面向对象
- 分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对分类进行单独思考。 最后,对分类下得细节进行面向过程的思索。
- 适合处理复杂的问题,适合处理多人协作的问题。
- 宏观上面向对象处理分析整个系统,具体操作还是面向过程。
什么是面向对象
-
面向对象编程(Object-Oriented Programming,OOP)
-
面向对象编程的本质是:以类的方式组织代码,以对象的组织(封装)数据
-
三大特性:
- 封装
- 继承
- 多态
-
从认识论角度考虑是先有对象后有类。
- 对象,是具体的事物。
- 类,是抽象的,是对对象的抽象。
-
从代码运行角度考虑是先有类后有对象。
- 类是对象的模板。
类和对象的关系
- 类是一种抽象的数据类型,是对某一事物的描述/定义,但是不能代表某一个具体的事物。
- 对象是抽象概念的具体实例。
类和对象的创建
// 一个类中只有一个public类,可以有多个非public类
public class Person(){
// 定义属性
private String name;
private int age;
// 定义方法
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;
}
// 一个类中只有一个main方法
public static void main(String[] args) {
// 设定的方法都不是static静态的需要先实例化
Person jie7 = new Person();
// 实例化对象,调用构造方法Person()
System.out.println(jie7.getName());// null
// jie7.name = "Jie7" 在这不会报错,但是在另外的类中调用会报错,因为private限制其只能在当前类中使用
jie7.setName("Jie7");
System.out.println(jie7.getName()); // Jie7
}
}
构造器(构造方法)
// 一个类即使什么都不写,他也会存在一个方法
// 可以看编译后的.class文件
// 这个方法被叫做构造方法
public class Person(){
// new关键字,本质是在调用构造方法
// 构造方法没有返回值,void也没有
// 构造方法可用于初始化数据
// 构造方法和类名一致
public Person(){} // Person jie7 = new Person();
}
// 可以有多个构造方法(重载)
public Person(String name){
this.name = name;
}
// Person jie7 = new Person("CC"); 实例化的时候把名字初始化
}
内存分析
public class Application(){
public static void main(String[] args) {
Pet dog = new Pet();
dog.name = "旺财";
dog.age = 1;
Pet cat = new Pet();
}
}
- 堆中加载Application类,静态方法区加载其静态方法(static),方法区加载main方法,方法区常量池存放常量值“旺财”
- 将main方法加载到栈中
- 当
Pet dog = new Pet();时,dog存放于栈中、new的对象内容在堆中开辟空间 - 每次new新的对象都会开辟不同的内存空间
![]()
怎么确定项目中的类和方法。
将有关问题的描述记录下,给所有的名词、动词、形容词做记录。
在名词中找出可能的类。
在动词中找出可能的方法。
在形容词中找出属性。
将找出的方法和属性分配给各个类。


浙公网安备 33010602011771号