lang-java
JAVA精通
第一章 JAVA概述
1.1 java概述
- 简单:比C和C++简单,没有操作符重载、多继承、指针
- 面对对象
- 分布式:java的RMI远程方法调用协议可以支持分布式程序开发
- 健壮性:java是静态语言机制、异常处理机制、泛型可以使得java程序更加健壮
- 安全:java的GC机制、字节码验证、类加载器(ClassLoader)防范恶意代码
- 跨平台:可以在任何平台使用
- 解释型:java解释器对字节码进行解释执行
- 高性能:JIT编译器会将java源程序编程成字节码
- 多线程:java支持多线程,并提供线程之间的同步机制
- 动态:反射机制、动态类型转换导致java被视为准动态语言
1.2 java安装与配置
JDK下载链接:http://www.oracle.com
安装注意事项:
- 安装路径不要出现中文、空格、特殊字符
- 当提示安装JRE是,可以不安装,JDK中包含JRE
- 配置JAVA_HOME:很多框架和软件会默认通过JAVA_HOME获取java安装目录
- 配置Path:为了让系统在任何位置都可以访问二进制可执行文件,使用java命令,默认优先在当前目录找,然后在指定目录找
- 配置classpath:为了让系统在任何位置都可以访问.class编译文件,默认优先在当前目录找,然后在指定目录找
JAVA_HOME: C:\JiangHai\soft\jdk8u25
Path: %JAVA_HOME%\bin
classpath: .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
三个坑:
- 后缀名称:显示所有文件后缀名称
- IDE乱码:将notepad++的编码改为anis(gbk/gb2312)
- 重启IDE:在环境编码改变之后,需要重启CMD/IDE
第二章 java语言基础
2.1 标识符
java中对类、变量、方法、参数命名时使用的字符串称为标识符
标识符命名规则:
- 禁止以数字开头,允许以字母、$符、下划线开头
- 禁止使用特殊字符(~!@#$%^&*(),避免使用中日俄文
- 区分大小写
- 做到见名知意
2.2 关键字
| class | extends | implements | interface | import |
|---|---|---|---|---|
| package | break | case | continue | default |
| do | if | else | for | return |
| switch | while | false | true | null |
| boolean | byte | char | short | int |
| long | float | double | try | catch |
| throw | throws | finally | abstract | fianl |
| native | private | protected | public | static |
| synchronized | transient | volatile | instanceof | new |
| super | void | assert | enum | goto |
| const | * * |
2.3 修饰符
2.3.1 访问控制修饰符
| 修饰符 | 当前类 | 包内 | 子类(包内) | 子类(包外) | 包外 |
|---|---|---|---|---|---|
| public | Y | Y | Y | Y | Y |
| protected | Y | Y | Y | Y | |
| default | Y | Y | Y | ||
| private | Y |
2.3.2 非访问控制修饰符
1.static
类属性
1.不能修饰局部属性
类方法
1.在类方法内不能使用对象属性
2.final
常量类
1.不能被继承或修改
常量属性
1.不能被继承或修改,属性值可以修改
2.常量必须初始化
常量方法
1.不能被继承或修改
3.abstract
抽象类
1.不能实例化
2.abstract和final冲突
3.有抽象方法的一定是抽象类
4.抽象类可以有非抽象方法
抽象方法
1.只有声明,没有实现
2.abstract和static和final冲突
2.3.3 非访问控制修饰符-线程安全
1.synchronized
同一时间只能被一个线程访问
public synchroniaed void show() { ... }
2.transient
序列化时,jvm跳过该属性
public transient int a = 55; //不会被序列化
public int b = 66; //被序列化
3.volatile
1.volatile修饰的属性,在某线程访问时,会强制去共享内存重新获取属性值
2.当属性值发生变化时,会立刻同步到共享内存
2.4 数据类型
2.4.1 数据分类
1.基本数据类型
2.引用类型
2.4.2 基本数据类型
1.整型:byte、short、int、long
2.浮点型:float、double
3.字符型:char
4.布尔型:boolean
2.4.3 数据取值范围
1.整型
| 数据类型 | 字节数 | 取值范围 |
|---|---|---|
| byte | 1字节 | -2^7 ~ 2^7-1 |
| short | 2字节 | -2^15 ~ 2^15-1 |
| int | 4字节 | -2^31 ~ 2^31-1 |
| long | 8字节 | -2^63 ~ 2^63-1 |
2.浮点型
1.float类型的数值有一个后缀F(例如:3.14F)
2.没有后缀F的浮点数值(如3.14)默认为double类型
float f = 1.1F;
double d = 1.1;
| 数据类型 | 字节数 | 取值范围 |
|---|---|---|
| float :单精度 | 4字节 | -2823 ~ 2823(8是指数,23是尾数) |
| double :双精度 | 8字节 | -21152 ~ 21152(11是指数,52是尾数) |
3.字符型
- 一个中文占2个字节
- 普通数字、字母等使用ASCII码
- 中文使用unicode码
public class Demo6_char {
public static void main(String args[]) {
char a = 'a'; // 普通的字母、数字、特殊字符都是在底层使用ASCII码
char c = '李'; // 汉字使用的unicode码
String s = "中国"; // 字符串
// byte、short、char、Int在进行运算的时候都是转为Int型运算的
System.out.println(c + 12);
// 字符串在 + 法运算符,是连接字符串,结果为: 中国12
System.out.println(s + 12);
}
}
字符运算:
强制转换
char c = '!';
System.out.println((int)c);
隐式转换
char c = '!';
int i = 10;
System.out.println(c + i);
// 43,在简单类型的整数计算中,所有整型都会被转为int类型做运算
| 数据类型 | 字节数 | 取值范围 |
|---|---|---|
| char | 2字节 | 0 ~ 65536 |
4.布尔型
boolean不能转化为任何类型
| 数据类型 | 字节数 | 取值范围 |
|---|---|---|
| boolean | 1字节 | false、true |
2.4.4 数据类型转换
1.整型默认申明为int型,若需要long型,如:long b = 100L;
2.浮点型默认申明为double型,若需要float型,如:float b = 3.14F;
2.4.5 科学计算法
314000 = 3.14E5 = 3.14 * 10^5 (3.14乘以10的5次幂)
2.5 常量与变量
2.5.1 常量和变量区别
1.常量:不可以改变值
2.变量:可以改变值
2.5.2 成员变量和局部变量
1.成员变量:默认有初始值
2.局部变量:无初始值,必须自己设置
2.5.3 成员变量的初始值
| 数据类型 | 默认值 |
|---|---|
| byte | 0 |
| short | 0 |
| int | 0 |
| long | 0L |
| float | 0.0F |
| double | 0.0 |
| char | '' |
| boolean | false |
| 引用类型 | null |

浙公网安备 33010602011771号