1.初始java 数据类型 运算符
1.java核心优势
面向对象的思想、可以跨平台、分布式的开发模式、可靠安全、多线程等
2.java的三个版本
javaME(迷你版)、javaSE(标准版)、javaEE(企业版)
3.java的跨平台通过什么实现
.java文件会被编译成.class文件,而负责执行.class文件的是java虚拟机
4.JDK JRE JVM的全称
JDK:java开发的工具包(java Development kit)
JRE:java运行环境(java runtime environment)
JVM:java运行虚拟机(java virtual machine)
5.Dos下,自动补全命令用TAB;显示磁盘目录的命令是dir;cd命令进入某文件
6.public class 的类名必须跟文件名保持一致
7.多行注释不能嵌套
8.位、字节、字、字长的区别
位:二进制(bit)是计算机存储信息的基本单位,代表1个二进制数位
字节:8个连续的二进制位等于1个字节
字:2个字节为一个字
字长:计算机在同一时间内处理的一组二进制数的位数就是字长
9.标识符:用来给类、对象、方法、变量接口和自定义数据类型命名
10.java中有goto语句和关键字,但是JVM并没有提供任何实现
11.java中基本数据类型:
byte:8bit short:16bit
int:32bit long:64bit
float:32bit double:64bit
char:16bit boolean:true、false
12.科学计数法:aEb=a*10^b
3.14E-2 = 3.14*10^-2 = 0.0314
13. byte=500 //err 超界
float f=3.14 //err,数值常量默认是double类型
float f=3.14f //ok
float f=(float) 3.14 //ok
char c="d" //err 只能单引号
14.boolean变量占用空间取决于java虚拟机,可能是1bit或8bit
15.java中常量声明用final static
16.java中的三种引用类型
类class 接口interface 数组array
17.驼峰命名法:混合使用大小写来构成变量和函数的名字
18.命名规则:
19.i++与++i的区别
i++:先引用后自增
++i:先自增后引用
20.几个不易分清的逻辑运算符
|:或位运算
^:异或位运算,同位不同为1,相同为0
&:与位运算
21.在JAVA中,如何跳出当前的多重嵌套循环?
用break; return 方法。
22.java中会存在内存泄漏吗,请简单描述。
会。自己实现堆载的数据结构时有可能会出现内存泄露,可参看effective java.
23.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
可以。必须只有一个类名与文件名相同。
24.描述一下JVM加载class文件的原理机制?
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。
25.谈谈final, finally, finalize的区别
final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载
finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)
finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的
26.char型变量中能不能存贮一个中文汉字?为什么?
是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的
27.数组有没有length()这个方法? String有没有length()这个方法
数组没有length()这个方法,有length的属性。String有length()这个方法
28.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错
short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)
short s1 = 1; s1 += 1;(可以正确编译)
29.String s = new String("xyz");创建了几个String Object
两个,一个字符对象,一个字符对象引用对象
30.什么时候用assert
assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assert就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assert用于保证程序最基本、关键的正确性。assert检查通常在开发和测试时开启。为了提高性能,在软件发布后,assert检查通常是关闭的
31.Equals和Hashcode的区别
这两个方法都是 Object 类的方法,equals 通过用来判断两个对象是否相等。HashCode 就是一个散列码,用来在散列存储结构中确定对象的存储地址。HashMap,HashSet,他们在将对象存储时,需要确定它们的地址,而 HashCode 就是做这个用的。在默认情况下,由 Object 类定义的 hashCode 方法会针对不同的对象返回不同的整数,这一般是通过将该对象的内部地址转换成一个整数来实现的。
在 java 中 equals 和 hashCode 之间有一种契约关系:
如果两个对象相等的话,它们的 hashcode必须相等。
但如果两个对象的 hashcode相等的话,这两个对象不一定相等。
32.equals和==的区别
“==”对于基本数据类型,通常用来比较值(基本数据类型是在栈中进行分配的)相等,对于对象通常用来比较对象的地址。
equals 是 Object 中的方法,可以根据业务需要进行重写,比如 String 中重写了 equals 的方法,常用来比较两个字符串内容是否相等。
说明:重写 equal 的风险也很大的,上面也提到过重写的规则,所以根据需要进行重写。
33. 能否自己定义一个 java.lang.String 类
一般情况下是不可以的,类的 APP 加载器会根据双亲代理机制委托父类加载器去加载此类,而在父亲加载器中已经加载过此类(因为 java.lang.String 类是 JVM
定义的类),会报该类已经存。处理方法,自定义加载器加载,指定一个其它路径。
***String为什么是final类
1、String 类是一个不可变类,被 final 修改的类不能被继承,这样提高了String 类使用的安全性。
2、String 类的主要变量 value[]都被设计成 private final 的,这样在多线程时,对 String对象的访问是可以保证安全。
3、JVM 对 final 修饰的类进行了编译优化,设计成 final,JVM 不用对相关方法在虚函数表中查询,直接定位到 String 类的相关方法调用,提高了执行效率。
***java中引用类型有哪几种
Java 自从 JDK1.2 版本开始,引入四种引用的类型,它们由强到弱依次是: 强引用(StongReference)、软引用(SoftReference)、弱引用(WeakReference)、虚引用
(PhantomReference),它们的各自特点及使用领域。
强引用:代码中最常用看到的 Object o = new Object();这里就是强引用,只要引用在,GC 就不回收它,如果 JVM 内存空间不足会抛出 OutOfMemoryError。
软引用:通常用描述一些有用但不是必需的对象,如果 JVM 内存不足时,会被 GC, 通常被用来作为一些缓存模块的设计,而且不容易 OOM。
弱引用:比软引用还低级别的引用,软引用一般是内存不足时回收,而弱引用只要被 GC 扫描线程发现就会回收掉,即便是 JVM 内存还充足的情况下。
虚引用:如其名,虚无般的存在,完全不会影响对象的生命周期,如果一个对象仅 持有虚引用,就如同没有引用一样,可能随时被回收掉,一般会与强用队列关联使用,一般只用于对象回收的事件传递。
***switch能否用String作为参数
switch 在 jdk1. 7 版本以后,开始支持对 String 入参,它是一种编译器的语法层实现,实际底层传入的是 String 对象的 hashCode,一个 int 型整数。