文章目录
- 4-1 面向过程与面向对象
- 4-2 Java语言的基本元素:类和对象
- 面向对象的思想概述
- 4-3 对象的创建和使用
- 内存解析
- 匿名对象
4-1 面向过程与面向对象
- 面向过程(POP) 与 面向对象(OOP)
- 二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的 是功能行为,以函数为最小单位,考虑怎么做。面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
- 面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。
- java类及类的成员:属性,方法,构造器;代码块,内部类
- 面相对象的三大特征:封装性,继承性,多态性(抽象性) - 其他关键字:this ,super ,static ,final ,abstract ,interface ,package ,import
4-2 Java语言的基本元素:类和对象
面向对象的思想概述
-
类(Class)和对象(Object)是面向对象的核心概念。
1.类是对一类事物的描述,是抽象的、概念上的定义
2.对象是实际存在的该类事物的每个个体,因而也称为实例(instance) -
面向对象程序设计的重点是类的设计,类设计,就是设计类的成员.
-
类的语法格式
public class Person{private int age ; public void showAge(int i) { age = i;}
}
- 创建Java自定义类
步骤:- 定义类(考虑修饰符、类名)
- 编写类的属性(考虑修饰符、属性类型、属性名、初始化值)
- 编写类的方法(考虑修饰符、返回值类型、方法名、形参等)
4-3 对象的创建和使用
- 创建对象语法: 类名 对象名 = new 类名();
- 使用“对象名.对象成员”的方式访问对象成员(包括属性和方法)
例题
public class PersonTest {public static void main(String[] args) {//创建Person类的对象Person p1=new Person();//调用对象的结构,属性,方法//调用属性:"对象.属性"p1.name="Tom";p1.isMale=true;System.out.println(p1.name);//调用方法:"对象.方法"p1.eat();p1.sleep();p1.talk("chinese");//****************Person p2=new Person();System.out.println(p2.name);//nullSystem.out.println(p2.isMale);//false//***************//将p1变量保存的对象地址值赋给了p3,导致p1盒p3指向了对空间中的同一个对象实体Person p3=p1;System.out.println(p3.name);//Tomp3.age=10;System.out.println(p1.age);//10}
}class Person{//属性String name;int age=1;boolean isMale;//方法public void eat(){System.out.println("人可以吃饭");}public void sleep(){System.out.println("人可以睡觉");}public void talk(String language){System.out.println("人可以说话,使用的是:"+language);}
}
- 类的访问机制:
- 在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。 (例外:static方法访问非static,编译不通过。)
- 在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中定义的成员。
内存解析
- 堆(Heap),此内存区域的唯一目的 就是存放对象实例,几乎所有的对象 实例都在这里分配内存。这一点在Java虚拟机规范中的描述是:所有的 对象实例以及数组都要在堆上分配。
- 通常所说的栈(Stack),是指虚拟机栈。虚拟机栈用于存储局部变量等。局部变量表存放了编译期可知长度的各种基本数据类型(boolean、byte、char 、 short 、 int 、 float 、 long 、double)、对象引用(reference类型,它不等同于对象本身,是对象在堆内存的首地址)。 方法执行完,自动释
放。 - 方法区(Method Area),用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据
匿名对象
- 我们也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象。
如:newPerson().shout(); - 使用情况
- 如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象
- 我们经常将匿名对象作为实参传递给一个方法调用。