Java 名词
变量, 运算符, 类, 接口, 枚举, 参数, 注解, 异常, 包装类, 多线程, 集合, IO 流, 网络编程, 反射, Lambda,API https://www.cnblogs.com/Open-ing/p/11892237.html
源文件:.java 文件, 存储 Java 源代码的文件
字节码文件:.class 文件, 由 Java 源代码编译后生成的. class 文件, 可以被 JVM 读取和执行的文件.
运行 Java 程序, 其实就是执行. class 字节码文件, 由 JVM 把字节码数据再转为二进制的机器指令执行.
数据类型
基本数据类型: 8 种, byte,short,int,long,float,double,char,boolean
引用数据类型: 类, 接口, 枚举, 数组, 注解
变量
变量根据数据类型的不同分为基本数据类型的变量和引用数据类型的变量.
变量根据声明位置不同分为成员变量和局部变量
(A)局部变量声明位置:
1方法的形参列表
2方法体 {} 中
3代码块 {} 中
成员变量声明位置: 类中, 方法和代码块外面, 按照是否有 static 修饰分为: 类变量(静态变量) 和 实例变量(非静态变量)
(B)内存存储的位置不同
局部变量: 栈
实例变量: 堆
类变量: 方法区
(C)生命周期
局部变量
每一个线程每一次调用都是一次新的生命周期
实例变量: 每一个对象的成员变量是独立的, 和对象的生命周期一致
类变量: 和类的生命周期一致
(D)作用域
局部变量: 作用域非常小, 从声明它的位置开始, 到它所属的}结束, 可能只属于某个 if,for, 方法等
类变量: 整个类中
实例变量: 整个类中除了静态方法和静态代码块中不能使用
(E)修饰符
局部变量: 唯一可以有的修饰符是 final
成员变量: 权限修饰符, static,final,....
运算符
整数与整数相除, 只保留整数部分
取模结果的正负号只看被模数
++/-- 在前的, 就先自增 / 自减, 后取值
++/-- 在后的, 就先取值, 后自增 / 自减
所有的赋值运算符的 = 左边一定是一个变量, 而且先算右边, 然后最后把值赋值给左边的变量
扩展赋值运算符 += 右边的计算结果的类型如果比左边的大的话会强制类型转换, 所以结果可能有风险.
比较表达式的运算结果一定只有 true/false
& 只有左右两边都为 true, 结果才为 true.
| 只要左右两边有一个为 true, 结果就为 true.
^ 只有左右两边不同, 结果才为 true.
! 布尔值取反
&& 它和逻辑与不同的是当 && 左边为 false 时, 右边就不看了.
|| 它和逻辑或不同的时当 || 左边为 true 时, 右边就不看了.
条件表达式 ? 结果表达式 1 : 结果表达式 2 // 为 true 返回 1, 否则返回 2
位运算符: 所有的位运算符的规则都是用数字的二进制补码形式进行运算的
<<左移动几位, 右边补 0. 左移几位就是乘以 2 的几次方
>> 右移动几位, 左边补 0 或 1, 看最高位. 右移几位就是除以 2 的几次方
>>> 右移动几位, 左边一律补 0
按位与:& 运算规则, 把两个数的二进制一一对应, 对应位按位与.
按位或:| 运算规则, 把两个数的二进制一一对应, 对应位按位或.
按位异或:^ 运算规则, 把两个数的二进制一一对应, 对应位按位或.
按位取反:~ 运算规则, 把某个数的二进制, 按位取反, 注意: 包括最高位也会取反, 这个和从原码到反码是不一样的.
优先级: 需要先计算的就用 () 括起来
对象 1 == 对象 2 // 比较的是地址, 而且对象 1 和对象 2 的类型要一致或者是父子类关系, 否则编译不通过
对象 instanceof 类型
只有当该对象属于这个类型才会返回 true, 而且要求该对象的编译时类型必须与要判断的类型一致或有父子类关系
引用数据类型的类型或对象, 可以通过 . 来访问属性, 方法等.
()用于强制类型转换或优先计算强制类型转换
流程: 解决问题的步骤
(1)顺序语句: 顺序结构
(2)分支语句: 选择其中一个分支执行
(3)循环语句: 重复执行某些代码
凡是有 [] 的都是数组
类(class)
使用 class 声明的类型都是类
[修饰符] class 类名 [extends 父类] [implements 父接口 n] {
}
类中可以包含 5 个部分:
(1)成员变量:
静态成员变量: 存储类共享数据
非静态成员变量: 存储对象独立数据
(2)成员方法: 完成功能
(3)构造器: 创建对象, 是实例初始化的一部分
(4)代码块:
静态代码块: 类初始化的一部分
非静态代码块: 实例初始化的一部分
(5)成员内部类 / 成员内部接口: 为外部类服务
接口(interface)
使用 interface 声明的类型都是接口
[修饰符] interface 接口 [extends 父接口们] {
}
接口中的成员有限制要求:
JDK1.8 之前:
(1)公共的静态的常量: public static final
(2)公共的抽象方法: public abstract
JDK1.8 之后, 增加了:
(3)公共的静态方法: public static
(4)公共的默认方法: public default
方法重写的要求
(1)修饰符:>= 父类权限
(2)返回值类型
基本数据类型和 void: 必须相同
引用数据类型:<= 父类类型
(3)方法名: 必须相同
(4) 形参列表: 必须相同
(5)抛出的异常类型:<= 父类类型
(6)被重写的方法不能是: static,final,private 等
枚举(enum)
使用 enum 声明的类型都是枚举
[修饰符] enum 枚举类型名 [implements 父接口们] {
}
枚举是一种特殊的类:
(1)枚举的首行必须是枚举的常量对象列表;
(2)枚举的构造器都是 private
(3)枚举的直接父类一定是 java.lang.Enum 类
参数
参数就是一种传递数据的方式, 所以参数就是一个变量, 具有特殊作用的特殊位置的变量.
和参数相关的几个名词:
(1)形参(formal parameter)
在声明方法时 () 中的参数
(2)实参(actual parameter)
在调用方法时 () 中的参数, 实参是给形参赋值的, 所以实参的个数, 类型, 顺序必须与形参一一对应.
(3)有参(has parameter)
声明方法时有形参列表, 调用方法时有实参列表
(4)无参(no parameter)
声明方法时没有形参列表, 调用方法时没有实参列表
(5)命令行参数(command line parameter/ arguments)
运行 main 时, 给 main 传的参数
java 类名 命令行参数 1 命令行参数 2 ....
(6)可变参数(variable parameter)
声明:
[修饰符] 返回值类型 方法名([非可变参数部分的形参列表,] 可变参数类型... args)throws 异常列表{
- for(int i=0; i<args.length; i++){ // 可变参数部分当做数组使用
- //...
- }
- }
(7)类型参数(type parameter,generic Type)
凡是代码中出现在 <> 中的类型, 就是类型参数.
(8)类型形参(type parameter)
在声明类 / 接口时声明的类型参数, 也称为泛型形参
[修饰符] class 类名 / 接口<类型形参列表>{}
[修饰符] class 类名 / 接口<类型形参 1 extends 父类上限 & 父接口上限>{}
在声明方法时声明的类型参数
[修饰符] <泛型形参列表> 返回值类型 方法名([数据形参列表] )[throws 异常列表] {}
[修饰符] <泛型形参 extends 父类上限 & 父接口上限> 返回值类型 方法名([数据形参列表] )[throws 异常列表] {}
(9)类型实参(type arguments)
在使用泛型类 / 接口时指定泛型类型的类型参数
在使用泛型方法时传给泛型类的变量会自动识别变量类型, 即为泛型方法实参
(10)传参(pass parameter)
凡是实参给形参赋值都是叫做传参.
记住: 实参与形参的类型, 个数, 顺序一一对应即可.
注解(annotation)
使用 @interface 声明的类型都是注解, 只要使用 @标记符的都是注解
@元注解
[修饰符] @interface 注解名{
数据类型 参数名();
数据类型 参数名() default 默认值;
}
(1)如果注解有配置参数, 那么在使用时, 需要给配置参数赋值, 除非有默认值
(2)给配置参数赋值的标准格式: 参数名 = 参数值, 但是如果注解的配置参数只有一个, 而且名称是 value, 那么在赋值时可以省略 value=
(3)如果配置参数是数组类型, 那么赋值时可以用 "{多个值}"
@Override
用于检测被修饰的方法为有效的重写方法, 如果不是, 则报编译错误!
只能标记在方法上.
JUnit 单元测试
@Test: 标记在非静态的测试方法上. 需导入 junit 包
文档注解:
@author 标明开发该类模块的作者, 多个作者之间使用, 分割
@version 标明该类模块的版本
- try{
- }catch(...){
- }finally{
- // 无论 try 中是否发生异常, 也无论 catch 是否捕获异常, 也不管 try 和 catch 中是否有 return 语句, 都一定会执行
- }
- try{
- }finally{
- // 无论 try 中是否发生异常, 也不管 try 中是否有 return 语句, 都一定会执行
- }
- char ->Character
- byte -> Byte
- short -> Short
- int -> Integer
- long -> Long
- float -> Float
- double -> Double
- boolean -> Boolean
- void -> Void
- Thread t = new Thread(my);
- t.start();
- synchronized(锁对象){
- // 在一个线程执行期间, 不想要被其他线程打扰的代码, 一般是一次事务的原子性操作.
- }
- // 在一个线程执行期间, 不想要被其他线程打扰的代码, 一般是一次事务的原子性操作.
- }
来源: http://www.bubuko.com/infodetail-3344375.html