JAVA基础一
名词
JSR 规范: Java Specification Request
JCP 组织: Java Community Process
JSR规范 时为了保证在给java平台开发新功能时,创建一个JSR规范,定义好接口。然后各个类别的第三方应用按照接口开发。
JSR是一系列的规范 从JVM内存模型到WEB程序接口 全部都标准化了 而负责审核JSR的组织就是JCP
JSR规范发布时,为了让大家有个参考需要发布
RI: Reference Implemenlation 参考实现
TCK: Technology Compatibility Kit 兼容性测试套件
RI只是一个能跑的代码 不注重性能 TCK是保证开发的功能相同
环境
开发需要安装jdk 因为有编译工具 运行时只需要jre就行
JAVA JVM 执行编译后的文件
javac 把java源文件.java编译成.class
jar 是把.class文件打包成.jar文件便于发布
javadoc 用于从java源码中自动提取注释并生成文档
jdb java调试器
JAVA11 新增了一个功能
JAVA xx.java 直接运行一个单文件源码
基础
-
程序基本结构
类名 必须以英文字母开头,后接字母 数字 和 下划线的组合 习惯首字母大写 注意public是访问修饰符,表示该class是公开的 不写public能正常编译 但这个类将无法从命令行执行
-
变量和数据类型
基本数据类型:
基本数据类型是CPU可以直接进行运算的类型,java定义了以下几种基本数据类型
整数类型: byte short int long
浮点数类型 float double
字符类型 char
布尔类型 boolean
JAVA定义的这些基本数据类型有什么区别呢 要了解这些区别 我们必须简单了解一下计算机内存的基本结构
计算机内存的最小存储单元是字节(byte) 一个字节就是一个8位的二进制 8个bit
框是内存的最小单元是一个byte 8个二进制bit
byte 占 1个框
short 占 2个框
int 占 4个框
long 占 8个框
double 占8个框
float 占4个框
char 占2个框
class Test {
public static void main(String[] args) {
int i = 1111123323;
int i2 = -2323;
int i3 = 2_000_000_000; //居然可以加下划线
int i4 = 0xff000; //表示十六进制
int i5 = 0b11123232; //表示二进制
long l = 9000000000L; //long型的结尾要加L
float f = 3.14f; //浮点数的范围是3.4 * 10^38
double d = -3.45; // 最大时1.79 * 10^308
}
}
引用类型
String String[] int[]
字符串 数组 其实本质就是对象
常量
定义变量的时候在前边加上final修饰符 常量名最好大写
var关键字
var sb = new StringBuilder(); //这是java10 之后才有的
运算
防止int计算溢出要这么写
long x = 123;
long y = 23232;
long sum = x + y;
移位运算
举例子 int在内存里是4个byte,每个byte是8位的二进制
所以
00000000 00000000 00000000 00000001 表示整数1
移位运算符有三种 移动的是从第一个不为0的数开始移动
带符号 >>
向左位于<< 箭头冲哪边往那边移动
不带符号 >>>
浮点数运算
跟整数运算一样 但是没有位移运算 并且小数不能精确表示
正如浮点数的不靠谱 所以逻辑判断时尽量避免使用 x == 0.1
而是使用Math.abs(x - 0.1) < 0.00001
多行字符串 在java13后可以使用
""" SELECT * FROM
users
WHERE id > 100
ORDER BY name DESC """
String 具有不可变性
String s = "hello" 这个时候会在内存中创建 ”hello“ 然后指向 s 这个引用
当 s = ”world“时 会将s 指向world
String s = "hello";
String t = s;
s = "world";
System.out.printf(t); //hello
7. 数组类型
特点: 数组所有元素初始化为默认值。数组一旦创建,大小不可改变
数组的定义 注意时大括号 跟其他语言有点区别
int[] a = new int[] {1,2,3,4,5)}
int[] a = {1,2,3,4,5}
int[] a = new int[5]
数组时引用类型
int[] a = {1,2,3,4]}
a = {6,7,8}
System.out.println(a.length) //3
新的理解
计算机内存的最小存储单元是字节(Byte)一个字节就是一个8位二进制数 即8个bit 它的二进制范围00000000 ~ 11111111
1个字节 是1个byte 1024个字节是1k 1024K是1M 1024M是1G
关于内存泄漏和内存溢出
内存溢出 程序在申请内存的时候没有足够内存空间给他
内存泄漏 JVM给了1024M内存 其中一个对象用了512M内存 但是由于某些程序原因 导致这512M没有释放 这就叫做内存泄漏
常见的内存泄漏
长生命周期引用短生命周期 导致短生命周期的不能被释放
数据连接 socket JDBC IO 如果使用完没有close
加载数据量
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合,包括逻辑结构和物理结构。
数据类型:是一个值的集合和定义在这个值集上的一组操作的总称。
抽象数据类型:是指一个数学模型以及定义在该模型上的一组操作。
null 是关键字 注意JAVA是大小写敏感的 所以只有null
null 是一切对象的默认值
只能通过 == != 来操作 其他都会报空指针异常