1、Java的基本数据类型
引用:https://blog.csdn.net/Frank_Adam/article/details/79487873
1)基本数据类型:
整数型:byte,short,int(默认),long
字符型:char
浮点型:float,double(默认)
布尔型:boolean
Float和long类型必须加后缀:float a=3.5f、long b = 95l
类型 | 位数 | 字节数 |
---|---|---|
short | 2 | 16 |
int | 4 | 32 |
long | 8 | 64 |
float | 4 | 32 |
double | 8 | 64 |
char | 2 | 16 |
基本数据类型不是对象,为了使其成为对象便于调用包装类中封装好的方法,可以通过装箱的方式让其成为对象。
引用:https://blog.csdn.net/yudongy2008/article/details/6045478
原始类型:boolean,char,byte,short,int,long,float,double
包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
2)String是引用类型不属于基本类型
String 被声明为 final,因此它不可被继承。
在 Java 8 中,String 内部使用 char 数组存储数据。
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
}
在 Java 9 之后,String 类的实现改用 byte 数组存储字符串,同时使用 coder
来标识使用了哪种编码。
数组被声明为 final,可以保证 String 不可变。
String, StringBuffer and StringBuilder
1. 可变性
- String 不可变
- StringBuffer 和 StringBuilder 可变
2. 线程安全
- String 不可变,因此是线程安全的
- StringBuilder 不是线程安全的
- StringBuffer 是线程安全的,内部使用 synchronized 进行同步
字符串常量池(String Pool)保存着所有字符串字面量(literal strings),这些字面量在编译时期就确定。不仅如此,还可以使用 String 的 intern() 方法在运行过程中将字符串添加到 String Pool 中。
栈内存和堆内存、“==”和equals()的区别
https://blog.csdn.net/sinat_41144773/article/details/89742329
2、面向对象的三大特性
https://blog.csdn.net/sinat_41144773/article/details/92429243
封装:封装可以使类具有独立性和隔离性;保证类的高内聚。只暴露给类外部或者子类必须的属性和操作。类封装的实现依赖类的修饰符(public、protected和private等)
继承:对现有类的一种复用机制。一个类如果继承现有的类,则这个类将拥有被继承类的所有非私有特性(属性和操作)。这里指的继承包含:类的继承和接口的实现。
多态:多态是在继承的基础上实现的。多态的三个要素:继承、重写和父类引用指向子类对象。父类引用指向不同的子类对象时,调用相同的方法,呈现出不同的行为;就是类多态特性。多态可以分成编译时多态和运行时多态。
3、Java关键字: final、static、this.....
引用:https://blog.csdn.net/topdeveloperr/article/details/81414318
final
- 修饰变量时,表示变量只能一次赋值以后值不能被修改(常量)
- 修饰方法时,方法不能被重写(Override)
- 修饰类时,类不能被继承。
static
引用:https://blog.csdn.net/kuangay/article/details/81485324
- 随着类的加载而加载。也就是说:静态会随着类的消失而消失。说明它的生命周期最长。
- 优先于对象存在。静态是先存在的,对象是后存在的
- 可以直接被类名调用
this
- this调用本类中的属性,也就是类中的成员变量
- this调用本类中的其他方法;
- this调用本类中的其他构造方法,调用时要放在构造方法的首行。
4、Java创建数组的3种方式
引用:https://blog.csdn.net/Frank_Adam/article/details/79487873
int[] arr1 = {1,2,3,4}; //正确
int[] arr2 = new int[4]; //正确
int[] arr3 = new int[]{1,2,3,4}; //正确
int[] arr4 = new int[4]{1,2,3,4};s //错误,编译不通过
数组的特性:
如果数组越界,报ArrayIndexOutOfBoundsException错误(特别常见)
如果不对数组指定初值,默认初始化为相应数据类型的默认值。
多维数组,嵌套中括号即可。
5、Arraylist和Linkedlist的区别
引用:https://blog.csdn.net/qq_28289405/article/details/82344310
Arraylist源码分析:https://blog.csdn.net/mazhimazh/article/details/19543911
-
ArrayList是实现了基于动态数组的数据结构,而LinkedList是基于链表的数据结构
-
对于随机访问get和set,ArrayList要优于LinkedList,LinkedList不支持高效的随机访问
-
ArrayList适合查找,LinkedList适合任意位置增删
LinkedList
1. 概览
基于双向链表实现,使用 Node 存储链表节点信息。
private static class Node<E> {
E item;
Node<E> next;
Node<E> prev;
}
每个链表存储了 first 和 last 指针:
transient Node<E> first;
transient Node<E> last;
6、&和&&的区别
&&和&都是表示与,区别是&&(短路与)只要第一个条件不满足,后面条件就不再判断。而&要对所有的条件都进行判断。
||和|都是表示“或”,区别是||(短路或)只要满足第一个条件,后面的条件就不再判断,而|要对所有的条件进行判断。
7、接口和抽象类
引用:https://blog.csdn.net/qq_33253647/article/details/78052767
接口:
1.接口的定义为的关键字为interface
2.接口中只能有方法和变量,变量为public static final类型,方法只能被可以为public(默认)和protected修饰,方法不能有具体的实现
3.一个类可以实现多个接口
4.一个类实现接口,必须要实现接口的所有的方法
抽象类:
1.抽象类必须用 abstract修饰
2.如果一个类有abstract方法,这个类一定是抽象类
3.抽象类不一定有抽象方法
4.抽象类可以有自己的变量
5.如果一个类如果继承一个抽象类,如果没有实现所有的抽象方法,那它也要为抽象类
8、转发(forward)和重定向(redirect)的区别
redirect :显示新的URL forward:地址栏不变
redirect:不能可以共享request里面的数据 forward:可以共享
redirect:请求两次 forward:是一次
9、泛型
引用:http://www.importnew.com/24029.html
https://blog.csdn.net/lonelyroamer/article/details/7864531
泛型是JDK 1.5的一项新特性,它的本质是参数化类型(Parameterized Type)的应用,也就是说所操作的数据类型被指定为一个参数,在用到的时候在指定具体的类型。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口和泛型方法。
10、equals和== 、equals和hashcode的关系
https://blog.csdn.net/sinat_41144773/article/details/92430263
==用于比较引用类型和比较基本数据类型时具有不同的功能:
比较基本数据类型,如果两个值相同,则结果为true
而在比较引用时,如果引用指向内存中的同一对象,结果为true
未完。。。