Java学习—day06
面向对象与面向过程
- 面向过程,面向对象都是一种看待问题、解决问题的思维方式。
- 面向过程
- 强调的是功能行为 —关注的是解决问题需要哪些步骤
- 着眼点在于问题是怎样一步步的解决的,然后亲力亲为的解决这个问题。
- 面向对象
- 强调的是完成功能的对象 —关注的是解决问题需要哪些对象
- 着眼点在于找到一个能够帮助解决问题的实体,然后委托这个实体解决问题。
- 面向对象是相对面向过程而言
- 面向对象是基于面向过程的
Java是面向对象的语言
- 严格意义来讲,这句话不太准确。
- 面向对象是一种编程思想,不是语言。
- 面向对象的语言正确的理解应该是:使用这种语言更容易写出具有面向对象编程思想
的代码。
使用面向对象的语言写出的程序,一定是面向对象的程序
- 错!!!
- 面向对象是一种编程思想。面向对象的语言只是更加容易写出具有面向对象编程思想
的代码
面相对象特点
- 是一种符合人们思考习惯的思想
- 可以将复杂的事情简单化
- 将程序员从执行者转换成了指挥者
完成需求时:
- 先要去找具有所需的功能的对象来用。
- 如果该对象不存在,那么创建一个具有所需功能的对象。
类与对象分析
在面向对象的编程思想中, 着眼点在于找到一个能够帮助解决问题的实体, 然后委托这个实
体解决问题。
在这里, 这个具有特定的功能, 能够解决特定问题的实体, 就是一个对象。
由若干个具有相同的特征和行为的对象的组成的集合, 就是一个类。
ps
:类是对象的集合,对象是类的个体
JAVA中用类来描述的事物也是如此
属性:对应类中的成员变量
行为:对应类中的成员方法
定义类其实是在定义类中的成员(成员变量和成员方法)
识别类的小技巧:一般名称都是类(名词提炼法)
小明在公车上牵着一条叼着热狗的狗
分析:
拥有对象:小明,公车,热狗,狗
拥有类:可以是有一个类,两个类,三个类或者四个类
类的设计【会】
语法:
从若干具有相同的特征和行为的对象中,提取出这些相同的特征和行为,设计为一个类。
类中定义所有的对象共有的特征和行为,其中,特征用属性表示,行为用方法表示
ps
:属性其实就是定义在类中的一个全局变量
定义类的时候i,使用的关键字class
[访问权限修饰符] class 类名 {
// 类体
// 属性: 描述所有对象共有的特征。
// 方法: 描述所有对象共有的行为。
}
public class Person {
// 使用属性, 描述所有对象的特征
String name; // 描述所有人的姓名
int age; // 描述所有人的年龄
// 使用方法, 描述所有对象的行为
public void eat() {
}
public void sleep() {
}
}
类设计注意事项
- 类名:是一个标识符,遵顼大驼峰命名法
- 一个
java
文件中可以写多个类,但是只有与文件名相同的类,可以使用public修饰 - 每一个类在编译后都会生成一个.class字节码文件,以类的名字命名
对象的实例化【会】
实例化对象,其实就是从类中找到一个实体
使用关键字new进行实例化
class Person {
// 使用属性, 描述所有对象的特征
String name; // 描述所有人的姓名
int age; // 描述所有人的年龄
// 使用方法, 描述所有对象的行为
public void eat() {
}
public void sleep() {
}
}
class Test {
public static void main(String[] args) {
// 使用new进行对象的实例化,对象内的属性会自动进行初始化,引用类型初始化成
null,int赋值成0,boolean赋值成false
Person xiaoming = new Person();
}
}
对象的内存分析【了解】
ps
:但凡遇到new都表示在堆上开辟空间。因此对象的实例化,也是在对上开辟空间。
匿名对象【会】
定义:匿名对象就是没有名字的对象
因为没有名字,所以当我们想使用匿名对象实现功能时,只能在创建对象的这个时刻使用一次.一
旦使用完毕,这个对象我们就再也无法调用,变成了垃圾.系统会通过垃圾回收机制在某个时刻进
行内存回收。
内存很宝贵,使用匿名对象可以更好的使用内存(随用随建,用完更快回收内存),节省内存
使用场景
1.用作方法参数
2.用匿名内部类
public class Demo5 {
public static void main(String[] args) {
Dog d = new Dog();
d.age = 10;
new Dog();//没有名字的对象---匿名对象--本身就是垃圾
new Dog().age = 30;
//功能测试
//经常使用匿名对象作为方法的参数,节省代码,节省内存
//Dog d1 = new Dog();
feedDog(new Dog());
}
public static void feedDog(Dog dog){
dog.run();
}
}
class Dog{
String name;
int age;
public void run(){
System.out.println("跑");
}
}
多引用指向同一个对象【了解】
- 原理说明
对象和数组都是引用数据类型,都是通过栈区中的引用(变量)保存堆区中的对象地址,所以当我
们让多个引用同时保存一个对象的地址,通过任何一个变量都可以访问这个对象(这就是前面讲
过的址传递的原理)
public class Demo6 {
public static void main(String[] args) {
Cat cat1