目录
8.switch能否作用在byte,long,string上?
10.Math.round(11.5)等于多少?Math.round(-11.5)多少?
13.访问修饰符 public,private,protected,默认 的区别
52. String str = "i" 与 String str = new String("i")一样吗?
54. 使用HashMap时,用String做key有什么好处?
55. String和StringBuffer,StringBuilder区别?为什么String不可变?
Java概述
1.什么是Java
- Java是一门面向对象编程语言,不仅吸收了C++的各种优点,还摒弃了C++里难以理解的多继承,指针等概念,因此Java语言具有功能强大和简单易用两个特征.Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程.
2.Jdk,Jre和Jvm的区别
jdk包含jre,jre包含jvm
- JVM(Java virtual Machine):
Java虚拟机,它能够将class文件中的字节码指令进行识别并且调用操作系统上的api完成动作,JVM是跨平台的核心.作用:保证Java语言跨平台 - JRE(Java Runtime Environment):
Java运行环境.包含JVM标准实现以及java核心类库.作用:Java程序的运行环境. - JDK(java Development Kit):
Java开发工具包.JDK是整个Java开发的核心,集成了Jre和一些工具.作用:Java程序的开发环境
3.什么是跨平台性,原理是什么
- 所谓跨平台性是指Java编写的程序,一次编译之后,可以在多个系统平台上运行.
- 实现原理:
java程序通过Java虚拟机在系统平台运行,只要该系统安装相应的java虚拟机,该系统就可以运行Java程序
4.什么是字节码,采用字节码的好处
- 字节码:Java源代码经过java虚拟机编译后产生的文件(.class文件),它面向虚拟机
- 采用字节码的好处:
Java语言通过字节码的方式,在一定程度上解决了传统解释性语言执行效率底的问题,同时又保留了解释性语言可移植的特点.所以Java程序运行比较高效,而且,由于字节码并不专对一种特定的机器,因此,无需重新编译即可在多种不同的计算机运行.
5.Java和C++的区别
- 都是面向对象语言,都支持继承,封装,多态.
- Java不提供指针来直接访问内存,程序内更加安全.
- java类是单继承,C++支持多继承;Java类不支持多继承,但是接口可以多继承.
- Java有自动内存管理机制,不需要程序员手动释放无用内存.
6.Oracle JDK和OpenJDK的区别
- OracleJDK版本每三年发布一次,而OpenJDK每三个月发布一次
- OpenJdk是完全开源的,而OracleJdk是OpenJdk的一个实现,不完全开源
- OracleJdk更加稳定,两者代码几乎相同,但OracleJdk有一些错误的修复.
- 在响应性和Jvm性能方面,更加推荐OracleJdk
- OracleJdk不会提供长期支持版本,用户必须更新到最新版本获得支持
基础
7.Java有哪些数据类型
定义:Java是强类型语言,对于每一种数据类型都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间
- 基本数据类型:
- 整数类型(byte(1字节),short(2字节),int(4字节),long(8字节))
- 浮点型(float(4字节),double(8字节))
- 字符型(char(2字节))
- 布尔型(boolean(1字节))
- 引用数据类型:
- 类(class):接口(interface),数组([])
8.switch能否作用在byte,long,string上?
- 在java5之前,switch(expr)中,expr只能byte,short,char,int.Java5开始,Java中引用枚举类型,expr也可以是枚举类型,从java7开始,expr可以是字符串(string),但是long目前在所有版本都是不可以的
9.用最有效率的方式计算2乘以8
- 2<<3(左移3位相当于2的3次方,右移三位相当于除以2的三次方)
10.Math.round(11.5)等于多少?Math.round(-11.5)多少?
- 前者返回值12,后者返回值-11
11.java采用何种编码方案?有何特点?
- Java采用Unicode编码标准,为每个字符制定了一个唯一的数值,因此在任何语言,平台,程序都可以放心使用
12.java注解
- 单行注释
- //注释文字
- 多行注释
- /* 注释文字*/
- 文档注释
- /** 注释文字 */
13.访问修饰符 public,private,protected,默认 的区别
- 定义:java中,可以使用访问修饰符来保护对类,变量,方法和构造方法的访问,java支持4种不同的访问权限.
- 分类
- private: 在同一类内可见.适用对象:变量,方法.不能修饰类
- default:什么都不写,同一个包可见,不使用任何修饰符.适用对象:类,接口,变量,方法
- protected:对同一包内的类和所有子类可见 适用对象:变量,方法.不能修饰外部类
- public:对所有类可见.适用对象:类,接口,变量,方法
14.&和&&的区别
- &运算符两边都为true结果才为true
- &&运算符第一个表达式为false,则不计算后面的表达式
- 注意:|运算符和||运算符也是如此
15.final有什么用?
- 被final修饰的类不能被继承
- 被final修饰的方法不能被重写
- 被funal修饰的变量不能被改变,被修饰的不可变的是变量的引用,而不是指向的内容,指向的内容是可以改变的
16.final finally finalize的区别
- final可以修饰类,变量,方法,修饰类表示该类不能被继承,修饰方法表示该方法不能被重写,修饰变量表示该变量不能被重新赋值
- finally一般作用try catch代码块中,处理异常时我们将一定执行的代码放在finally代码块中,表示无论是否出现异常,都会执行,一般存放关闭资源的代码
- finalize是一个方法,属于Object类的一个方法,而Object方法是所有类的父类,该方法一般由垃圾回收来调用,当我们调用System.gc()方法时,由垃圾回收调finalize(),回收垃圾,一个对象是否可以回收的最后判断.
17.this关键字的用法
- this是一个自身的对象,代表对象本身,可以理解为指向本身对象的指针
- this用法在Java中大概分为三种:
- 1. 普通的直接引用,相当于指向对象本身
- 2. 形参与成员名字重名,用this区分
public Person(String name, int age) { this.name = name; this.age = age; }
-
3. 引用本类的构造函数
class Person{ private String name; private int age; public Person() {} public Person(String name) { this.name = name;} public Person(String name, int age) { this(name); this.age = age;} }
18.super关键字的用法
- super可以理解为指向自己超(父)类对象的指针,而这个超类是离自己最近的一个父类
- super三种用法
- 直接引用
- 子类中的成员变量或方法与父类中的成员变量或方法同名,使用super区分
class Person{ protected String name; public Person(String name) { this.name = name; } } class Student extends Person{ private String name; public Student(String name, String name1) { super(name); this.name = name1; } public void getInfo(){ System.out.println(this.name); //Child System.out.println(super.name); //Father } } public class Test { public static void main(String[] args) { Student s1 = new Student("Father","Child"); s1.getInfo(); } }
- 引用父类的构造函数
19. this与super的区别
- super:引用当前对象的父类中的成员(用来访问父类中被隐藏的成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名,super.成员函数名(实参))
- this:代表当前对象名
- this与super类似,super是在子类中调用父类的构造方法,this在本类中调用本类的其他构造方法
- super()和this()均需要放在构造方法第一行
- this和super不能出现在一个构造器,this必然会调用其他构造器,其他构造器必然也会有super 的存在,同一个给灾区有相同的语句就失去了意义
- this和super都不能再status环境修饰 如:status变量,status方法,status语句块
- this是一个指向本对象的指针,而super是一个java关键字
20. static存在的意义
- static主要的意义是在于创建独立于具体对象的域的变量或者方法.以至于没有创建对象也能使用方法
- static关键字还有一个主要的作用,用来形成静态代码块以优化程序性能.static代码块可以放置在程序的任何地方.类中可以有多个static代码块.在类初次被加载时,会按照static代码块的先后顺序执行每个代码块,并且只会执行一次
- 为什么说static可以优化程序性能?因为它只会在类加载的时候加载一次.因此很多时候会将一些只需要进行一次的初始化操作放在static代码块中进行,
21.static的独特之处
- 被static修饰的变量或者方法是独立于任何对象,也就是说,这些变量和方法不属于任何一个实例对象,而是被类的实例对象所共享
- 在类第一次被加载的时候,就回去加载被static修饰的部分,而且只在类被第一次加载的时候进行初始化,注意是第一次用就要初始化,后面根据需要可以再次进行赋值.
- static变量在类加载的时候分配空间,以后创建类对象的时候不会再重新分配,赋值的话,可以被任意赋值
- 被static修饰的变量或者方法是优于对象存在的,也就是说当一个类加载完毕之后,即使没有创建对象,也可以进行访问.
22. static的应用场景
- 因为static是被类额实例对象所共享,因此如果某个成员变量是被所有的对象共享,那么这个成员变量就应该被定义为静态变量
- static常用的场景:
- 修饰成员变量
- 修饰成员方法
- 静态代码块
- 修饰类(只能修饰内部类,也就是静态内部类)
- 静态导包
23. static的注意事项
- 静态只能访问静态
- 非静态既可以访问非静态,也可以访问静态的
流程控制语句
24. break,continue,return的区别
- break:跳出总上层循环,不再执行循环(结束当前循环体)
- continue: 跳出本次循环,继续执行下次循环(结束正在执行的,进入下一个)
- return: 程序返回,不再执行下面的的代码(结束当前方法 直接返回)
25. 如何跳出多重嵌套循环
- 想要跳出多重循环,可以在外面定义一个标号 例如:
public static void main(String[] args) {
ok:
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
System.out.println("i=" + i + ",j=" + j);
if (j == 5) {
break ok;