Java 基础
1.JDK 和 JRE 有什么区别?
JRE: Java Runtime Environment JDK:Java Development Kit JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。 JDK顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。 |
2.== 和 equals 的区别是什么?
==是一个比较运算符,基本数据类型比较的是值,引用数据类型比较的是地址值。 (比较地址值即是指是否为同一个对象的引用) equals()是一个方法,只能比较引用数据类型。重写前比较的是地址值,重写后比一般是比较对象的属性。 |
3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
两者之间唯一的必然关系被你说反了,equls返回为true,则两者的hashcode一定相等,意即相等的对象必须具有相等的哈希码。每当equals方法被覆写,通常需要重写hashCode方法从而 保持对象行为的一致性。而具有相等的hashcode的两个对象equals不一定成立。 |
4.final 在 Java 中有什么作用?
final关键字可以用于三个地方。用于修饰类、类属性和类方法。 被final关键字修饰的类不能被继承,被final关键字修饰的类属性和类方法不能被覆盖(重写); 对于被final关键字修饰的类属性而言,子类就不能给他重新赋值了,如果重新赋值,会报错: |
5.Java 中的 Math.round(-1.5) 等于多少?
round是四舍五入,注意负数5是舍的,例如:Math.round(1.5)值是2,Math.round(-1.5)值是-1; floor就是直接去掉小数保留整数,即如果参数是正数则小数部分全舍,参数是负数则小数部分全入。 例如:Math.floor(2.6)的值是2,Math.floor(-2.1)的值是-3 |
6.String 属于基础的数据类型吗?
String不是基本数据类型,而是一个类(class),是C++、java等编程语言中的字符串。 为了提高效率节省空间,我们应该用StringBuffer类。 |
7.Java 中操作字符串都有哪些类?它们之间有什么区别?
String:用来处理长度不可变的字符串 StringBuilder(StringBuffer 这两个只是版本不同而已)用于处理可变长度字符串 |
8.String str="i"与 String str=new String(“i”)一样吗?
String str1 = “str1”: 1、 在栈中创建str1的引用。 2、 去常量池中查看是否有相同Unicode编码的字符串常量。如果有将str1指向该常量,如果没有则创建一个内容为”str1”的字符串常量,将str1的引用指向该常量。 3、 如果str1进行了赋值str1= “123”,则栈中的str1的引用指向新的内容为“123”的字符串常量。 4、 String str1 = “str1”; String str2 = “str1”;str2的引用指向常量池中已经存在的内容为“str1”的常量,不会重新创建新的常量,str1和str2的引用指向同一个常量。 str1 == str2; str1+”a” != str2+”a”; String str1 = new String(“str1”): 1、 在常量池中创建内容为“str1”的对象,在堆中创建内容为“str1”的对象。 2、 String str1 = new String(“str1”); String str2 = new String(“str1”);str2不会指向之前创建的对象,而是重新创建一个对象。 str1 != str2; |
9.如何将字符串反转?
package string; public class StringTest3 { public static void main(String[] args) { String s="abcdefg"; String s2=""; char[] cs=s.toCharArray(); for(int i=cs.length-1;i>=0;i--) { s2=s2+cs[i]; } System.out.println("对字符串进行反转操作后为:"+s2); StringBuffer sb=new StringBuffer("abcdefg"); StringBuffer sb2=sb.reverse(); System.out.println("对StringBuffer进行反转操作后为:"+sb2); } } |
10.String 类的常用方法都有那些?
常用方法 equalsIgnoreCase();//无视大小写比较 toLowerCase(); //变小写 toUpperCase(); //变大写 trim();//去掉字符串两端的空格 concat();//连接字符串,和+一样(任何基本类型+""都是字符串类型) replaceAll("原子串","新子串") //把原内容全部替换成新内容 其他方法 public int indexOf(String value)//搜索第一个出现子串value的地方,找不到返回-1(字符串中空格也算位置,几个空格几个位置) public int lastIndexof(String value)//搜索最后一个出现子串value的地方,找不到返回-1 public String substring(int index)//从index开始截取到末尾(注意string的s是小写) public String substring(int beginindex,int endindex)//从beginindex截取到endindex(包含起始位置,不包含结束为止) public String[] split(String regex); //拆分字符串byte[] getBytes() //将字符串打散成一个字节数组 |
11.抽象类必须要有抽象方法吗?(重点)
抽象类可以没有抽象方法,但是如果你的一个类已经声明成了抽象类,即使这个类中没有抽象方法,它也不能再实例化,即不能直接构造一个该类的对象。 如果一个类中有了一个抽象方法,那么这个类必须声明为抽象类,否则编译通不过。 |
12.普通类和抽象类有哪些区别?(理解性记忆,漫画形式)
13.抽象类能使用 final 修饰吗?
不能的,final是最终类 是不能被继承的。 而 抽象类 abstract 是必须被继承的才有其意义的。 所以不行。 |
14.接口和抽象类有什么区别?
1、 接口是抽象类的变体,接口比抽象类更加抽象,接口中所有的方法都是抽象的。 2、每个类只能继承一个抽象类,但是可以实现多个接口。 3、抽象类中不一定都是抽象方法,抽象的而抽象类可以实现部分方法。但是接口中方法必须为public修饰的、抽象的不能实现具体的法。 4、接口中基本数据类型为static而抽象类不是的。 |
什么是接口? 什么是抽象类?
都不能被直接实例化,都可以通过继承实现其抽象方法。 不同点 接口支持多继承;抽象类不能实现多继承。 |
15.Java 中 IO 流分为几种?
Java中IO流分成两大类,一种是输入流,所有的输入流都直接或间接继承自InputStream抽象类,输入流作为数据的来源,我们可以通过输入流的read方法读取字节数据;另一种是输出流,所有的输出流都直接或间接继承自OutputStream抽象类,输出流接收数据,可以通过write方法写入字节数据。在Java的IO流类中,大部分的输入流和输出流都是成对存在的,即如果存在XXXInputStream,那么就存在XXXOutputStream,反之亦然。(SequenceInputStream和StringBufferInputStream是特例,没有对应的SequenceOutputStream类和StringBufferOutputStream类,稍后会解释)。许多IO操作都可能会抛出IOException异常,比如read、write、close操作。 https://blog.csdn.net/iispring/article/details/46821033 |
16.BIO、NIO、AIO 有什么区别?
https://blog.csdn.net/qq_24693837/article/details/70335491 |
17.Files的常用方法都有哪些?
https://blog.csdn.net/Myair_AC/article/details/77199359 |