![](https://img-blog.csdnimg.cn/637c4b608f284887b7781104c2d3fbd1.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
吾日三省Java
文章平均质量分 81
在浅溪中摩挲着Java的黑丝,嗨嗨嗨
拥抱白熊
学习使我快乐
展开
-
Java中String字符串为什么不可变
Java中有常量优化机制,编译器将这个"ABC" + “hello"作为常量表达式,在编译时进行优化,直接取表达式结果"ABC” + “hello”,这里没有创建新的对象,而是从JVM字符串常量池中获取之前已经存在的"ABChello"对象。:当变量与字面量或变量与变量进行拼接时,会在堆中创建一个StringBuilde对象,然后使用StringBuilder的append()方法将变量与字面量或变量与变量进行拼接,最后调用toString()方法转成String对象。例如,按键或来自文件中的单词。原创 2023-03-28 11:14:51 · 161 阅读 · 0 评论 -
内部类对象引用获取的细节
但你现在可以看到:内部类的对象只能在与其外围类的对象相关联的情况下才能被创建(就像你应该看到的,在内部类是非static类时)。构建内部类对象时,需要一个指向其外围类对象的引用(如下面的parcel或者q),如果编译器访问不到这个引用就会报错。前面我们提到,创建一个非static的内部类对象需要一个外部类引用(只有在与外部类关联的情况下才能创建),如果你能理解这句话,那么直接创建内部类的方式会非常清晰。再次点题:从格式我们也可以看到,未拥有外部类对象之前是不可能创建内部类对象的。但是如果我们创建的是。原创 2023-03-25 10:46:07 · 151 阅读 · 0 评论 -
Java初始化顺序
csdn上有好多关于Java初始化顺序的口诀什么的,示例代码也有,但是一股脑儿地把这些灌输给读者,需要读者以极大的精力去深入理解。下面我将以几个例子逐步给大家讲明白其中的构造顺序。看到这大家应该对上三个相应部分的初始化都有了自己的理解。1)按照成员变量定义顺序进行初始化。即使变量定义散布于方法定义中,他们依然在任意方法被调用前进行初始化2)静态对象(变量)优先于非静态变量对象初始化,其中,静态对象(变量)只初始化一次,非静态对象可能多次初始化;3)父类优先于子类进行初始化;原创 2022-09-28 09:26:49 · 1452 阅读 · 5 评论 -
Java“==”关系操作符与“equals”,“compareTo”方法三者的区别
=是关系操作符,计算操作之间值的关系equals方法是java.lang.Object类的方法compareTo方法是java.String类和java.Integer类等多个对象都实现的方法1.功能不同"=="是判断两个变量或实例是不是指向同一个内存空间(适用于所有基本数据类型)。"equals"是判断两个变量或实例所指向的内存空间的值是不是相同(不适用于”基本数据类型“)“compareTo"是比较两个字符串是否相同。原创 2023-03-21 11:03:35 · 651 阅读 · 1 评论 -
Java—深入解析this,static关键字
从上我们得知this引用可用于成员变量,成员方法,构造器。this仅能在一个构造器内调用唯一一次外构造器,且必须将其置于最起始处,否则编译器会报错。我们也许会发现这样的形式会更有利于我们理解代码实际发生的事,但我们并不能这样子写代码。这里我们创建了两个对象,且均调用了其方法。最近看Java编程思想,给了我对Java底层很深的启示与理解。故Java中显式引入了this关键字来获得当前对象的引用。用在方法内部使用,表示对“调用方法的那个对象的引用”。除构造器外,编译器禁止在其他任何方法中调用构造器。原创 2022-09-23 11:02:38 · 96 阅读 · 2 评论 -
goto在Java中的替代(break和continue的进阶用法)
goto语句是在源码级上的跳转,这使得其招致了不好的声誉。Dijkstra发表了著名论文《Goto considered harmful》(goto有害)若一个程序总是从一个地方跳到另一个地方,那么还有什么办法能识别程序的流程控制呢?《Goto considered harmful》(goto有害)论文中最反对的其实是标签而不是goto,因为实践证明程序随着标签的增加而产生的错误增加,且不利于程序的分析。原创 2022-09-21 22:46:33 · 778 阅读 · 1 评论 -
Java泛型机制和向上转型
那么创建这样的容器,它知道自己所保存的对象的类型,从而不需要向下转型以及消除犯错误的可能,这样不是更有意义吗?然而向下转型并非彻底是危险的,因为如果向下转型为错误的类型,就会得到被称为异常的运行时错误,稍后会介绍什么是异常。尽管如此,当从容器中取出对象引用时,还是必须要以某种方式记住这些对象究竟是什么类型,这样才能执行正确的向下转型。Circle是一种Shape类型:但在不知道某个Object是Circle还是Shape的情况下,除非确切知道所要处理的对象的类型,否则向下转型几乎是不安全的。原创 2023-03-20 19:42:20 · 214 阅读 · 0 评论 -
Java作用域与变量初始化和C,C++间的区别
Java编译器将会报告变量X已经被定义过,所有在C和C++中将一个较大作用域隐藏的起来的做法,在Java中是不被允许的。原创 2022-09-20 09:06:28 · 410 阅读 · 3 评论 -
Java对象的存储和生命周期
当需要一个对象时,只需用new写一行简单的代码,当执行这行代码时,会自动在堆里进行存储分配。当然,为这种灵活性必须要付出相应的代价:用堆进行存储分配和清理可能比用堆栈进行存储分配需要更多的时间(如果确实可以在Java中像在C++中一样在栈中创建对象的话)。在流对象中,对象转化成字节流,通常被发送给另一台机器。在“持久化对象”中,对象被存放于磁盘上,因此,即使程序终止,它们仍可以保持自己的状态。有时,在嵌入式系统中,常量本身会和其他部分隔离开,所以在这种情况下,可以选择将其存放在ROM(只读存储器)中。原创 2023-03-16 16:29:48 · 161 阅读 · 0 评论 -
Java动静态绑定(与C/C++的区别)
针对static方法和final方法,并不是因其不能被继承,而是由于其不能被子类覆盖重写,因此在编译时就可以确定他们的值,他们是属于静态绑定的,而private声明的方法和成员变量由于不能被子类继承,并且隐式继承final,所以也是静态绑定的,构造方法则是单纯不能被继承。final方法虽然可以被继承,但不能被重写(覆盖),虽然子类对象可以调用,但是调用的都是父类中所定义的那个final方法,(由此我们可以知道。这个问题的答案,也是面向对象程序设计的最重要的妙诀:编译器不可能产生传统意义上的函数调用。原创 2023-03-20 19:10:35 · 110 阅读 · 0 评论 -
总结:Java语言自身的优势(小白必看)
Java语言11个特征:简单、面向对象、分布性、健壮性、安全性、结构中立性、可移植性、解释性、高效性、多线程和动态性。原创 2023-03-19 11:21:12 · 1042 阅读 · 0 评论