JVM
JVM是java虚拟机,由于不同的客户端(如手机、笔记本、台式)有不同的芯片,同一段代码会被翻译成不同的机器指令,所以在没有JVM的时候,对于这些不同的客户端,需要编写不同的代码,就十分麻烦。那么我们可以通过JVM,达到编写一段代码,通过JVM处理,运行在不同客户端的效果。
JRE与JDK
快捷指令代码
可以在IDEA中查看
//main
public static void main(String[] args) {}
//sout
System.out.println();
IDEA常用快捷键
- CTRL+D:复制当前行
- CTRL+R:查找并替换
静态代码块
-
类的静态代码块
类的信息加载完成后,会自动执行,可以用于静态属性的初始化功能
class User{static{System.out.println("类的静态代码块执行")} }
-
对象的静态代码块
在对象创建时,自动执行,但不是静态的
class User{{System.out.println("对象的静态代码块执行")} }
包Package
为了管理众多的类,使得相同的类名被区分,java引进了包。
Import
为了不用每次在使用类时,在类前面加入很长的包名,java有了import机制,通过使用import即可将对应的类导入。这个import也不用手动写,在idea里面可以通过alt+enter直接添加。
如果要引入一个包的大量类,可以用通配符*号,比如
import java.util.*
继承
关键字:extends
super、this
子类继承父类,在子类里面,如果子类的成员和父类的成员同名。可以用super访问父类的成员,用this访问子类成员。比如
super.name;
this.name;
构造函数和继承
子类的构造函数,会自动调用super(),super()对应父类无参的构造函数。但如果父类没有无参的构造函数,那么子类的构造函数中就得在super()中加上对应的参数。
重载
重载是指,方法名相同,参数列表不同,和返回值类型无关。
比如构造函数就是经典的重载,构造函数有无参的,也有有参的。
重写
重写的一大作用是:父类是模板类,为了子类能够在具体的不同场景下体现不同的功能。
类的访问权限
在java中,public类只能有一个,且类名必须和文件名相同。这个类是公有的,可以被任何访问。
对于没有加public的类,就不能被其他包访问,其具有包权限。
访问权限分为四种:
- private:私有的,同一个类中可以使用
- (default):默认权限,当不设定任何权限时,JVM会提供默认权限,包(路径)权限,注意:子包不可访问。
- protected:受保护的权限,子类可以访问
- public:公共的,任意使用
final
final修饰的变量在初始化后就不能被修改
abstract
修饰抽象类
interface
接口
enum
枚举,是一个特殊的类
匿名类
匿名类的好处就是不用对抽象类每次都创建一个具体的类,比如下面这个例子,如果我不使用匿名类的话,那么我每遇见一个不同名字的人,那么我就要为这个人创建一个具体的类,十分麻烦。
abstract class Person24{public abstract String name();
}
class Me{public void sayHello(Person24 person24){System.out.println("hello" + person24.name());}
}me.sayHello(new Person24(){//这里就是匿名类public String name(){return "wangwu";}
});
object
object是所有类的父类,其有以下几个方法
- obj.toString():将对象转换成字符串
- obj.hashCode():获取对象的内存地址
- obj.equals():判断两个对象是否相等
- obj.getClass():获取对象的类型信息
包装类
由于基本数据类型,如int,double功能太单一,java提供了包装类,double就对应Double类,float就对应Float类。
异常
为了避免整个程序因为一个异常而直接中断,我们可以对异常进行处理,从而使整个程序顺利运行。
异常分为两类:
-
可以通过代码恢复正常逻辑执行的异常,称之为运行期异常:RuntimeException
-
不可以通过代码恢复正常逻辑执行的异常,称之为编译期异常:Exception
比如说在编译的时候,编译器就会提示你要抛出异常,这个就是编译器异常。
如果方法中可能出现问题,那么需要用throws抛出异常,但如果这个异常是运行期异常,编译器不会提示你去抛出或处理。
对于这个方法抛出的异常,调用此方法的对象则需要将这个异常继续抛出或者是进行异常处理。
自定义异常
有些异常java并没有提供,这个时候可以自定义一个异常。比如说登录的时候密码错误这个异常,java没有提供,那么我们可以自定义这样一个异常。
class LoginException extends RuntimeException{public LoginException(String message){super(message)}
}