环境配置
JRE:Java运行环境,保护JVM和运行所需核心库
JDK:开发工具包
JDK8下载路径:https://www.oracle.com/java/technologies/downloads/#java8-windows
IDEA技巧
IDEA常用快捷键
快捷循环:5.fori
shift+F6:改变一个变量使用到的所有位置。
基本语法
- 编译命令:javac
- 标识符不能是关键词、不能以数字开头
- 类名:大驼峰(每个单词首字母大写) 变量名、方法名:小驼峰(第一个单词首字母小写,其他大写)
- 常量分类:字符串常量、整数、浮点数、字符(单个中文也是字符)、布尔常量、空常量(null)
- 对于byte char short 如果右侧赋值没超过范围,编译器会自动补上强转。
- 给变量赋值的时候,右侧是常量运算,会直接得到结果。编译器常量优化
- 方法的重载(overload):多个方法名称相同,参数列表不一样(参数个数不同、类型不同、多类型顺序不同),与返回值无关
数组
- 数组是一种引用类型数据,长度不可变,类型统一。
- 直接打印数组名称输出的是数组内存地址的哈希值
- 动态初始化数组规则:如果是整数,则是0;浮点:0.0;字符型:‘/u0000’;布尔类型:false;引用类型:null;
- Java内存划分为5部分:
(1)栈(stack):存放的是方法中的局部变量,参数或者方法内的变量。方法的运行一定在栈中。
(2)堆(heap):凡是new出来的都在堆里。堆内存中都有地址值,数据都有默认值(具体如第10条)
(3)方法区(method area):存储.class相关信息,包括方法的信息。
(4)本地方法栈(native method stack):与操作系统有关。
(5)寄存器(pc register):与cpu相关
输组内存图
- A数组赋值给B数组,对B数组修改的时候,A数组也是会改变。实际上两个变量指向同一内存地址。
- 数组必须进行new初始化,才能使用其中的元素。如果只赋值了null,没有new,就会发生空指针异常。
- 数组作为方法的参数时,传入的是数组的地址值。
- 字符串特点:内容不变;可以共享使用;底层原理是byte[]字节数组。
- 双引号写的常量,在常量池中;new的不在常量池中。
- 基本数据类型:==是数值比较;引用类型:==是地址比较;
- 使用equals比较字符串推荐常量写在前面,如:“abc”…equals(b)。避免变量出现空指针异常。
类
- static关键词:只在本类保存一次,所有本类对象共享
- 静态方法属于类;可以通过类名调用;本类静态方法可以直接省略类名;
- 静态不能访问非静态,因为内存中先有静态内容后有非静态内容;
- 静态代码块:当类第一次被调用时候执行,执行唯一一次;静态代码块先与非静态执行
- java.util.Math常用类:ceil 向上取整;floor向下取整;
- 继承:通过子类 访问成员变量,用哪个类创建就优先用谁的变量,没有则向上找;通过成员方法访问成员变量,方法属于哪个类就优先调用谁,没有就向上找。
- 方法重写,子类父类方法名字和参数需一样;@Override修饰可以检测是否有效重写;
- 方法重写:子类返回值必须小于等于父类方法的返回值范围;子类方法权限必须大于等于父类方法的权限修饰符;public > protected > (default) > private
- 子类构造方法默认有super(),先调用父类构造方法;只有子类构造能调用父类构造方法;一个子类构造不能多次调用多次super构造;子类 必须调用父类构造,只能写一个且需写在第一个。
- 抽象类不能直接创建对象;需要用子类继承,子类需要重写所有父类的抽象方法。
- 接口中的抽象方法修饰符必须是public abstract ;接口不能直接使用,必须有一个实现类;实现类必须重写全部接口中的抽象方法(实现类名最后是接口名+impl),否则就是抽象类
- Java8 接口允许有默认方法,默认方法可以有方法体;public default 返回值 类名 参数{};可以解决接口升级的问题;默认方法可以被实现类重写
- Java8接口允许有静态方法,不能通过实现类去调用接口静态方法,使用接口名直接调用
- Java9接口允许私有方法。普通私有方法:解决多个默认方法之间的重复问题;静态私有方法:解决多个静态方法之间重复问题。
- Java9接口允许定义常量,必须使用public static final 修饰,不可改变,必须赋值。名字必须是完全 大写字母,下划线分割。
- 接口没有静态代码块、构造方法。一个类可以实现多个接口:implement A,B
- 对象的向上转型是安全的。(猫转向动物类)但转型后就不能调用子类独有的方法。***************************
- 对象的向下转型是还原,格式:子类名 对象名 = (子类名)父类实例名;instanceof 方法可以判断前面对象是否是后面类型的实例。***********
- 多态,编译看左边,运行看右边。
- final修饰的类不能有子类;修饰的方法不能被重写;修饰的局部变量不能更改;修饰的成员变量不能更改,必须手动赋值。
- 内部类作用范围类似成员变量。内部类可以访问外部类成员,外部类不可访问内部类成员。
- 包装类:把基本数据类型包装成类;装箱可以用构造方法,拆箱用成员方法 **Value()
- 自动装箱:Intger in = 1;in = in+1; in本是包装类无法直接运算,可自动转变为基本数据类型,这是自动拆箱。
集合collection
- ArrayList可以存储基本类型和引用类型,长度固定;collection只能引用类型,长度可变
- List接口:有序集合、允许存储重复元素、有索引
Vector集合:
ArrayList集合:
LinkList集合:
Set接口:不允许存储重复元素、无索引(不能for遍历)
TreeSet集合:
HashSet集合:
LinkHashSet集合: - collection接口是抽出的List、Set集合,无索引方法。
- 增强for循环 for(数据类型 变量名:集合名/数组名)
- 泛型:E表示未知的类型。使用时会把数据类型传递给E
- 创建对象集合使用泛型:避免类型转换的麻烦;把运行的异常提前到编译器期。
- 时间格式重写
SimpleDateFormat simp = new SimpleDateFormat("yyyy mm dd hh mm ss"); String s = simp.format(time);
- 异常:抛出异常,格式:throw new **Exception();对参数合法性校验使用
- 异常处理方式1:throws。在方法声明时使用,在参数列表后加 throws **Exception。如果方法内部需要抛出多种异常,声明时也需要声明多个异常对象,若异常有子父类关系,则声明父类即可。如果调用的方法还有异常就继续声明异常,然后交给JVM处理(中断程序)
10.异常处理方式2:try catch