Java 面向对象概念
面向对象概念
面向对象OOP[Object-oriented programming] 是一种编程模式,面向对象是围绕数据或对象来组织软件设计的,而不是功能和逻辑。
面向对象是一个抽象的概念,它不同于面向过程那样通过功能和逻辑来实现软件的设计,面向对象依赖于类和对象这两个概念来完成软件的设计。
面向对象的优点在与减少代码的重复、代码可维护性高、数据管理方便
类
类即分类、类别,类是一个抽象的概念。
通过分类可以区分不同事物的种类比如:
- 人类,并不是指某一个人,而是指这个物种。
- 车,指的也只是车这个大类,并不是指具体的那一辆车。
- 电脑,指的一样是一个类别,而不是具体哪一台电脑。
- 学校,指的也是一个类别,清华北大985也是学校,为什么我上不了😭
所以类是一种具有相同特性与行为的事物的集合。
类是由 属性、方法 构成的
- 属性:即表象、特征
- 方法:即行为、能力
假设我们要开发一款枪战游戏,我们需要先从整体上进行分类如:
人物/角色 类、枪类
人物具有的特性 角色名称、生命值、移动速度
枪具有的特征 枪名、子弹数量、射击速度、杀伤值
人物具有的行为:开枪动作、更换弹夹、移动
完成了上面的步骤,再来进行代码的实现。
class Role {
String name;
double HP;
int move;
}
class Gun {
// 枪名
String name;
// 子弹数量
int bullet;
// 射击速度
double RateOfFire;
// 杀伤值
double Lethality;
}
对象
对象指的是某个真实存在的东西,如你这个人本身就是一个对象,因为你是真实存在的人,人类代表你所属的类,而你自己本身就是人类的对象。
还是以上面的枪战游戏为例
我们已经有了角色类、枪类 我们现在来创建一个游戏角色,和一把枪
创建一个游戏角色对象:角色法外狂徒张三 ,生命值 999、移动速度10086
创建一个枪的对象:AK47、子弹数量99999、射击速度9999、杀伤值999999
public class Game {
public static void main (String[] args) {
// 创建角色
Role zhangSan = null; // 创建一个空指针
zhangSan = new Role(); // 申请空间创建角色对象,并赋给变量 zhangsan
// 设置对象属性
zhangSan.name = "法外狂徒张三";
zhangSan.PH = 999;
zhangSan.move = 10086;
// 创建枪对象
Gun ak47 = new Gun();
// 设置枪属性
ak47.name = "AK47";
ak47.bullet = 99999;
ak47.rateOfFire = 9999;
ak47.lethality = 999999;
}
}
class Role {
String name;
double HP;
int move;
}
class Gun {
// 枪名
String name;
// 子弹数量
int bullet;
// 射击速度
double rateOfFire;
// 杀伤值
double lethality;
}
对象在内存中的存在形式

可以看到类对象也是拥有默认值的,当我们创建对象后不设置属性,那么这个属性的值会是这个数据类型的默认值。
这个默认值与数组一样:
byte/short/int/long整型:默认值0float/double浮点型:默认值0.0char字符类型:默认值\u0000boolean布尔类型:默认值flaseString字符串类型:默认值null
因为字符串实际上也是一个类,Java 中除了八大数据类型,其他都是属于引用类型。所以栈中记录的并不是字符串本身,而是记录这个字符串的内存地址,而字符串是存放在方法区中的常量池里【常量池,用于存放常量如字符串】。
而当我们创建对象的时候,如果方法区中没有加载这个类,那么JVM会帮我们加载这个类的类属性、类方法。注:类加载只会加载一次,如果这个类加载信息已经在方法区中存在了,那么后续创建对象的时候不会重新加载。

浙公网安备 33010602011771号