类与对象【详细】

类与对象

java 特点:面向对象编程


C:面向过程开发——面对一个问题的解决方案,大部分情况不会涉及到重用设计思考
C++、java:面向对象编程——模块化设计、可以进行重用设置

面向对象三大特征:

  1. 封装性——内部的操作对外部不可见,当内部都不可直接用的时候才是安全的
  2. 继承性——在已有结构的基础上继续进行扩充
  3. 多态性——在继承性基础上扩充而来的,指的是类型的转换处理

开发一般有三个步骤:

  1. OOA:面向对象分析
  2. OOD:面向对象设计
  3. OOP: 面向对象编程

在生活中可以说得通的场景,在面向对象程序中都可以模仿出来,这就是面向对象编程


一些事物的抽象概念——许多有共性的对象组成类

对象

具体的事物——类的一个具体例子

类是一个模板,对象是一个实例

先有类,后有对象
比如:可以把男人当做一个类,而我就是一个对象
为什么可以把男人当成一个类,因为男人都有共性(年龄,姓名,会说话,会打球等等)
而我就具备这些特征,因此我是男人这个类里面的一个对象


类一般由两个组成:

  • 成员属性:比如我的年龄、姓名 ——对象的属性
  • 成员方法:比如我会唱歌、会跳舞 ——对象的行为

类 长这样:

里面有两个属性(name, age)和两个方法(sing, dance)
如果要调用这两个方法,那么必须通过实例对象来调用,产生实例对象的语法如下:

  • 声明并实例化对象:Man man = new Man();
  • 分步骤进行,先声明,在后面的代码中再实例化

调用属性:对象名.属性 例如:man.name;
调用方法:对象名.方法名() 例如:man.sing();


对象实例化

堆内存:保存的是对象的具体信息,开辟是通过new 完成的
栈内存:保存的是一块堆内存的地址

Man man = new Man();
在这条语句中,man 可以理解为存在栈内存里面的地址 ,Man 表示这个地址存放的数据类型,而new则在堆内存里面开辟一块空间,此空间的大小由Man 来决定,所以是new Man();
直接看图吧

必须要实例化(new在堆内存开辟)之后,才能调用对象的属性和方法


引用传递

同一块堆内存空间可以被不同的栈内存同时指向,也可以更换指向

主方法内的引用传递:

public static void main(String[] args) {
    Man man1 = new Man();
    Man man2 = man1;
}

man2和man1指向的是同一块堆内存,当man2.age = 80的时候,实际上改变的是堆内存中实例对象的属性值,当我们再次调用man1.age的时候,man1.age为80;

利用方法实现引用传递处理:

class Man{
    String Name;
    int age;
    public void sing(){
        System.out.println("我会唱歌");
    }
    public void dance(){
        System.out.println("我会跳舞");
    }
    public void change(Man man){      //传的是一个内存地址,所以方法结束后会改变其值
        man.age = 80;
    }
}

public class Main {
    public static void main(String[] args) {
        Man man1 = new Man();
        man1.age = 18;
        man1.Name = "Bob";
        Man man2 = new Man();
        man2.age = 20;
        man1.change(man2);
        System.out.println(man2.age);
    }
}

最后输出的结果是:80,而不是20


引用与垃圾产生分析

如果运用处理不当,会导致垃圾产生

没有任何栈内存所指向的堆内存空间就是垃圾空间

所有的垃圾都将被GC(垃圾处理回收机制),如果垃圾过多,回收性能会下降,所以在实际开发中,垃圾产生越少越好
一个栈内存只能够保存一个堆内存的地质数据,如果发生更改,则之前的数据将从此栈内存中彻底消失


成员属性封装

一般成员属性都需要有较高的安全性——采用封装性
在默认情况下,类的属性可以通过其他类来获取或者修改(类外部修改属性)
利用private 进行封装处理,属性对外部就不可见了,但是对类内部是可见的
要在外部访问或者设置,可以使用getter()和setter()方法

在开发过程中,最好类的所有属性都利用private封装,同时提供setter和getter方法


构造方法与匿名对象

  • 构造方法在什么时候使用?

在创建一个对象的时候(new),初始化属性

  • 构造方法有什么优点?

  • 构造方法名称必须与类名称保持一致

  • 构造方法不允许设置任何返回值类型

构造方法长这样:

每一个类都有构造方法,如果程序员没有定义,那么默认的有一个无参数的啥都不干的构造方法,程序编译的时候自动创建的

  • 为什么构造方法没有返回值?构造方法没有返回值为什么不用void 修饰?

因为不需要有返回值;为了与普通成员方法区别开来

什么是匿名对象?
对象的地址没有取名字,形如:new Man(“Bob”, 18);
只执行一次就会变成垃圾,被GC回收释放

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
c 类与对象课程设计的主要目的是通过运用所学的C面向对象程序设计理论知识,使用类和对象的概念来设计一个特定的系统或应用程序。这个课程设计的具体内容和功能可能因项目而异。举例来说,一个图书借阅系统的课程设计可以通过使用类和对象来设计图书管理员管理读者账户和图书的功能。另外,一个自助点餐系统的课程设计可以通过使用类和对象来实现点餐功能和处理订单的能力。总之,c 类与对象课程设计是通过实际项目来训练学生综合运用所学知识处理实际问题的能力,并加强面向对象的程序设计理念。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [超详细Java入门到精通自学视频课程-01、面向对象进阶简介.rar](https://download.csdn.net/download/weixin_54787054/88280673)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [C++面向对象程序设计课程设计-图书借阅系统](https://download.csdn.net/download/qq_57987156/85513646)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [C++面向对象课程设计_自助点餐系统.zip](https://download.csdn.net/download/weixin_48388330/75698721)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值