基础知识
JDK:Java Development Kit,即Java开发包
JRE:Java Runtime Environment,即运行Java字节码的虚拟机,而Java源码编译为Java字节码就需要JDK
简单来说二者关系即:JRE=JVM+Runtime Library,JDK=JRE+Compiler+debugger+etc
一个简单的java代码
1 | public class Hello { |
要运行这个程序需要经过source code->byte code->Run on JVM这样的流程,即源码->字节码->虚拟机运行
Java程序的基本结构
作为面向对象的语言,Java程序的基本单位是类,类名必须以英文字母开头,有字母,下划线,数字组成,一般以大写字母开头
在上面的代码中可以看到定义类时有一个public关键字,这是访问修饰符,public即该类是公开的
在类的内部可以定义方法,如上面的main,也有访问修饰符,方法命名与类相同,但一般以小写字母开头
Java中的变量以及数据类型
基本类型
基本类型直接储存在栈内存中,他们的值是实际的数据
- 整型:byte,short,int,long
- 浮点数类型:float,double
- 字符:char
- 布尔:boolean
其中,byte占一个字节,short和char两个,int和float四个,long和double八个
1 | //整型定义 |
引用类型
引用类型储存在堆内存中,实际上储存的是地址
除去基本类型外其他的都是引用类型,最常见的就是String
1 | String s = "n1ng" |
定义变量时如果加上final修饰符就变成了常量,而常量在定义时进行初始化后就不可以再次赋值
var关键字
在定义变量的时候如果类型的名字很长,可以用var关键字来省略变量类型
1 | var sb = new StringBuilder(); |
运算
整数和浮点运算:略
布尔运算
关系运算符的优先级
1 | ! |
三元运算符
1 | b?x:y |
字符和字符串
Java在内存中使用unicode来表示字符,不论是英文还是中文都是一个char
1 | //可以直接将char赋值给int,值为unicode编码 |
前面提到String类型需要用双引号来包裹,如果字符串中本来就含有双引号那么就需要用转义字符”\“来表示
1 | String c1 = "n1ng\"n2ng" |
因为“\”是转义字符,所以两个“\”,即\表示\,常见的转义字符有
1 | \n,换行 |
字符串的连接可以用+号直接连接,数据类型会自动转化,多行字符串连接时可以用”””…”””来表示(Text Blocks),如
1 | String s = """ |
多行字符串的每行之前的共同的空格会被删掉,末尾其实还有一个\n,如果不需要就把最后的三个引号紧跟着最后的字符
字符串一个不可变的类型
1 | public class Main { |
这段代码运行后可以发现,虽然两次输出的s是不同的,但其实并不是hello被修改成了world,而是重新创建了一个字符串hello,然后再使s指向hello
1 | public class Main { |
通过这个例子就能发现”hello”其实并没有被修改
需要注意的是,想要比较字符串是否相同时需要用equals方法而不能用==
常用的方法有:
- splilt(),分割字符串
- join(),拼接字符串
- format()静态方法和formatted()方法,传入参数替换占位符生成新的字符串//String s =”Hello %s”;s.formatted(“n1ng”);String.format(s,”n1ng”)
- valueOf(),将其他类型转换为字符串,String.valueOf(123)
- parsexxx(),将字符串转换为其他类型,如parseInt(),parseBoolean()
- toCharArray(),String转换为char[]//char[] n1ng = “n1ng”.toCharArray();String s = new String(n1ng);
数组
数组也是引用类型
实际上字符串在String内部是通过char[]数组表示的
1 | //定义 |
字符串数组中存储的是每个字符串的地址
StringBuilder
StringBuilder是一个可变对象,可以预分配缓冲区,在往StringBuilder中添加字符时不会再像普通的String那样创建新的临时对象
1 | StringBuilder sb = new StringBuilder(1024); |
StringJoiner
方便实现使用分隔符拼接数组这里需求
1 | String[] names = {"n1ng","n2ng","n3ng"}; |
同时也提供了一个静态方法join(),在不需要指定开头和结尾的情况下更加方便
1 | String[] names = {"n1ng","n2ng","n3ng"}; |
包装类型
定义一个包装类可以将基本类型变为引用类型
1 | public class Interger{//将int包装为Integer |
此时int和Interger可以相互转换
1 | Integer n1 = null; |
Java核心库为每种基本类型都提供了对应的包装类型
基本类型 | 对应的引用类型 |
---|---|
boolean | java.lang.Boolean |
byte | java.lang.Byte |
short | java.lang.Short |
int | java.lang.Integer |
long | java.lang.Long |
float | java.lang.Float |
double | java.lang.Double |
char | java.lang.Character |
枚举类
让编译期能够自动检查某个值在枚举的集合内,可以使用enum来定义枚举类
1 | enum WeekDay(){ |
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 3049155267@qq.com