Java基础之面向对象(一)
一、了解面向对象
面向对象:一种基于面向过程的新的编程思想,顾名思义该思想是站在对象的角度思考问题,我们把多个功能合理的放到不同对象里,强调的是具备某些功能的对象。
三大特征:
封装(Encapsulation);封装是指将对象的实现细节隐藏起来,然后通过公共的方法来向外暴露该对象的功能。Ø
继承(Inheritance);继承是面向对象实现软件复用的重要手段,当子类继承父类后,子类是一种特殊的父类,能直接或间接获得父类里的成员。
多态(Polymorphism);多态是可以直接把子类对象赋给父类变量,但是运行时依然表现出子类的行为特征,这意味着同一类型的对象在运行时可能表现出不同的行为特征。
类:类是对象的类型/模板。创建一个对象,就是使用一个类作为构建该对象的基础。
具有相同特性(数据元素)和相同行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。
类具有特性,对象的状态,用成员变量来描述。
类具有功能,对象的行为,用方法来描述。
类和对象之间的关系:
类是对象的描述,类是对象的类型,类是对象的图纸模板.
对象是类,具体的一个个体.是根据类创建出来的.
定义类的注意事项:
1:类名使用名词或者名词短语,使用驼峰表示法(后面的每个单词首字母大写).
比如:Employee,StudentInfo,
2:类名首字母大写,使用标识符.
3:如果类使用了public修饰,则当前类所在的文件名称也必须为该类名.
------------------------------------------------------------------------------------------------------------
在面向对象的课程中:
描述对象的类,不需要定义main方法的.
测试类才应该具有主方法,测试类用于创建对象,操作对象.
一般的,我们让测试类名和文件名相同.
对象的基本操作:
1):如何根据一个类创建对象,此时得使用关键字new .
类名 变量= new类名();
new关键字:1):在堆内存中开辟一块空间,2):创建了一个对象.
每次使用new关键字,都表示在堆中新开辟一块内存空间.
2):匿名对象,没有名称的一个对象,因为没有名称,匿名对象就只能使用一次:
new类名();如, new Servant();
一般而言,我们不会使用匿名对象,我们会把创建的对象赋值给一个变量,此时该对象就不是匿名对象了,该变量名就好比是对象的名称.
3):打印对象的时候,默认打印出的是对象的hashCode值。
4):使用对象调用对象的方法.
如果对象中的方法,没有使用static修饰符,就只能使用当前方法所在类的对象来调用,不能直接使用类名调用.例如:
Servant s1 = new Servant();
s1.cooking();
6):使用对象来操作成员变量.
给对象的成员变量设置值:
给菲佣s1设置一个名字 如:s1.name = "张三";
获取对象的成员变量的值:
获取s1对象的姓名:String n = s1.name;
定义一个Cat类,包含了name和age状态,以及sleep,eat行为.
创建三个Cat对象: c1,c2,c3
分析内存
二、构造器
构造器的作用:
构造器最重要的功能就是创建对象,分配内存空间,并完成对象的初始化操作。
一旦创建对象就会调用与之对应的构造器,构造器的作用:可用于创建实例象和完成实例初始化时内存分配。
构造器的特点:
1.构造方法名称与类名相同:
2.不用定义返回值类型:
因为返回值的类型肯定就是这个类型本身,也不能使用void.。
3.不需要写return语句:
但实际效果是调用后把创建好的对象返回。
即使我们没有手动提供构造器,编译器也会提供默认构造器,每一个类,至少有一个构造器.
如果我们手动提供了构造器,则编译器不载提供默认构造器.
三、static关键字修饰.
static修饰成员变量:该变量属于整个类,不属于某一个具体对象.
static修饰的方法:该方法属于整个类,不属于某一个具体的对象.
没有使用static修饰的成员变量/方法,就属于某一个对象.
使用static修饰的成员(变量,方法,内部类),称之为类的成员.
特点:
1):随着JVM的加载而加载.
当JVM把static成员所在的字节码加载进JVM的时候,static就已经存在于JVM中(方法区).
2):优先于对象存在.
对象是我们通过new关键字创建出来的,而静态成员,在加载进JVM就已经存在了.
3):被所有当前这个类的对象所共享.
4):调用静态成员,直接使用类名调用即可.
静态成员属于类型,而不属于某一个具体的对象.
即使我们使用对象.静态成员,其底层依然是类名.静态成员.
使用static修饰的字段不是存储在堆内存的,而是存储在独立于堆内存和栈内存的方法区内存中,可以被该类所有的对象所共享。
类成员:使用static修饰的成员变量,方法,内部类.
实例成员:没有使用static修饰的成员变量,方法,内部类.
在实际开发中,我们往往不会使用static去修饰成员变量和方法,使用static的几个地方:
1:静态代码块:
static{
初始化数据
}
2:定义全局的公共常量的时候使用.
public static final int MAX_VALUE = 127;//表示一个常量值,不能改变,大家可以共用.
3:工具类中的方法,使用static修饰,目的:方便调用(使用最多的情况).
四、equals与==
equals:一般用在比较当前对象和指定对象比较,表示逻辑相等(比较值)。
==:一般是用来判断两个对象的引用内存地址是否相同(比较地址)。