没有合适的资源?快使用搜索试试~ 我知道了~
1. 我们能不能声明 main()方法为非静态? 不能, main()方法必须声明为静态的,这样 JVM 才可以调用 main()方法而无需实例 化它的类。 如果从 main()方法去掉“static”这个声明, 虽然编译依然可以成功, 但在运行时会导 致程序失败。 2.不用main 方法如何定义一个类? 不行,没有 main 方法我们不能运行 Java 类。 在 Java 7 之前,你可以通过使用静态初始化运行 Java 类。但是,从 Java 7 开始就行不 通了。 3. String 类为什么是 final 的。 主要是为了“效率”和“安全性”的缘故。若 String 允许被继承, 由于它的高度被 使用率,可能会降低程序的性能,所以 String 被定义成 final; 4.使用 final 关键字修饰一个变量时,是引用不能变,还是 引用的对象不能变? 使用 final 关键字修饰一个变量时, 是指引用变量不能变, 引用变量所指向的对象中的 容还是可以改变的。 5. string、 stringbuilder、 stringbuffer 区别
资源推荐
资源详情
资源评论
JAVA 基础部分
1. 我们能不能声明 main()方法为非静态?
不能, main()方法必须声明为静态的,这样 JVM 才可以调用 main()方法而无需实例
化它的类。
如果从 main()方法去掉“static”这个声明, 虽然编译依然可以成功, 但在运行时会导
致程序失败。
2.不用main 方法如何定义一个类?
不行,没有 main 方法我们不能运行 Java 类。
在 Java 7 之前,你可以通过使用静态初始化运行 Java 类。但是,从 Java 7 开始就行不
通了。
3. String 类为什么是 final 的。
主要是为了“效率”和“安全性”的缘故。若 String 允许被继承, 由于它的高度被
使用率,可能会降低程序的性能,所以 String 被定义成 final;
4.使用 final 关键字修饰一个变量时,是引用不能变,还是
引用的对象不能变?
使用 final 关键字修饰一个变量时, 是指引用变量不能变, 引用变量所指向的对象中的
容还是可以改变的。
5. string、 stringbuilder、 stringbuffer 区别
a.可变与不可变
String 类中使用字符数组保存字符串,如下就是, 因为有“final”修饰符,所以可以
知道 string 对象是不可变的。
private final char value[];
StringBuilder 与 StringBuffer 都 继 承 自 AbstractStringBuilder 类 , 在
AbstractStringBuilder 中也是使用字符数组保存字符串, 如下就是, 可知这两种对象都是
可变的。
char[] value;
b.是否多线程安全
String 中的对象是不可变的,也就可以理解为常量,显然线程安全。
AbstractStringBuilder 是 StringBuilder 与 StringBuffer 的公共父类,定义了一些
字符串的基本操作,如 expandCapacity、append、insert、indexOf 等公共方法。
StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的
StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的
c.StringBuilder 与 StringBuffer 共同点
StringBuilder 与 StringBuffer 有公共父类 AbstractStringBuilder(抽象类)。
抽象类与接口的其中一个区别是: 抽象类中可以定义一些子类的公共方法, 子类只需要
增加新的功能,不需要重复写已经存在的方法;而接口中只是对方法的申明和常量的定义。
StringBuilder、 StringBuffer 的方法都会调用 AbstractStringBuilder 中的公共方
法, 如 super.append(...)。只是 StringBuffer 会在方法上加 synchronized 关键字, 进行
同步。
最后,如果程序不是多线程的,那么使用 StringBuilder 效率高于 StringBuffer。
6. 抽象类和接口的区别
1).抽象类可以有构造方法,接口中不能有构造方法。
2).抽象类中可以有普通成员变量,接口中没有普通成员变量
3).抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽
象的
普通方法。
4). 抽象类中的抽象方法的访问类型可以是public ,protected 和 (默认类型,虽然
eclipse 下不报错,但应该也不行),但接口中的抽象方法只能是 public 类型的,并且默
认即为
public abstract 类型。
5). 抽象类中可以包含静态方法,接口中不能包含静态方法
6). 抽象类和接口中都可以包含静态成员变量, 抽象类中的静态成员变量的访问类型可以任
意,
但接口中定义的变量只能是 public static final 类型,并且默认即为 public static final 类
型。
7). 一个类可以实现多个接口,但只能继承一个抽象类。
7. Java 中应该使用什么数据类型来代表价格?
如果不是特别关心存和性能的话,使用 BigDecimal,否则使用预定义精度的 double
类型。
8. 静态变量和实例变量的区别?
在语法定义上的区别:
静态变量前要加 static 关键字,而实例变量前则不加。
在程序运行时的区别:
实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,
才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,
只要程序加载了类的字节码, 不用创建任何实例对象, 静态变量就会被分配空间, 静态变量
就可以被使用了。 总之, 实例变量必须创建对象后才可以通过这个对象来使用, 静态变量则
可以直接使用类名来引用。
9. 、 final, finally, finalize 的区别。
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
部类要访问局部变量, 局部变量必须定义成final 类型,例如,一段代码……
finally 是异常处理语句结构的一部分,表示总是执行。
finalize 是 Object 类的一个方法, 在垃圾收集器执行的时候会调用被回收对象的此方
法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 JVM 不保证此方
法总被调用
10. sleep() 和 wait() 有什么区别?
sleep 就是正在执行的线程主动让出 cpu ,cpu 去执行其他线程,在 sleep 指定的时
间过后, cpu 才会回到这个线程上继续往下执行, 如果当前线程进入了同步锁, sleep 方法
并不会释放锁,即使当前线程使用 sleep 方法让出了 cpu,但其他被同步锁挡住了的线程
也无法得到执行。
wait 是指在一个已经进入了同步锁的线程,让自己暂时让出同步锁,以便其他正在等
待此锁的线程可以得到同步锁并运行, 只有其他线程调用了 notify 方法(notify 并不释放
锁,只是告诉调用过 wait 方法的线程可以去参与获得锁的竞争了,但不是马上得到锁,因
为锁还在别人手里,别人还没释放。如果 notify 方法后面的代码还有很多,需要这些代码
执行完后才会释放锁,可以在 notfiy 方法后增加一个等待和一些代码, 看看效果) ,调用
wait 方法的线程就会解除wait 状态和程序可以再次得到锁后继续向下运行。
11. HashMap 和 Hashtable 的区别
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 就必须为之提供
外同步。
Hashtable 和 HashMap 采用的hash/rehash 算法都大概一样,所以性能不会有很大的
剩余22页未读,继续阅读
资源评论
小楼先森
- 粉丝: 2273
- 资源: 5450
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功