Java学习笔记——Java问答

JDK和J2SDK的区别?
:JDK即Java Development Kit,简称Java开发包。
J2SDK即Java 2 Software Develop Kit,简称Java2软件开发包。J2SDk包含了Java Development kit(JDK)、Java Runtime Environment(JRE)和Java Plug-in。原先 Sun公司的Java软件开发工具包是JDK,现在称为J2SDk了。

Java文件扩展名是否区分大小写?
:Java文件的扩展名区分大小写

转型运算符会引起精度问题,为什么还要使用它?
:其实不但基本类型的数据会使用转型运算符,对象类型的数据也要使用转型运算符。在使用基本数据转型时,一般都要从低精度往高精度转,但是在某些特定的情况下,或者说在用户特殊要求下,会从高精度转向低精度。例如有的数字希望能够去掉小数位,那么就只能从高精度往低精度转型

普通循环是使用for语句还是 while语句?
:根据情况不同而定,for循环语句主要针对有限循环而言,也就是说当循环 有上限的时候,一般使用for循环。while循环语句则针对那些无限循环的代码而言,当循环没有明确上限,上限只是根据程序中的条件而定。

一般的程序可否用分支语句来代替条件语句?
:视具体情况而定,如果条件在三重之内,最好使用条件语句。如果超过了三重,最好使用分支语句。

声明数组需要注意什么?
:声明数组时,一定要考虑数组的最大容量,防止容量不够的现象。数组一旦被声明,它的容量就固定了,不容改变。如果想在运行程序时改变容量,就需要用到数组列表

数组在平时的程序代码中使用是否频繁?
:其实数组有一个缺点,就是一旦声明,就不能改变容量,这个也是其使用频率不高的原因。一般存储数据会使用数组列表或Vector这两种数据结构来存储数据

“equals”和“==”的区别?
:“” 如果操作两边都是对象句柄,就比较两个句柄是否指向同一个对象。如果两边是基本类型,比较的就是值。
“equals” 比较的是两个对象的内容,如果不重载“equals”方法,自动调用object 的“equals”方法,则和“
”样。在JDK中 像“String”、“Integer”,默认重载 了“equals”方法,则比较的是对象的内容。在实际编程中,建议使用“equals”方法

String类为何被定义成final约束?
:主要是考虑“效率”和“安全性”的缘故。若“String”允许被继承,则其频繁地被使用,可能会降低程序的性能,所以“String”被定义成“final”。

char类型如何转换成int类型,int类型如何转换成字符串?
:char类型转换成int类型的代码
char c=‘A’; int i=c; //反过来只要作强制类型转换就行了 c=(char)i;
将整数int转换成字串String有两种方法:
(1)String s=String.valueOf(i);
(2)String s=Integer.toString(i);

类在程序语言中起到了什么作用?
:其实类的出现,将原先的过程化程序设计推到了面向对象编程,这是一个质的变化。类的出现,让程序都是以模块化结构来编写的,为程序员编写程序的思路清晰带来了很大的好处

设置器和访问器的作用?
::设置器和访问器的作用是在创建对象后,为数据对象设置一些字段,主要是减轻构造器的负担。

访问控制符在实际开发中有什么作用?
:在实际开发工作中,有一个很重要的概念“封装”。这个封装涉及访问控制符。另外,当一个包的方法需要调用另一个包的方法时,也涉及访问控制符。所以说访问控制符贯穿了整个程序开发,起着重要的作用。

一个文件中定义了两个class类是 否生成一个.class文件?
:将多个类放在一个.java文件中,那么使用javac编译后,生成多个.class文件。

Java不支持多继承,如何处理一个类继承多个父类的情况?
:遇到需要继承多 个类的情况时,Java通过实现接口的方式来解决

如果出现了带参数的构造器,可否不在代码中写出来?

:不行。因为系统默认的构造器是不带参数的,如果带参数的构造器不在代码中书写出来,会造成整个程序的混乱。

多态与重载的区别是什么?
:重载是在一个类里,名字相同但参数不同的方法。多态是为了避免在父类里大量重载,而引起代码臃肿且难于维护的解决方案。多态有两种表现形式:重载和覆盖。

匿名类如何在程序中使用?
:匿名类是一种特殊的局部内部类,用来继承一个类或者实现一个接口。匿名内部类不能定义构造方法。在编译的
时候由系统自动起名Out$1.class。如果一个对象编译时的类型是接口,那么其运行的类型是实现这个接口的类,因为匿名内部类无构造方法,所以其使用范围非常有限

接口与继承有什么区别?
:接口在本质上就是一个特殊的类。在语法上跟继承有着很大的差别。
❑属性:接口中的所有属性都是公开静态常量,继承则无所谓。
❑方法:接口中的所有方法都是公开抽象方法,继承中所有的方法不一定都是抽象方法。
❑接口方法:接口没有构造器,继承有构造器。

抽象与接口的区别?
:接口和抽象在很多方面相似,下面列出其共同点。
❑都不能创建实例对象,因为它们都是抽象的。
❑虽然不能直接通过关键字“new”创建对象实例,但可以声明变量,通过变量指向子类或实现类的对象,来创建对象实例。
两者也有不同点,如下所示。
❑Java不支持多重继承,即一个子类只能有一个父类,但一个子类可以实现多个接口。
❑接口内不能有实例字段,只能有静态变量,抽象类可以拥有实例字段。
❑接口内方法自动设置为“public”的,抽象类中的方法必须手动声明访问控制符。

Java中线程与线程之间怎么通信?
:共享一个变量,并对此变量的访问进行同步,因为它们共享一个内存空间,所以相比之下,它比进程之间通信要简单容易的多。

什么是进程的死锁和饥饿?
:饥饿是由于别的并发进程的激活,而导致持久占有所需资源。饥饿是一个异步过程,预测的时间内不能被激活,最常遇到的线程的两个缺陷是死锁和饥饿。当一个或多个进程,在一个给定的任务中,协同作用、互相干涉,而导致一个或者更多进程永远等待下去,死锁就发生了。与此类似,当一个进程永久性地占有资源,使得其他进程得不到该资源时,就发生了饥饿。
首先看死锁问题。考虑一个简单的例子,假如到ATM机上取钱,但是却看到如 下的信息“现在没有现金,请稍等再试”,若需要钱,就等了一会儿再试,但是又看到同样的信息。与此同时,一辆运款装车正等待着把钱放进ATM中,但是运款装 甲车到不了ATM取款机,因为前面的汽车挡着道。客户只有取到钱,才会离开原地。这种情况下,就发生了死锁。在饥饿的情形下,系统不处于死锁状态中,因为有一个进程仍在处理之中,只是其他进程永远得不到执行的机会。在什么样的环境下,会导致饥饿的发生,这没有预先设计好的规则,而一旦发生下面四种情况之一,就会导致死锁的发生。
❑相互排斥:一个线程或者进程永远占有共享资源,例如,独占该资源。
❑循环等待:进程A等待进程B,而后者又在等待进程C,而进程C又在等待进程 A。
❑部分分配:资源被部分分配,例 如,进程A和B都需要访问一个文件,并且都要用打印机,进程A获得了文件资 源,进程B获得了打印机资源,但是两个进程不能获得全部的资源。
❑缺少优先权:一个进程访问了某个资源,但是一直不释放该资源,即使该进程处于阻塞状态。如果上面4种情形都不出现,系统就不会发生死锁。当其中一个进程判断出,它得不到所需要的第2个资源,就释放已经得 到的第1个资源,那么第2个进程就可以获得两个资源,并能运行下去。

Collection集合接口和Collections集合类的区别?
:Collection和Collections的区别有以下几点:
❑Collections是java.util下的类,它包含各种有关集合操作的静态方法。
❑Collection是java.util下的接口,它是各种集合结构的父接口。

ArrayList数组列表类和Vector存储类的区别?
答:ArrayList和Vector的区别有两点:
❑同步性:Vector是线程安全的,是同步的。而ArrayList是线程不安全的,不是同步的。
❑数据增长:当需要增长时,Vector默 认增长为原来一倍,而ArrayList却是原来的一半。

HashMap哈希映射和Hashtable哈希表的区别?
答:HashMap和Hashtable的区别有三点:
❑都属于Map接口的类,作用都是将唯一键映射到特定的值上。
❑HashMap类没有分类或排序,它允 许一个null键和多个null值。
❑Hashtable类似于HashMap,但是不 允许null键和null值,它也比HashMap慢,因为它是同步的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲小憨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值