文档章节

Java盲点解析

闵开慧
 闵开慧
发布于 2012/09/20 12:37
字数 1211
阅读 78
收藏 1

1 堆栈区别

    Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过newnewarrayanewarraymultianewarray 指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时 动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。

栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类 型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。

    堆和栈的区别可以用如下的比喻来看出:

    使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。

    使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。

2 重写与重载区别

    重写是子类的方法覆盖父类的方法,要求方法名和参数都相同

    重载是在同一个类中的两个或两个以上的方法,拥有相同的方法名,但是参数却不相同,方法体也不相同,最常见的重载的例子就是类的构造函数,可以参考API帮助文档看看类的构造方法

3 java构造器

    构造器就是和类名相同但无返回类型的方法比如

        class A

         {

            public A()

            {

            }

        }

    其中A方法 就是class A的构造器 虽然构造器没有返回值但可以有参数如

        class A

         {

            public A(String a,String b)

            {

            }

        }

    一个类也可以有多个构造器如

        class A

         {

            public A()

            {

            }

             public A(String a,String b)

            {

            }

        }

    当你new A()时则无参那个构造器被调用,当你new A"ddd","fff")时,那个有参的构造器被调用,如果你没有写构造器则jvm会调用一个默认的无参的构造器

    构造器在类初始化的时候被调用通常被用来做一些初始化的工作。构造器不可以重载但可以重写。

4 hasecode:对象在内存中的首地址

    只是为了维护 hashCode 方法的常规协定,才要求用equals比较的两个对象的hashCode相同. equals()hashCode()都来自java.lang.Object.你当然可以重写比如a.equals(b).仅当a的内存地址相等时,才返回true.当然如String等类已经对这个方法进行了重写,比较的就不再是内存地址了. hashCode()的值也是与内存地址相关的.所以仅当内存地址相等时,hashCode才相等.

    简单数据类型和封装类中的equals和== Java为每一个简单数据类型提供了一个封装类,每个基本数据类型可以封装成对象类型。  除int(Integer)和char(Character),其余类型首字母大写即成封装类类型名。double (Double), float(Float),long(Long), short(Short),byte(Byte),boolean(Boolean).    以int和Integer为例说明  Java中int和Integer区别如下: 1.int是基本的数据类型,默认值可以为0; 2.Integer是int的封装类,默认值为null; 3.int和Integer都可以表示某一个数值; 4.int和Integer不能够互用,因为他们两种不同的数据类型; int a1=1; int a2=1; Integer b1 =new Integer (1); Integer b2 =new Integer (1); ------------------------------ a1==a2 这个是成立的,很简单,都知道 a1==b1 这个是不成立的.表达式的值为 false ,它们是不同的数据类型(在jdk1.5以上版本中为true) b1==b2 这个也是不成立的.表达式的值为 false,虽然是相同的数据类型,但是它们是两个对象,==比较的是2个对象的地址,它们的地址是不相等的,内容相等都是1; b1.equals(b2)==true 这个是成立的,表达式的值为 true. 相同数据类型,两个对象,地址不同,内容相同, quals比较的是2个对象的内容,所以成立。 (a.equals(b),因为equals比较的是两个对象,所以a,b都不能为基本数据类型,否则会出编译错误。)(在jdk1.5以上版本中,b可以为基本数据类型,a不可以)


© 著作权归作者所有

闵开慧
粉丝 334
博文 608
码字总数 269647
作品 0
青浦
高级程序员
私信 提问
加载中

评论(1)

a
alphabeta
好,楼主总结真好
OSC 第 101 期高手问答 —— Java 高并发程序设计

OSCHINA 本期高手问答(12月02日- 12月08日)我们请来了《实战Java高并发程序设计》的作者 @葛一鸣 为大家解答关于 Java 的并行程序设计基础、思路、方法和实战 方面的问题。如: 现在的服务...

叶秀兰
2015/12/01
13K
84
2019年Java程序员金三银四跳槽季,机会只留给有准备的人!

前言 现在大多数Java程序员都走入了盲点,以为来年跳槽就能涨一点薪,但是你有没有想过跳槽涨薪前提是建立在你要具备跳槽涨薪的价值,希望下面这些你看完之后能对你有所帮助。 跳槽要学习的技...

Java干货分享
02/15
262
1
你所需要的java提升篇大总结

java基础篇深入解析大总结 java基础(一) 深入解析基本类型 java基础(二) 自增自减与贪心规则 java基础(三) 加强型for循环与Iterator java基础(四) java运算顺序的深入解析 java基础(五) Str...

sihailoveyan
2018/04/25
0
0
一份关于 Java、Kotlin 与 Android 的学习笔记

JavaKotlinAndroidLearn 这是一份关于 Java 、Kotlin 、Android 的学习笔记,既包含对基础知识点的介绍,也包含对一些重要知识点的源码解析,笔记的大纲如下所示: Java 重拾Java(0)-基础知...

叶应是叶
2018/08/08
0
0
【XML系列】详解JDOM解析XML

【XML系列】详解JDOM解析XML 一、前言 JDOM是Breet Mclaughlin和Jason Hunter两大Java高手的创作成果,2000年初,JDOM作为一个开放源代码项目正式开始研发。JDOM是一种解析XML的Java工具包。...

磊神Ray
2011/11/01
201
0

没有更多内容

加载失败,请刷新页面

加载更多

设计模式之访问者模式

定义 Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which......

陈年之后是青葱
昨天
9
0
PhotoShop 高级应用 : 分层云彩 - 简单闪电效果

1.创建黑白渐水平渐变图层 2.选择滤镜选项卡: 渲染--->分层云彩功能 3.将滤镜-云彩效果渲染后的图层进行反相操作 【此时出现闪电效果】 6.调整色阶,使得闪电效果更明显 7.创建剪贴蒙版:色...

东方墨天
昨天
9
0
三种实现Android主界面Tab的方式

三种实现Android主界面Tab的方式 https://www.cnblogs.com/caobotao/p/5103673.html

shzwork
昨天
9
0
java8-Optional类

背景 NPE问题,100%的Java程序员都碰到,并且曾经是心中的痛。 1965年英国TonyHoare引入了Null引用,后续的设计语言包括Java都保持了这种设计。 一个例子 业务模型 Person 有车一族, 有Car...

春天springcarter
昨天
11
0
py 登录github时token以及cookie的应用

import requestsfrom bs4 import BeautifulSoup## 获取tokenr1 = requests.get('https://github.com/login')s1 = BeautifulSoup(r1.text,'html.parser')token = s1.find(name='input',......

子枫Eric
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部