Java的特点与优点
Java是面向对象的,与C++相比去除了指针的概念,而且是单继承。
Java拥有平台独立性,可以做到一次编译到处运行,因为通过编译器将.java文件编译成class文件
Java具有垃圾回收机制、异常检测机制、数组越界检查等。数组越界检查可以避免访问到其它位置数据
Java的基本数据类型与引用数据类型
8 种基本数据类型
整数型 : byte(1个字节 - 2^7 ~ 2^7-1)、short(2个字节 - 2^15 ~ 2 ^15-1)、int(4个字节 -2^31 ~2^31-1)、long(8个字节 -2^63 ~ 2^63 -1)
浮点型:float(4个字节)、double(8个字节)
字符型: char(2个字节)
boolean
引用数据类型
数组、String、类
抽象类与接口的区别
共同点
都不能被实例化,都可以有抽象方法,继承或实现抽象类与接口的子类都要对抽象方法进行实现
不同点
抽象类中有构造方法,而接口中没有构造方法
抽象类中可以定义成员变量而接口中只有静态常量
抽象类中可以包含普通方法,而接口中只有抽象方法
抽象类被使用时只能单继承,而接口可以多实现
抽象类中的方法范围可以是private、public等而接口中只有public
使用场景
接口是对动作的抽象,抽象类是对根源的抽象
抽象类表示的是这个对象是什么,而接口表示的是这个对象能做什么
final关键字
final关键字可以修饰类、方法、变量
final修饰类时,该类不能被继承
final修饰方法时,该方法不能被修改
final修饰基本数据类型时,一旦被赋值就不能被修改
final修饰类变量时,类的地址不能变但是类中的数据可以修改
static关键字
static可以修饰成员变量、方法、初始化块、内部类。static修饰的成员被称为类成员,类成员无法访问实例成员,因为类成员属于类,类成员的范围比实例成员的作用域更大,很容易出现类成员初始化完成时但实例成员还没有被初始化,这时如果类成员访问实例成员就会引起错误。static修饰的成员会优先于对象存在,静态方法中没有this因为静态方法是和类同时被加载,而this是随着对象的创建而存在的
String s1 = “abc” 与 new String(“abc”)的区别
String s1 = "abc"是直接在字符串常量池中创建,而使用new String(“abc”)则会现在常量池中创建一个,然后new 一个新的String对象放到堆中,所以使用new则会创建两个对象,占用更多的内存
== 与 equals()区别
== 如果基本数据类型比较那么就是比较的他们的值相等,如果是引用数据类型那么比较的就是地址是否相等
equals是用来比较引用数据类型的,如果没有重写equals方法,默认比较使用的是 ==
String、StringBuffer、StringBuilder的区别
String是不可变字符串,StringBuffer与StringBuilder是可变字符串
String是使用final修饰的char数组,而后两个没有被final修饰
StringBuffer与StringBuilder相比,StringBuffer更加安全因为加了synchronized锁
性能上StringBuilder快于StringBuffer,安全上低于StringBuffer
建议
操作少量数据的时候使用String
操作数据较多但是是单线程使用StringBuilder
操作数据较多但是是多线程就使用StringBuffer
hashCode()与equals()
hashCode()与equals()中有个约束,如果两个对象相等那么hashCode就要相等,如果hashCode相等,两个对象不一定相等
Java8新特性
函数式接口
一个接口里面只有一个方法
消费型接口 – void accept(T t)
供给型接口 – T get()
函数型接口 – R apply(T t)
断言型接口 – boolean test(T t)
Lambda表达式
Lambda是一个匿名函数,我们可以把Lambda表达式理解为一段可以传递的代码,使用它可以写出更简洁、更灵活的代码,Lambda表达式的类型依赖上下文环境,是由编译器推断出来的
Stream流
Stream是用来操作数据源(集合、数组)的
Stream流自己不会存储元素,不会改变源对象它会产生一个新的集合或值、strean是惰性求值的(在中间处理过程中,只对操作进行记录,并不会立即执行,只有等到执行终止操作的时候才会进行实际的计算)