java基础的注意事项

1、堆和栈

具体来说,堆和栈都是内存存取数据的地方。与c++不同的是,java自动管理堆和栈,我们不能直接设置堆和栈。java的堆是一个运行时(runing)数据区,类的对象在堆中分配空间,这些对象通过new运算符创建,他们不需要程序代码显示的释放内存空间,堆是有java垃圾回收器管理的。


(1)堆得优势在于可以动态的分配内存大小,生存期也不必事先告诉编译器,因为他是在运行时动态的分配内存,存取速度较慢。


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


2、Car car =new Car();的解释。


 Car car是首先在栈中分配内存空间,用于存放一个标志car,他是用来存放堆中生存对象的地址。static申明的方法,

要放在栈中,进行共享。static申明的属性,方法将只是在栈中分配一次,供多个对象共享。


new Car()是堆中分配内存空间,用以存放对象的实体,除了static申明的属性,方法外,都在堆中分配内存。=是将在堆中分配的对象的地址放到栈中的car分配的内存空间上。


3、成员变量和局部变量的区别。


(1)变量的初始值:成员变量可以显示的赋值,也可以取数据的默认值。但是局部变量必须显示的声明,如果声明一个变量未显示赋值,那么程序将无法访问变量。


(2)存储位置:成员变量中的实例变量存储在堆内存中,结束时垃圾回收器回收空间,局部变量和类变量时存储在栈内存中,无需垃圾回收器随着程序块运行结束而结束。


(3)每次给变量赋值,堆或者栈中将给他分配新的内存空间用于存放值,上次的空间将等待java虚拟机回收。


4、构造方法


(1)构造方法没有返回类型,及时void也不行。
(2)构造方法与类名相同。
(3)构造方法必须用new运算符来调用,其他不可以调用。
(4)static关键字是不能用来修饰构造方法的,构造方法只能使用public,private,protected修饰。如果变量要在程

序块中粗时候,程序块前必须使用static修饰。


5、static程序块,普通程序块区别
(1)执行的顺序不同,静态程序块在被编译就执行一次,而普通程序块只有在用new运算符实例化对象被调用一次;

(2)静态程序块只能访问类成员,而普通程序块既可以访问实例成员,也可以访问类成员。


6、多态
(1、多态和继承息息相关,正因为有继承,才会有多态,

(2、多态是指在继承工程中父类及子类中可以有多个   同名但意义或实现方式不同的属


7、抽象
(1、抽象不能创建实例,
(2、抽象类可以含有0个或者多个抽象方法。性或方法,多态有两种情况:重载和覆盖。实际中还有向上转型和向下转型。
(3、抽象方法只能被继承,抽象类的子类必须实现抽象类里面所有的方法,否则该抽象类也是抽象方法。

(4、抽象类的构造方法不能用于创建实例,主要用于子类继承。


8、接口
(1、接口是抽象类的一个变体,接口的所有方法必须是抽象的,接口的变量默认都是publi  c static final类型的。
9、String 和StringBuffer
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值.这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的.
10、说出ArrayList,Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。


11、容器

容器->Collection(接口)->List(接口)、Set(接口)
List(接口)->Vectory(实现)、ArrayList(实现)、(LinkedList(实现)
Set(接口)->TreeSet(实现)、HashSet(实现)->LinkedHashSet(实现)
容器->Map(接口)->hashMap(实现)、Hashtable(实现)、TreeMap(实现)
(1、容器可以分为两类:Collection和Map
(2、Collection分为两类:List和Set,List是有序,重复的集合,而Set是无序、不可重复的集合。
(3、Map是一种具有映射关系的集合。Map由键和值组成的复合对象。Map就像数据库中的字典。
(4、Vector(向量)也是一种对象集合,但相对于数组,Vector可以追加堆像元素数量,可以方便的修改和维护序列的对象。

(5、将一个对象添加到容器后,该对象的数据类型自动转换为Object类型,原有数据类型丢失。用get()取出某一对象时,也需要将对象从Object类型强制转换为具体某种数据类型。


(6、实现List接口有两个:ArrayList和LinkedList。选取那一种取决于特定需要。如果要支持随机访问,而不必在尾部的任何位置插入或者删除元素,那么选用ArrayList;如果要频繁的从列表中间位置插入或者删除元素,并且要求以顺序的方式访问列表元素,那最好选用LinkedList。


(7、HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键(key),由于非线程安全,效率上可能高于Hashtable。HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。


HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步(如果是ArrayList:List lst = Collections.synchronizedList(new ArrayList());如果是HashMap:Map map = Collections.synchronizedMap(new HashMap());)。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值