JVM JRE和JDK的关系
什么是跨平台性?原理是什么?
java编写的程序,一次编译,多个系统平台运行。
只要该系统可以安装的响应的java虚拟机,该系统就可以运行java。
Java语言特点
简单易学(近似C++)
面向对象(封装--继承--多态)
平台无关性(Java虚拟机实现)
支持网络编程(Java简化网络编程设计)
多线程(同一时间并行执行多项任务)
健壮性(Java将类型机制 异常处理 垃圾自动收集等)
安全性
字节码
Java源代码经过虚拟机编译器编译后产生的文件(.class文件),只面向虚拟机,变相任何特定处理器。
数据类型
八大基本类型
数值型:
整数类型(byte,short,int,long)
浮点型(float,double)
字符型:char
布尔型:boolean
注释
分类:
单行注释:// 多行注释:/* */ 文档注释:/** */
访问修饰符
运算符
&和&&的区别
&运算符符两种用法:按位与; 逻辑与
&&运算符是短路与。
二者都要求运算符左右两端都为true 整个表达式才是true。
&&左边表达式的值是false,右边的表达式会被直接短路掉,不进行运算。
final有什么用?
用于修饰类,属性和方法
被final修饰的类不可以被继承,方法不可以被重写,变量不可以被改变
被final修饰不可变的是变量的引用,而不是引用指向的内容,引用指向的内容可以改变。
关键字
this关键字用法
this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。
1.普通的直接引用,this相当于是指向当前对象本身。
2.形参与成员名字重名,用this来区分
public Person(String name,int age){
this.name = name;
this.age =age;
}
3.引用本类的构造函数
class Person{
private String name;
private int age;
public Person(){
}
public Person(String name){
this.name = name;
}
public Person(String name,int age){
this(name);
this.age = age;
}
}
super关键字的用法
1.普通的直接引用
2.子类中的成员变量或方法与父类中的成员变量或方法同名时,用super进行区分
3.引用分类构造函数
super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句)
this(参数):调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)
this与super的区别
super:它引用当前对象的直接父类中的成员。(super.变量名 super.成员幻术据名(实参)) this:它代表当前对象名()用this来指明当前对象;如果函数的形参与林中的成员数据同名,这是需用this来指明成员变量名。
super()在子类中调用父类的构造方法,this()在本类内调用本类的其它构造方法。
super和this需放在构造方法内第一行。
this和super不能同事出现在一个构造函数里面,同意构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
this和super都指的是对象,均不可以在static环境中使用。包括static变量,static方法,static语句块。
本质上,this是指向本对象的指针,然而super是一个Java关键字
static
被static修饰的变量或者方法 不属于任何一个实例对象,而是被类的实例对象所共享。
static应用场景:
1、修饰成员变量
2、修饰成员方法
3、静态代码块
4、修饰类【只能修饰内部类也就是静态内部类】
5、静态导包
static注意事项:
1.静态只能访问静态 2.非静态即可以访问非静态的,也可以访问静态的。
面向对象
优点:易维护,易复用,易扩展,可以设计低耦合的系统,灵活,易于维护
缺点:性能比面向过程低
面向对象三大特性
封装 继承 多态
封装:隐藏对象的属性和实现细节,对外提供公共访问方式,提高复用性,安全性
继承:提高代码复用性,继承是多态的前提。
多态:提高程序扩展性。在Java中两种实现多态的方法:继承(多个子类同一方法进行重写)和接口(实现接口并覆盖接口中同一方法)
Java实现多.多态三个表要条件:继承,重写,.向上转型
抽象类能使用final修饰吗
不能,抽象类是让其他类继承的,如果定义为final该类就不能被继承,会彼此矛盾
变量与方法
成员变量:方法外部,类内部定义的变量
局部变量: 类的方法中的变量
储存位置:
成员变量:随着对象的创建而存在,随着对象消失而消失。储存在堆中。
局部变量:方法调用完,语句结束后,自动释放。储存在栈中。
作用域:
成员变量:针对整个类有效
局部变量:只在某个范围内有效(语句体内)
生命周期:
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:当方法调用完,或者语句结束后,就自动释放
初始值:
成员变量:有默认初始值
局部变量:没有默认初始值,使用前必须赋值
构造方法特性
名字与类名相同;
没有返回值,但不能用void声明构造函数;
生成类的对象时自动执行,无需调用。
返回值
方法的返回值是指我们获取到的某个方法体中的代码执行后产生的结果!(前提是该方法可能产生结果)。
返回值的作用:接收出结果,是的他可以进行其他操作!
内部类
分为四种:成员内部类,局部内部类,匿名内部类,静态内部类
重写与重载
构造器是否可被重写
构造器不能被继承,因此不能被重写,但可以被重载。
重载和重写的区别
重载:发生在同一类中,方法名相同参数列表不同(参数类型不同,个数不同,顺序不同),与方法返回值和访问修饰符无关
重写:发生在父子类中,方法名,参数列表必须相同,返回值小于等于父类,跑出的异常小于等于父类,访问修饰符大于等于父类;
注意:父类方法访问修饰符为private则子类中就不是重写。
==和equals的区别
==:判断两个对象是不是同一个对象。(地址值是否相同)
equals:它的作用也是判断两个对象是否相等。
说明:
String中的equals方法是被重写过得,object中的equals方法是比较的对象内存地址,而String的equals方法比较的是对象的值
hashCode与equals(重要)
为什么重写equals时必须重写hashCode方法?
hashCode()的默认行为是对堆上的对象产生独特值。如果没有重写hashCode(),则该class的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)
IO流
Java中IO流分为几种?
按照流向分:可以分为输入流和输出流;
按照操作单元划分:可以划分为字节流和字符流;
按照流的角色划分:节点流和处理流。
按操作对象分类结构图:
BIO,NIO,AIO有什么区别
BIO:Block IO 同步阻塞式IO,模式简单方便,并发处理能力低
NIO:Non IO同步非阻塞IO,是传统IO的升级,客户端和服务器端通过Channel(通道)通讯,实现了多路复用。
AIO:Asynchronous IO 是NIO的升级,实现异步非堵塞IO,异步IO的操作基于事件和回调机制。
反射
Java反射机制是在运行状态中,对任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意一个方法和属性;
这种动态获取的信息一局动态调用对象的方法的功能称为java语言的反射机制。
静态编译:在编译时确定类型,绑定对象
动态编译:运行时确定类型,绑定对象
反射机制优缺点:
优点:运行期类型的;判断,动态加载类,提高代码灵活度
缺点:性能瓶颈:反射相当一一系列解释操作,通知JVM要做的事情,性能比直接的java代码要慢的很多。
反射机制应用场景:
反射是框架设计的灵魂。例如模块化开发,通过反射去调用对应的字节码;动态代理设计模式也采用反射机制,还有Spring/Hibernate等框架也大量使用到了反射机制。
Java获取反射的三种方法
1.通过new对象实现反射机制
2.通过路径实现反射机制
3.通过类名实现反射机制