JAVA基础
- 1.JDK和JRE有什么区别?
- 2. ==和equals的区别是什么?
- 3.两个对象的hashCode()相同,则equals()也一定为true,这句话对吗?
- 4.final在Java中有什么作用?
- 5.Math.round(-1.5)等于多少?
- 6.String属于基础的数据类型吗?
- 7.JAVA中操作字符串的类有哪些?它们之间有什么区别?
- 8.String str="i"与String str=new String("i")一样吗?
- 9.如何将字符串反转?
- 10.String类的常用方法都有哪些?
- 11 .抽象类必须要有抽象方法吗?
- 12 .普通类和抽象类有什么区别?
- 13.抽象类可以使用final修饰吗?
- 14.接口和抽象类有哪些区别?
- 15.何时使用接口,何时使用抽象类?
- 16.JAVA中IO流分为几种?
- 17.File的常用方法有哪些?
- 18.BIO、NIO、AIO的区别?
- 19.final、finally、finalize的区别?
- 20.方法重写和和方法重载的区别?
- 21.JAVA支持多继承吗?
- 22.什么是构造函数?什么是构造函数重载?
- 23.修饰符public、protected、默认不写、private的作用域?
- 24.堆内存和栈内存的区别?
- 25.值传递和引用传递的区别?
- 26.什么是自动装箱,什么是自动拆箱?
- 27.什么是.class文件?
- 28.异常处理的原则是什么?
- 29.static随着类的加载而加载
- 30.下图中分别包含几个对象?
- 31.为什么说char数组比String更适合存储密码?
- 32. instanceof关键字怎么使用?
- 33.URL和URI的区别?
- 34.创建对象之间的比较
- 35.自增运算
- 36.关键字总结
1.JDK和JRE有什么区别?
- JDK: JAVA Development Kit的简称,JAVA开发工具包,包括了JAVA的开发环境和运行环境(JRE)。
- JRE: JAVA Runtime Environment的简称,JAVA运行环境。
- 两者关系: JDK包含JRE,同时还包含了JAVA源码编译器 JAVAC,还包含了JAVA程序调试和分析的工具。
2. ==和equals的区别是什么?
- ==解读
- 对于基本数据类型: 比较的是值是否相等。
- 对于引用数据类型: 比较的是内存中的地址值。
String x = "String";//字符串常量池
String y = "String";//字符串常量池
String z = new String("String");
System.out.println(x==y);// true
System.out.println(x==z);// false
System.out.println(x.equals(y));// true
System.out.println(x.equals(z));// true
- equas解读
- equals本质上就是==,只不过String和Integer等重写了equals方法,把他变成了值比较.
//Cat类是自定义的一个类(Cat类中没有重写equals方法)
Cat c1 = new Cat("猫");
Cat c2 = new Cat("猫");
System.out.println(c1.equals(c2));//结果为false
/*因为Cat类中没有重写equals方法,
那么调用的是object的equals方法,因为是引用类型,
所以比较的是内存中的地址值,所以结果为false*/
3.两个对象的hashCode()相同,则equals()也一定为true,这句话对吗?
- 答案是不对的
- JAVA代码示例:
String str1 = "通话";
String str2 = "重地";
System.out.println(String.format("str1:%d | str2:%d", str1.hashCode(),str2.hashCode()));
System.out.println(str1.equals(str2));
//执行结果1: str1:1179395 | str2:1179395
//执行结果2: false
/*显然 “通话” 和 “重地” 的 hashCode() 相同,
然而 equals() 则为 false*/
4.final在Java中有什么作用?
- final修饰的变量: 是常量,必须初始化值。
- final修饰的方法: 是最终方法,不能被子类重写。
- final修饰的类: 是最终类,不能被继承。
5.Math.round(-1.5)等于多少?
- 等于-1,因为在数轴上取值时,中间值(0.5)向右取整。
6.String属于基础的数据类型吗?
- String 属于引用数据类型
- 基本数据类型:
byte,short,int,long ,float,double,char,boolean - char占2字节(16位)可存放汉字:char a='中’
7.JAVA中操作字符串的类有哪些?它们之间有什么区别?
- String 、StringBuffer、 StringBuilder
- 1 .String 字符串常量(JAVA内的对象,是不可变的对象)
- 2.StringBuffer 字符串变量(线程安全,用在多线程)
- 3.StringBuilder 字符串变量(非线程安全,用在单线程)
8.String str="i"与String str=new String(“i”)一样吗?
- 不一样:
前者中的"i"是在字符串常量池中,后者中的"i"是被分配到堆内存中
9.如何将字符串反转?
- 调用StringBuffer或者StringBuilder的reverse( ) 方法。
10.String类的常用方法都有哪些?
- 1.indexOf(): 返回指定字符的索引。
- 2.charAt(): 返回指定索引处的字符。
- 3.replace(): 字符串替换。
- 4.trim(): 去除字符串两端的空白。
- 5.split(): 分割字符串,返回一个分割后的字符串数组。
- 6.getBytes(): 返回字符串的字节数组。
- 7.length(): 返回字符串长度。
- 8.toLowerCase(): 将字符串转换成小写字母。
- 9.toUpperCase(): 将字符串转换成大写字母。
- 10.substring(): 截取字符串。
- 11.equals():比较字符的值。
11 .抽象类必须要有抽象方法吗?
- 抽象类可以没有抽象方法
12 .普通类和抽象类有什么区别?
- 1.抽象方法 普通类不能有,抽象类可以有。
- 2.实例化 普通类可以被实例化,抽象类不能直接被实例化。
13.抽象类可以使用final修饰吗?
- 不能,被final修饰的类表示最终类,不能被继承,而定义抽象类就是让其他类继承的,因此产生矛盾。
14.接口和抽象类有哪些区别?
- 1.实现:一个类可以实现多个接口,但只能继承一个抽象类。
- 2.构造函数:抽象类可以有,但接口不能有。
- 3.主函数(main方法):抽象类可以有,接口不能有。
- 4.方法修饰符:接口中的方法默认被public abstract修饰。抽象类中修饰符可以任意的。
- 5.普通成员变量:抽象类中可以有,接口中没有(接口中只有公共静态常量)。
- 6.抽象方法:接口必须要有,抽象类可以没有。
15.何时使用接口,何时使用抽象类?
- 接口: 主要用于抽象功能
- 抽象类: 主要用于抽象类别
16.JAVA中IO流分为几种?
- 1.按流向来分:输入流和输出流。
输入流的基础类:inputStream和Reader
输出流的基础类:OutputStream和Writer - 2.按处理的内容来分:字节流和字符流。
字节流的常用基础类:inputStream和OutputStream
字符流的常用基础类:Reader和Writer - 3.字节流和字符流的区别
字节流操作数据的基本单位:8位的字节
字符流操作数据的基本单位:16位的字节
17.File的常用方法有哪些?
- 判断
1.exists():判断文件、文件夹是否存在
2.isFile():判断是否是文件
3.isDirectory():判断是否是文件夹
4.canRead():判断是否可读
5.canWrite():判断是否可写
6.canExecute():判断是否可执行
7.isHidden():判断是否隐藏 - 获取
1.getAbsolutePath():获取绝对路径
2.getFreeSpace():获取空余空间,单位是字节
3.getName():获取文件名
4.getParent():获取父目录的路径
5.getPath():获取文件对象定义指向的路径
6.getTotalSpace():获取所有空间大小,单位是字节
7.getUsableSpace():获取jvm的可用空间,单位是字节
8.getAbsoluteFile():获取绝对路径所创建的文件对象
9.length():获取文件大小
10.list():返回指定目录下的所有文件名组成的数组
11.listFile():返回指定目录下所有文件对象组成的数组
18.BIO、NIO、AIO的区别?
- 1.BIO:Block IO的简写,同步阻塞式IO(传统IO)
特点: 模式简单,使用方便,并发处理能力低。 - 2.NIO:New IO的简写,同步非阻塞IO(传统IO的升级)
特点: 客户端和服务端通过Channel(通道)通讯,实现了多路复用。 - 3.AIO:Asynchronous IO的简写,异步非阻塞IO(NIO的升级)
特点: 异步IO的操作基于事件和回调机制
19.final、finally、finalize的区别?
- final: 用于修饰属性,方法和类,分别表示属性不可变,方法不能被重写,类不能被继承。
- finally: 是异常处理语句结构的一部分,表示总是执行。
- finalize(): 是Object类的一个方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。
- GC: Garbage Collection的简写,垃圾收集。
20.方法重写和和方法重载的区别?
- 方法重载(overloading)
多个同名方法同时存在于一个类中,参数列表各不相同(类型,个数) - 方法重写(overriding)
子类通过对父类方法的重写,进行功能增强,其方法名和参数列表和父类相同。
注释:@overriding(保证重写方法的上一行是注释)
21.JAVA支持多继承吗?
- JAVA中的类: 不支持多继承,只支持单继承。
- JAVA中的接口: 支持多继承
子接口继承多个父接口,说明子接口扩展了多个功能.
22.什么是构造函数?什么是构造函数重载?
- 构造函数: 创建对象时,构造函数会被调用,函数名与类名相同。
- 构造函数重载: 一个类中存在多个构造函数,参数列表各不相同。
23.修饰符public、protected、默认不写、private的作用域?
- public: 同包和其他包都可以使用。
- protected: 同包和其他包的子孙类可以使用。
- 默认不写: 只有同包内可以使用。
- private: 只有本类中才可以使用。
24.堆内存和栈内存的区别?
- ①堆内存
堆内存用来存放所有new 创建的对象和数组的数据 - ②栈内存
栈内存主要存放的是 基本数据类型
(int,short,long,byte,float,boolean,char)和对象句柄(例:String s 就是对象句柄);
注意:并没有String基本类型,在栈内存的数据大小,生存周期必须是确定的。
优点:寄存速度快,栈数据可以共享。
缺点:数据固定,不够灵活。
(当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,
该内存空间可以立刻被另作他用。)
25.值传递和引用传递的区别?
- 值传递:是对于基本类型变量而言的,传递的是该变量的一个副本,改变副 本不改变原变量;
- 引用传递:是对于对象型变量而言的,传递的是该对象在内存中的地址值,对引用对象操作会改变原对象。
26.什么是自动装箱,什么是自动拆箱?
- **自动装箱:**就是自动将 基本数据类型转换为包装器类型;
- **自动拆箱:**就是自动将包装器类型转换为基本数据类型。
① Integer i = 8; (自动装箱)
相当于自动创建一个Integer对象:Integer i = new Integer(8);(Integer就是int的包装器类)
② int t = i; (自动拆箱)
27.什么是.class文件?
- ①JAVAC编译器将原有的.java文件翻译成二进制的字节码存在.class文件中。
- ②而且class文件是跨平台的基础,有了class文件,JVM才能加载java类
28.异常处理的原则是什么?
- ①在通用方法里面,不要捕获异常,而是直接抛出异常,让调用层处理。
- ②用户访问界面处理掉所有可能出现的异常,并记录详细错误日志,然后返回友好的错误界面给用户。
29.static随着类的加载而加载
- static 变量,static 方法,static代码块 。
①随着类的加载而加载,优先于对象存在,不依赖类的实例,被所有对象共享–static的成员变量和方法可以直接被类名调用。
②static的方法仅能调用其他的static方法,只能访问static数据,不能以任何方式引用this或者super。
③通常一个普通类不允许声明为 静态(是非法),只有内部类才允许。内部类被static修饰变为静态内部类。
④静态代码块:在类加载时优先加载,而且只执行一次.
30.下图中分别包含几个对象?
- ① 1个对象,在栈内存中。
- ② 2个对象,左边在栈内存中,右边在堆内存中
- ③ 3个对象,多了一个字符串常量池的对象
31.为什么说char数组比String更适合存储密码?
- String是字符串常量类,是不可变的
- char数组是可变的,可以被覆盖
//1.假设password是前端提交过来的密码
String password = "123";
//2.假设在后台中,对密码进行处理
String password = "xxxxxs"
//3.原来的"123"依旧在内存中,所以相当不安全
32. instanceof关键字怎么使用?
- instanceof:测试一个对象是否为另一个类的实例
//Class代表某个类或者接口
boolean b = obj instanceof Class;
- ①obj必须为引用类型
- ②obj可以为null
- ③obj可以为Class类的实例对象
- ④obj可以为Class接口的实现类
- ⑤obj可以为Class类的子类
public static void main(String[] args) {
Integer integer = new Integer(2);
System.out.println(integer instanceof Object);//ture
boolean b = integer instanceof Object;
System.out.println("b = " + b);//true
int i = 2;
//System.out.println(i instanceof Object) 编译错误
}
33.URL和URI的区别?
- URI 统一资源标志符:标记了一个网络资源
- URL 统一资源定位符:标记了一个网络资源,并给出了一个访问地址
- URN 统一资源名称:通过特定命名空间的唯一名称或ID来表示资源
- 三者关系:URI包括URN和URL,URL是URI的子集,所以URL一定 URI,但URI不一定是URL
34.创建对象之间的比较
35.自增运算
//求k的值
int i = 1;
int j = 2;
int k = i++ + ++j + i++;
- 自增运算符的优先级比算数运算符的优先级要高。
- i++的结果是1,算完以后i的值是2。
- ++j的结果是3,算完以后j的值是3。
- i++的结果是2(因为在此之前i的值在第一个i++完成后变成了2),算完以后i的值是3。所以k的值就是1+3+2=6。
36.关键字总结
-
break
- ①结束循环,跳出循环体,进行后面的程序;
- ②switch case结构中结束选择分支
-
continue
- ①结束本次循环,进行下次循环;
-
return
- ①跳出循环体所在的方法,相当于结束该方法;
- ②return +[返回类型的对象] 传给需要返回的方法
-
super
- ①子类在构造方法中显示调用父类构造方法
- ②在子类内部代表父类对象,从而在子类中访问父类的属性和方法。
-
this
- ①在类的内部永远代表正在执行此代码的对象;在成员方法和构造方法内部,都可以通过this来明确访问类中的成员属性和成员方法。
- ②在构造方法内部通过this(参数列表),可以调用其他构造方法。