1、首先java具有良好的平台移植性,java通过编译生成的.class文件支持多平台允许,JVM对不同系统有具体的实现,不同平台均可运行字节码
2、面向对象的编程语言,拥有封装继承和多态
3、避免了C++中指针等概念,简单易用
4、java提供了垃圾回收,开发人员不需要随时对占用的内存进行回收,jvm底层的垃圾回收机制会自动处理
5、丰富的框架,包括spring,mybatis等
基本数据类型:byte,short,int,long, float,double, char ,boolean,
string不是java的基本数据类型
基本数据类型,被声明之后会立刻在栈上分配内存空间
引用数据类型:除基本数据类型之外都是引用类型,包括String,数组,类,接口,
引用数据变量在声明的时候不会分配内存空间,只是存储了一个内存地址
1、抽象类本质上是类,有构造函数,而接口没有
2、抽象类可以被继承,接口可以实现,只能继承一个抽象类,接口可以实现多个
3、抽象类中可以有方法的具体实现,而接口中只能存在抽象方法
4、接口只能定义静态常量,不能定义普通成员变量
5、接口不能包含初始化块,抽象类中可以
1、final关键字修饰的是不能被修改的
2、final修饰的类是不能被继承的
3、final修饰的方法不能被重写
4、final修饰的变量不能改
5、final修饰引用类型不能变,但是引用对象的内容可以变
1、java类成员包含成员变量,方法,构造函数,代码块和内部类,
2、static不能修饰构造函数
3、static声明的方法和成员变量,在类加载的时候加载,属于类,所以static声明的内容优先与对象存在,静态内容不能访问非静态内容,非静态内容可以访问静态内容(类成员不能访问实例成员)
1、String是字符串,一但声明不能更改,如果更改了,就是另外一个字符串
2、底层是char的数组
3、StringBuilder 线程不安全,但是效率高和StringBuffer 线程安全
4、String类是用final修饰的,所以不能被继承
5、String的new有两种方式,一个是直接使用字符串创建,(直接使用字符串常量池管理字符串)二个是使用new String(“d s”),(先在字符串常量池里面管理字符串,再String构造器生成String对象,并保存至堆中)
6、String的常用方法:charAt,split,trim,subString
== 基本数据类型比较的是值,引用数据类型比较的是地址
equals没有重写时,比较的是两个对象的内存地址是否一致,重写之后按照对象的内容进行比较
1、hashcode主要用来计算hashcode
2、equals主要用来比较两个对象是否相等
3、两者之间有约定,equals判断相等时,hashcode一定相等,而hashcode相等时,equals不一定相等
4、对象的equals方法继承于objects,原始的equals方法比较的是内存地址,而我们实际使用中,通常需要比较的是对象的值是否相等,因此需要重写equals,为了满足约定,重写equals时也需要重写hashcode
1、lambda表达式,运行函数作为方法的参数
2、streamAPI
3、DatetimeApi
4、方法引用
1、java有8中基本数据类型byte,short,int,long,float,double,char,boolean
2、对应的包装类,Byte,Short,long,Int,Float,Double,Char,Boolean
3、从基本数据类型变成包装类叫自动装箱,反过来是自动拆箱
4、通过自动装箱和拆箱简化了基本数据类型和包装类之间的转换
1、java的异常都继承于Throwable
2、主要分为exception和error
3、exception是程序本身可以处理的异常:包括CheckedException(需要捕获)和UncheckedException(无需捕获)
4、CheckedException通常有IOException
5、UncheckedException通常NullPointerException
6、error是程序本身不可以处理的错误,通常有OutOfMemory
7、CheckedException需要try()catch()finally
8、try用来执行代码,catch用来捕获异常,finally用来关闭资源
9、finally一定会执行,除非碰到线程被interrupter或者system.exit(1)
10、如果fnally中有return语句会覆盖掉trycatch中的return语句
1、重载是同一个类中,存在名字一样,参数类型或数量的不一样的函数,重载与方法的返回值和访问修饰符无关
2、重写是在父子类之间,存在名字一样,参数列表也一样的函数,返回对象要是父类返回对象的子类或类型一致;访问修饰符要大于等于父类方法
3、构造方法不能重写,构造方法要求与类名一致,而父类的构造方法与父类类名一致,如果对构造方法重写,那么构造出来的就不是子类了
1、泛型是类型参数化
2、java早期是没有泛型的,在泛型之前,为了实现泛型编程,通过继承实现的,通过继承Object类实现泛型编程,但是存在安全性和强制类型转换的问题,因此提出了泛型在编译时进行类型安全检查,强制转换自动或隐式的
3、泛型擦除就是java在编译阶段会将类型信息擦除,JVM处理.class文件时是没有类型信息的
1、反射是在编译器不知道类的属性和方法,在运行期间获得类的属性和方法
2、通常通过对象.getClass;类.class;Class.forName(“”)获取class对象
3、通过反射可以通过代理的模式实现对象的创建,降低耦合
4、常用场景AOP中的动态代理使用到了反射机制,使用xml进行配置管理,使用了反射机制将配置文件实例化