Java基础(0)
JDK简单介绍
JDK(Java开发工具包)包括:
- JVM JavaVirtualMachine
- 核心类库
- 开发工具(java,javac等)
其中,JVM与核心类库统称为JRE;
jdk LTS版本:8/11/17;
javac命令 编译,生成字节码文件(class文件/ 其中不包含java文件里的注释)
java命令 运行class文件;
也可以通过java命令直接运行.java文件,期间会生成一个临时class文件(文件中不会保存);
path环境变量:用于配置程序路径,方便再命令行窗口的任意目录启动程序;命令行窗口启动程序,现在当前目录查找,其次在path系统变量中查找。
JAVA_HOME环境变量:告诉OS JDK的安装位置。
IDE: intergrated development environment
Java跨平台工作原理:一次编译,处处可用 → class文件可在不同系统中的JVM上运行
数据类型
数据最小单位:字节(byte)
基本数据类型
数据类型 | 字节数 | |
---|---|---|
整型 | byte | 1 |
short | 2 | |
int | 4 | |
long | 8 | |
浮点型 | float | 4 |
double | 8 | |
字符型 | char | 2 |
布尔型 | boolean | 1 |
注意:单引号’'只能存放一个字符/数字、字母、文字、空格 不能为空;双引号""存放字符串,可为任意值 可为空。
引用数据类型
类、接口、数组
数据类型转换
- 数据类型范围小的可以直接(自动)赋值给范围大的变量;
byte→short→int→long→float→double
char→int … - 表达式的最终结果类型由表达式中的最高类型决定;
- 表达式中,byte、short、char直接转成 int 类型参与运算;
- 强制类型转换 /但是可能会造成数据溢出;
- boolean类型不能强转至其他类型。
ASCII编码表
ASCII编码表:美国信息交换标准编码
几个注意的值:A-65 \ a-97 \ 0-48
运算符
“+”在无法运算的情况下做连接符
数字与字符相加 → 数字
数字与字符串相加 → 字符串 // String类型与数字相加只能做连接
int = 5;
5+'a'=5+'a'对应的ASCII码=5+97=102;
5+a=10;
5+"a"="5a";
a+"a"="5a";
'a'+"a"="aa";
扩展赋值运算符 : +=, -+, *=, /=, %= 隐含强制类型转换
a+=b;
a=(a数据类型)a+b;
进制数及转换
在对变量赋值时 加上前缀:
- 二进制 0b
- 八进制 0
- 十六进制 0x
进制间的快速转换:二进制到八进制 三位转一位/十六进制 四位转一位
命名规则
标识符:由数字、字母、下划线或美元符组成,不能以数字开头 区分大小写
- 包名、项目名 → 一般都小写
- 类名 → 首字母大写,驼峰命名
- 方法名、变量名 → 首字母小写, 驼峰命名
- 常量名→一般全部大写,单词之间用下划线连接
数组
初始化方式:
- 静态初始化
①int[] args = new int[]{v1,v2,v3..}; ②简化int[] args = {v1,v2,v3,..};
- 动态初始化:只确定类型和长度,没有存入具体数据(有默认值)
int[] args = new int[长度];
两种数组初始化方式是独立的,不能混用
方法
内存原理
基本数据类型 变量中存储的是相应的数据;
引用类型 变量中存放地址;
方法区:字节码文件加载时进入的内存/存放编译后的class文件;
栈:方法运行时进入的内存,变量存放的内存;
堆:new出的对象;
注意/方法与方法之间不能嵌套
方法在未被调用的时候,在方法区的字节码文件中存放,被调用的时候,进入栈内存中;
参数传递
形参:方法定义时,形参列表中的变量
实参:在方法内部定义的变量
值传递:传输实参的值,不改变原实际参数(copy副本)
引用类型的参数传递一样是值传递,但由于传递的是地址,可改变地址指向内存的值
重载
同一个类中,出现多个方法名称相同,形参列表不同。(个数、类型、顺序不同)/修饰符、返回值类型都无所谓
目的:实现同一功能差异化的选择
可以在重载的方法中调用其他重载的方法 使代码简洁,提高复用性
面向对象
类:共同特征的描述
- 成员变量(属性)
- 方法(行为)
- 构造器
- 代码块
- 内部类
一个代码文件可以定义多个类,但是只有一个类可以用public修饰,且与文件名相同
对象:具体实例
对象的内存原理
创建对象:1、将相应的类文件载入方法区 2、在栈内存生成对象地址空间 3、堆内存创建对象内存(其中存放对象属性以及成员方法引用地址/指向方法区中的类文件)
垃圾回收机制:当堆内存中的类对象或数组对象等没有被任何变量引用(指向)时,会被判定为“垃圾”,自动定期进行清理。
构造器
用于初始化一个类的对象,并返回对象地址。
格式: 修饰符+类名+形参列表
- 无参构造器:没有定义任何构造器时,默认存在
- 有参构造器:可为对象属性赋值
一旦定义了有参构造器,无参的就不存在了,如使用 需手写
this关键字
代表当前对象的地址,可用于访问当前对象的成员变量、成员方法。
(一般出现在有参构造器中、成员方法中)
封装
面向对象的三大属性:封装、继承、多态
封装原则:对象代表什么就封装对应的数据,并提供数据对应的行为
例:“人关门” 存在“人”、“门”两类,其中“关”行为属于“门”类;“张三砍死李四” “死”方法属于李四,被张三调用。
更好的封装实现数据合理性:最常见 用private修饰属性,并提供get/set方法(可在赋值时进行合法性判断)
标准JavaBean
JavaBean:也可成为实体类(能找到对应个体),其对象可以用于在程序中封装数据(属于该对象的数据)。
标准JavaBean要求:
- 成员变量使用private修饰
- 提供成员变量对应的set()/get()方法
- 必须提供一个无参构造器(写了有参构造器时,默认无参构造器不存在,需要写出)
成员变量与局部变量的区别
1、类中位置不同。成员变量在类中方法外,局部变量常见于方法中 for循环中
2、成员变量有默认值,无需初始化;局部变量没有默认值,必须在使用前赋值
3、内存位置不同。成员变量存在于堆中(对象存在于堆);局部变量在栈中(方法在栈中执行)
4、生命周期不同。成员变量随对象,局部变量随方法(调用时存在,运行结束消失)
5、作用域不同。成员变量有对象即可访问,局部变量只有在定义的{ }内有效