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;    
}

对象在内存中的存在形式

image-20220501220122755

可以看到类对象也是拥有默认值的,当我们创建对象后不设置属性,那么这个属性的值会是这个数据类型的默认值。

这个默认值与数组一样:

  • byte/short/int/long 整型:默认值 0
  • float/double 浮点型:默认值 0.0
  • char 字符类型:默认值\u0000
  • boolean布尔类型:默认值 flase
  • String字符串类型:默认值 null

因为字符串实际上也是一个类,Java 中除了八大数据类型,其他都是属于引用类型。所以栈中记录的并不是字符串本身,而是记录这个字符串的内存地址,而字符串是存放在方法区中的常量池里【常量池,用于存放常量如字符串】。

而当我们创建对象的时候,如果方法区中没有加载这个类,那么JVM会帮我们加载这个类的类属性、类方法。注:类加载只会加载一次,如果这个类加载信息已经在方法区中存在了,那么后续创建对象的时候不会重新加载。

posted @   假文艺青年。  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示