搞懂 Java 对象

三大特性

封装,继承,多态

封装: 只暴露接口
继承: 只支持单继承
多态: 方法的重写、重载与动态连接构成多态性

Java之所以引入多态的概念,原因之一是它在类的继承问题上和C++不同,后者允许多继承,这确实给其带来的非常强大的功能,但是复杂的继承关系也给C++开发者带来了更大的麻烦,为了规避风险,Java只 允许单继承,派生类与基类间有IS-A的关系(即“猫”is a “动物”)。这样做虽然保证了继承关系的简单明了,但是势必在功能上有很大的限制,所以,Java引入了多态性的概念以弥补这点的不足,此外,抽象类和接 口也是解决单继承规定限制的重要手段。同时,多态也是面向对象编程的精髓所在。
对象多态性主要是指子类和父类对象的相互转换关系。

  • a) 向上类型转换(upcast):比如说将Cat类型转换为Animal类型,即将子类型转换为父类型。对于向上类型转换,不需要显式指定。
  • b) 向下类型转换(downcast):比如将Animal类型转换为Cat类型。即将父类型转换为子类型。对于向下类型转换,必须要显式指定(必须要使用强制类型转换)。

成员变量 和 成员函数

对象

创建一个对象都在内存中做了什么事情?

1:先将硬盘上指定位置的Person.class文件加载进内存。
2:执行main方法时,在栈内存中开辟了main方法的空间(压栈-进栈),然后在main方法的栈区分配了一个变量p。
3:在堆内存中开辟一个实体空间,分配了一个内存首地址值。new
4:在该实体空间中进行属性的空间分配,并进行了默认初始化。
5:对空间中的属性进行显示初始化。
6:进行实体的构造代码块初始化。
7:调用该实体对应的构造函数,进行构造函数初始化。()
8:将首地址赋值给p ,p变量就引用了该实体。(指向了该对象)

构造函数

重载

main函数

保证所在类的独立运行。是程序的入口。被jvm调用。
public:访问权限最大。

static:不需要对象。直接类名即可。

void:主函数没有返回值。

main: 主函数特定的名称。

(String[] args):主函数的参数,是一个字符串数组类型的参数。jvm调用main方法时,传递的实际参数是 new String[0]。

jvm默认传递的是长度为0的字符串数组。我们在运行该类时,也可以指定具体的参数进行传递。可以在控制台,运行该类时,在后面加入参数。参数之间通过空格隔开。jvm会自动将这些字符串参数作为args数组中的元素,进行存储。

类的访问权限

属性方法的访问权限

this 和 static

final 类,属性,方法

Java final详解

Java中静态代码块、构造代码块、构造函数、普通代码块

注意: 静态代码块, 构造代码块, 是什么? 怎么用?
静态代码块,构造代码块详解

对象的比较 == equals

“==” 是比较object的reference而不是value
(基本数据类型: 他们之间的比较,应用双等号 ==, 比较的是他们的值。)

equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
参考

栈 堆 栈 堆 栈 堆

栈堆浅析cnblog

在这里插入图片描述

接口

  • Java接口中的成员变量默认都是public,static,final类型的(都可省略),必须被显示初始化,即接口中的成员变量为常量(大写,单词之间用"_"分隔)
  • Java接口中只能包含public,static,final类型的成员变量和public,abstract类型的成员方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
StringBuilder是一个线程不安全的字符序列,用于在单个线程中操作少量数据。它是JDK5.0新增的,通过修改底层的char数组来操作字符串内容。与String相比,StringBuilder的性能更高,因为它不会频繁地创建新的String对象,而是直接修改原有的char数组。StringBuilder的方法没有加锁,因此在多线程环境下使用时需要注意线程安全性。如果需要在单线程中操作大量数据,可以使用StringBuilder,而在多线程环境中操作大量数据,则应该使用StringBuffer,因为StringBuffer的方法是加了synchronized锁的,具有线程安全性。在进行字符串拼接时,最好使用StringBuilder来提高性能,尤其是在方法内部使用,使用完后可以丢弃。对于容量方面,可以在构造StringBuilder时指定容量大小,避免频繁扩容。总之,了解StringBuilder的特性可以帮助我们更好地选择适合的字符串操作方式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [从源码角度彻底搞懂String、StringBuffer、StringBuilder](https://blog.csdn.net/xfhy_/article/details/80019618)[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^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Java 源码出发彻底搞懂String与StringBuffer和StringBuilder的区别](https://blog.csdn.net/csdn_aiyang/article/details/71134052)[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^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值