Java体系
JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版)
JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java平台企业版)
JavaME(J2ME)(Java 2 Platform Micro Edition,java平台微型版)。
主要特点:
简单、面向对象、分布式、健壮、安全、体系结构中立、可移植、解释型、高性能、多线程、动态的
基本概念:
JDK(Java Development Kit ):软件开发工具包,编写 Java 程序的程序员使用
JRE(Java Runtime Environment):程序运行环境,运行别人写好的 Java 程序
JVM(Java Virtual Machine):Java 虚拟机,源代码文件.java 编译成 字节码文件.class
Server JRE (Java SE Runtime Environment):服务端使用的 Java 运行环境
SDK(Software Development Kit):软件开发工具包,在Java中用于描述1998年~2006年之间的JDK
DAO(Data Access Object):数据访问接口,数据访问,顾名思义就是与数据库打交道
MVC(Model View Controller):模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法
跨平台机制:
JDK(Java Development Kit):软件开发工具包 javac.exe 编译工具 java.exe 执行工具 JRE(Java Runtime Environment):程序运行环境 JVM(Java Virtual Machine): 源代码文件.java 编译成 字节码文件.class
程序计数器:当前线程正在执行的字节码指令的地址
虚拟机栈:存储当前线程运行方法时所需的数据、指令、返回地址
JVM开辟内存:
默认执行过程:
javac 源文件.java -> 源文件.java 编译成 字节码文件.class
java 字节码文件.class
JVM开辟内存 -> 类加载器(从硬盘将 “字节码文件.class” 搬运到【内存】【方法区】“类映射空间”)
所有执行都在“栈”内存
javap -c 可以查看字节码文件
开发环境配置
安装 JDK
JDK 下载命令行 查看是否已安装 java -version
java -verbose 查看 JDK 安装路径
环境变量配置
JAVA_HOME
C:\Program Files (x86)\Java\jdk1.8.0_91 //JDK 安装路径CLASSPATH
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; //记得前面有个”.”Path
%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
在 Windows10 中,Path 变量里是分条显示的,我们需要将 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 分开添加
汉化
eclipse -> help -> install new software
install -> work with:https://download.eclipse.org/technology/babel/update-site/R0.17.0/2019-06/
点击 add -> 选择 chinese -> next next next
可以汉化,但是存在报错,不知道是不是版本问题,使用版本 2019-09
===========================================
基础语法
Java 注释:
单行注释:// .....
多行注释:/* ..... */
文档注释:/** ..... */
数据类型
基本类型:
整型(4): byte short int long
浮点型(2): float double
字符型(1): char(Unicode编码)
布尔型(1): boolean
byte(8bit
):范围 -27 ~ 27-1
short(16bit
)、int(32bit
)、long(64bit
)
float(32bit
) : 0,0*9 ,0*22
double(64bit
): 0,0*19,0*44
char(16bit
)、boolean(1bit
)
1byte == 8bit(bit:敏感单元位) 0000,0000 (256种组合)
引用类型:
数组 []、类 class、接口 interface、枚举 enum、注解 @interface
常量、变量
标识符常量:final [数据类型] [变量名称] = 值;常量不可更改
变量:[数据类型] [变量名称] = 值;
*变量是一个内存空间,声明必须制定类型;未初始化值,不可以使用;“=” 初始化赋值;变量空间内容有且只有一个;空间内的内容的类型和定义时一致,值可以改变*
常量 在内存(常量缓冲区,常量池)中 初始大小(int 类型) 32bit (double 类型) 64bit
如果初始化的值超出范围,编译会报错:
float a = 3.4F;
long b = 2147483648L;
类型转换:
同种数据类型之间:
大空间类型 赋值 小空间类型 -> 直接赋值
byte a = 1; int b = a;
小空间类型 赋值 大空间类型 -> (小空间类型)强制转换
int a = 1; byte b = (byte)a; *如果a的值超出b的范围,强制转换编译可以,执行后b的值会发生改变*
整型和浮点型之间转换,比较精度程度
byte -> short -> int -> long -(比较的是精确程度)> float -> double
不同数据类型:
int -> char Unicode码强制转换
布尔类型不能转换
包装类(Integer Character Byte Float Double Long...)
运算符
算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算
a = a++ 先备份赋值,后计算
a = ++a 先计算,后备份赋值
语法结构
分支结构:
if switch
循环结构:
for while do...while
for(;;)
for(:) //加强 for 循环,用于遍历,只能取值,不能赋值,没有 index 索引
break、continue 标记
数组
静态初始化:
int[] arr = new int[]{10,20,30,40};
int[] arr = {10,20,30,40}
动态初始化:
int[] arr = new int[8]
有长度,有默认值
整型:0
浮点型:0.0
字符型: '0' -> 48
布尔型:false
引用数据类型:null
动态参数列表
1 | public void funName(int...x){ |
类组成
属性、方法、构造方法、程序块
重写类构造方法,默认构造方法需要保留
程序块:
没有修饰符、没有参数、没有返回值、没有名字的特殊方法
无法重载,块可以存在多个
块需要调用才能执行,每次调用构造方法之前,系统会自动调用程序块,执行一次
1 | //类封装 |
类和类的关系
A is-a B 泛化(继承 实现)
A has-a B 包含(组合 聚合 关联)
A use-a B 依赖(依赖)
继承
- 子类 extends 父类
- 子类可以调用父类中(public protected)的属性,方法
- 子类可以添加自己的属性和方法
- 子类可以重写父类方法内容 override
- 每一个类都有继承类,默认 Object:引用类型的父类
- Java 单继承:目的类使用更安全,可以通过(传递、多实现)实现多继承
- 继承在内存中的存在形势*
- this和super代替的对象*
– | 方法重写override | 方法重载overload |
---|---|---|
类 | 两个继承关系的类,子类重写父类的方法内容 | 一个类中的一组方法 |
权限 | 子类可以大于等于父类 | 无要求 |
特征 | final static abstract 父类final 子类不能重写 父类static 子类不存在 父类abstract 子类必须重写 |
无要求 |
返回值 | 子类可以小于等于父类 | 无要求 |
名字 | 子类父类一致 | 一个类中的好多方法名必须一致 |
参数 | 子类父类一致 | 每一个方法的参数必须不一致 |
异常 | 父类抛出运行时异常,子类可以不予理会; 父类抛出编译时异常,子类抛出的异常个数、类型小于等于父类 |
无要求 |
方法体 | 方法内容不一致 |
Object 类中的方法
equals()、hashCode()、toString()、getClass()、notify()、notifyAll()、wait()
1 | //equals() |
包含
一个类的对象当做另一个类的属性来存储
1 | public class Car { |
依赖
一个类的方法使用了另一个类的对象(方法中参数传递,方法中自己创建 new)
高内聚低耦合:紧密 继承(实现)> 包含 > 依赖
面向对象三(四)大特性
继承 封装 多态 (抽象)
权限修饰符
public
protected
默认
private
可以修饰类和类成员(除了程序块)
修饰类的时候 只允许 public 默认
final
修饰变量:变量没有赋值,给一次机会;变量有值,不予许再次更改
变量基本类型,值不可更改;变量引用类型,地址可以修改
修饰属性:和修饰变量类似(修饰属性必须赋初始值,否则编译报错)
修饰方法:方法的最终不可更改,方法不能被子类重写
修饰类:类不可以被继承(常见的工具类:String Math Scanner等)
static(静态的)
abstract(抽象的)
native(本地的)
transient(短暂的—->序列化)
*synchronized(同步的)
*volatile(不稳定,保护属性、方法的线程安全)
static
可以修饰属性、方法、程序块、类(内部类)
静态元素在类加载时就初始化,此时没有创建对象
静态元素存储在静态元素区,每个类有一个自己的区域
静态元素只加载一次,不属于任何对象,只属于类,可以通过类名访问
静态元素区 GarBage Collection 无法管理,可以认为常驻内存
非静态成员中可以访问静态成员
静态成员中不可以访问非静态成员
类的加载顺序
父类 -> 父类静态空间(属性、方法、程序块)
执行静态程序块
子类 -> 子类静态空间(属性、方法、程序块)
执行静态程序块
加载父类非静态成员
执行程序块,构造方法
加载子类非静态成员
执行程序块,构造方法
1 | public abstract class Box<E> { |
interface ——- 直接多继承 ——- interface 接口定义规则
abstract ——- 直接单继承 ——- abstract 抽象类描述事物
class ——- 直接单继承 ——- class 具体描述细节
class ——- 不能直接单继承 ——- abstract 需要将抽象方法具体化
class ——- 不能直接多实现 ——- interface 需要将抽象方法具体化
abstract ——- 直接多实现 ——- interface
多态
(Student\Teacher) extends Person extends Animal —> Object
1 |
|
枚举
1 | public enum Week { |
GC
1 | //类中重写 |
异常
InputMisMatchException 输入异常
ArrayIndexOutOfBoundsException 数组越界
NegativeArraySizeException 负数
NullPointerException 空指针
NumberFormatException 数字格式
ClassCastException 类型转化
StackOverflowError 栈内存溢出