3.1、idea
3.11、idea常用快捷键
- Ctrl-N 再键入类的名字可以快速地在编辑器里打开任何一个类
- Ctrl-Shift-N 打开工程中的普通文件
- Ctrl-D 复制当前行
- Ctrl-Y 删除当前行
- Ctrl-F 查找
- Ctrl-R 替换
- Ctrl+P 显示方法的参数信息
- Ctrl+Alt+V 自动创建变量
- Ctrl+Alt+L 格式化代码
- ALT+INSERT 生成get/set
3.12、idea常见问题
-
idea项目所需要的依赖下载过程中,有下载动作,但是下载失败
-
有下载动作
-
下载失败
-
原因
- 在依赖坐标没有错误的情况下,一般是网速导致的。
-
解决办法
- 反复重试,或到本地仓库将临时文件删除再试。一般在公司开发网速正常很少碰到。
-
-
idea项目所需要的依赖下载过程中,无下载动作,直接下载失败
- 解决办法
- 一般是当前idea版本和所使用的maven版本不兼容导致的,可尝试更换maven版本。
- 解决办法
3.2、Java
3.2.1、Java中的基本数据类型
自从Java发布以来,基本数据类型就是Java语言的一部分,分别是byte, short, int, long, char, float, double, boolean.
整型:byte, short, int, long
字符型:char
浮点型:float, double
布尔型:boolean
3.2.1.1、整形
Java中最小的计算单元为字节,1字节=8位(bit),Java中整型数据属于有符号数,即第一个bit位为0表示正整数,第一个bit位为1表示负整数。
- byte
- byte属于Java中的整型,长度为1字节8bit,取值10000000(-128)到 01111111(127),变量初始化默认值为0,包装类Byte.
- short
- short属于Java中的整型,长度为2字节16bit,取值10000000 00000000(-32768)到 01111111 11111111(32767),变量初始化默认值为0,包装类Short.
- int
- int属于Java中的整型,长度为4字节32bit,取值-2^31 (-2,147,483,648)到 2^31-1(2,147,483,647),变量初始化默认值为0,包装类Integer
- long
- long属于Java中的整型,长度为8字节64bit,取值-2^63 (-9,223,372,036,854,775,808)到 2^63-1(9,223,372,036,854,775,8087),变量初始化默认值为0或0L,包装类Long
3.2.1.2、浮点型
- float
- float属于Java中的浮点型,也叫单精度浮点型,长度为4字节32bit,变量初始化默认值0.0f,包装类Float
- double
- double属于Java中的浮点型,也叫双精度浮点型,长度为8字节64bit,变量初始化默认值0.0d,包装类Double
3.2.1.3、字符型
- char
- char属于java中的字符型,占2字节16bit,可以赋值单字符以及整型数值, 变量初始化无默认值,包装类Character。
3.2.1.4、布尔型
- boolean
- 在JVM中并没有提供boolean专用的字节码指令,而boolean类型数据在经过编译后在JVM中会通过int类型来表示,此时boolean数据4字节32位,而boolean数组将会被编码成Java虚拟机的byte数组,此时每个boolean数据1字节占8bit.
3.2.2、String、Stringbulider、StringBuffer
String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一下String、StringBuilder和StringBuffer这几个类,分析它们的异同点以及了解各个类适用的场景。
String能被继承吗?为什么?
不可以,因为String类有final修饰符,而final修饰的类是不能被继承的,实现细节不允许改变。平常我们定义的String str=”abc”(直接赋一个字面量);其实和String str=new String(“abc”)(通过构造器构造)还是有差异的。
- String str="hello world"和String str=new String(“hello world”) 的区别?
想必大家对上面2个语句都不陌生,在平时写代码的过程中也经常遇到,那么它们到底有什么区别和联系呢?
public class Main {
public static void main(String[] args) {
String str1 = "hello world";
String str2 = new String("hello world");
String str3 = "hello world";
String str4 = new String("hello world");
System.out.println(str1==str2);
System.out.println(str1==str3);
System.out.println(str2==str4);
}
}
这段代码的输出结果为:
这个结果和你的答案是一致的吗?为什么是这样的结果呢?
String str1 = “hello world”;和String str3 = “hello world”; 都在编译期间生成了 字面常量和符号引用,运行期间字面常量"hello world"被存储在运行时常量池(当然只保存了一份)。通过这种方式来将String对象跟引用绑定的话,JVM执行引擎会先在运行时常量池查找是否存在相同的字面常量,如果存在,则直接将引用指向已经存在的字面常量;否则在运行时常量池开辟一个空间来存储该字面常量,并将引用指向该字面常量。
通过new关键字来生成对象是在堆区进行的,而在堆区进行对象生成的过程是不会去检测该对象是否已经存在的。因此通过new来创建对象,创建出的一定是不同的对象。
-
String、StringBuffer以及StringBuilder的区别?
既然在Java中已经存在了String类,那为什么还需要StringBuilder和StringBuffer类呢?一起来看下面的代码
public class Main {
public static void main(String[] args) { String string = ""; for(int i=0;i<10000;i++){ string += "hello"; } }
}
以上代码在底层,每次循环会new出一个StringBuilder对象,然后进行append操作,最后通过toString方法返回String对象。也就是说这个循环执行完毕new出了10000个对象,试想一下,如果这些对象没有被回收,会造成多大的内存资源浪费。
-
再看下面这段代码:
public class Main {
public static void main(String[] a