面向对象
一 面向对象与面向过程
面向过程,面向对象都是一种看待问题、解决问题的思维方式。 面向过程 ---强调的是功能行为 ---关注的是解决问题需要哪些步骤 ---着眼点在于问题是怎样一步步的解决的,然后亲力亲为的解决这个问题。 面向对象 ---强调的是完成功能的对象 ---关注的是解决问题需要哪些对象 ---着眼点在于找到一个能够帮助解决问题的实体,然后委托这个实体解决问题。 面向对象是相对面向过程而言 面向对象是基于面向过程的。
二 类与对象详述
1 类的设计(会)
. 语法 从若干个具有相同的特征和行为的对象中, 提取出这些相同的特征和行为, 设计为一个类。 类中定义所有的对象共有的特征和行为, 其中, 特征用属性表示, 行为用方法表示。 所谓属性, 其实就是定义在类中的一个全局变量。 在定义类的使用, 使用关键字class . 类设计注意事项 类名: 是一个标识符, 遵循大驼峰命名法。 一个java文件中可以写多个类, 但是只有与文件名相同的类, 可以使用public修饰。 每一个类在编译后都会生成一个.class字节码文件, 以类的名字命名。 [访问权限修饰符] class 类名 { // 类体 // 属性: 描述所有对象共有的特征。 // 方法: 描述所有对象共有的行为。 } 示例代码: public class Person { // 使用属性, 描述所有对象的特征 String name; // 描述所有人的姓名 int age; // 描述所有人的年龄 // 使用方法, 描述所有对象的行为 public void eat() {} public void sleep() {} }
三 实例化对象
实例化:实例化对象, 其实就是从类中找到一个实体。 使用关键字 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(); } }
四 匿名对象(会)
定义:
匿名对象就是没有名字的对象因为没有名字,所以当我们想使用匿名对象实现功能时,只能在创建对象的这个时刻使用一次.一旦使用完毕,这个对象我们就再也无法调用,变成了垃圾.系统会通过垃圾回收机制在某个时刻进行内存回收---(垃圾回收机制在JVM处会讲).
使用场景:
1.用作方法参数 2.用作匿名内部类(在day10_接口和内部类讲)
示例代码:
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("跑"); } }
五 类中的成员访问
1 成员分类
使用关键字static修饰的属性、方法, 被称为静态属性、静态方法。 没有使用关键字static修饰的属性、方法, 被称为非静态属性、非静态方法, 又被称为实例属性、实例方法。
2 访问
静态成员需要使用类访问,非静态成员需要使用对象访问。 静态方法中可以直接访问本类中的静态成员,不能直接访问本类中的非静态成员。 非静态方法中可以直接访问本类中的静态成员,也可以直接访问本类中的非静态成员。
示例代码:
public class Person { int height = 10; //定义变量时直接赋值,意思是说:当我们在创建对象时,如果不单 独赋值,他的height的值就是当前的10 String name; // 描述所有人的姓名 int age; // 描述所有人的年龄 static int COUNT; // 静态属性, 描述对象的数量 public void eat() {} public void sleep() {} //静态方法 public class Person { int height = 10; //定义变量时直接赋值,意思是说:当我们在创建对象时,如果不单 独赋值,他的height的值就是当前的10 String name; // 描述所有人的姓名 int age; // 描述所有人的年龄 static int COUNT; // 静态属性, 描述对象的数量 public void eat() {} public void sleep() {} //静态方法
五 Static
1 static定义
是一个关键字,被static修饰的成员就变成了静态的.具有保值功能。 如果某些属性是属于不同的对象, 每一个对象的值都不同, 可以设计为非静态。 例如人的名 字。 如果某些属性是可以被所有的对象共享的, 每一个对象看到的值都是相同的, 可以设计为静 态。 例如对象的数量。
六 this关键字
1 概念:
是一种引用数据类型,本身是一个关键字,用在类的实例方法或者构造方法中,代表的是当前的对象,保存的是当前对象的地址 场景:当我们想在当前类的内部拿到当前对象的引用时,可以使用this
2 this功能总结
1.用来区分成员变量和局部变量 2.可以在构造方法内部调用其他重载的构造方法,提高代码的复用性,简化代码(具体实现见 构造方法小节)
七 区分成员变量和局部变量
在类中, 使用方法时,为了更好的表示参数代表的成员变量意思,我们会将参数的名字和对应成员变量的名字一致。 此时, 如果在方法内部直接使用名字来访问, 根据就近原则(在内存中离方法的远近判断)优先访问的是局部变量(参数)。 因此需要使用this关键字表示对当前对象的引用,访问成员变量,因为使用this访问的一定成员变量。