java 基础查缺补漏
包
八大基本类型
Java基本类型共有八种,基本类型可以分为四类,字符类型char、布尔类型boolean、数值类型byte、short、int、long、float、double。数值类型又可以分为整数类型byte、short、int、long和浮点数类型float、double。JAVA中的数值类型不存在无符号的,它们的取值范围是固定的,不会随着机器硬件环境或者操作系统的改变而改变。8种类型表示范围如下:
PS:类型转换
JAVA关键字
关键字一律用小写字母标识,按其用途划分为如下几组。
(1)用于数据类型。
用于数据类型的关键字有 boolean、byte、char、 double、 false、float、int、long、new、short、true、void、instanceof。
(2)用于语句。
用于语句的关键字有break、case、 catch、 continue、 default 、do、 else、 for、 if、return、switch、try、 while、 finally、 throw、this、 super。
(3)用于修饰
用于修饰的关键字有 abstract、final、native、private、 protected、public、static、synchronized、
transient、 volatile。
(4)用于方法、类、接口、包和异常。
用于方法、类、接口、包和异常的关键字有 class、 extends、 implements、interface、 package、import、throws。
还有些关键字,如cat、 future、 generic、innerr、 operator、 outer、rest、var等都是Java保留的没有意义的关键字。
另外,Java还有3个保留字:true、false、null。它们不是关键字,而是文字。包含Java定义的值。和关键字一样,它们也不可以作为标识符使用。
关键字 含义
abstract 表明类或者成员方法具有抽象属性
assert 断言,用来进行程序调试
boolean 基本数据类型之一,声明布尔类型的关键字
break 提前跳出一个块
byte 基本数据类型之一,字节类型
case 用在switch语句之中,表示其中的一个分支
catch 用在异常处理中,用来捕捉异常
char 基本数据类型之一,字符类型
class 声明一个类
const 保留关键字,没有具体含义
continue 回到一个块的开始处
default 默认,例如,用在switch语句中,表明一个默认的分支。Java8 中也作用于声明接口函数的默认实现
do 用在do-while循环结构中
double 基本数据类型之一,双精度浮点数类型
else 用在条件语句中,表明当条件不成立时的分支
enum 枚举
extends 表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口
final 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量
finally 用于处理异常情况,用来声明一个基本肯定会被执行到的语句块
float 基本数据类型之一,单精度浮点数类型
for 一种循环结构的引导词
goto 保留关键字,没有具体含义
if 条件语句的引导词
implements 表明一个类实现了给定的接口
import 表明要访问指定的类或包
instanceof 用来测试一个对象是否是指定类型的实例对象
int 基本数据类型之一,整数类型
interface 接口
long 基本数据类型之一,长整数类型
native 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的
new 用来创建新实例对象
package 包
private 一种访问控制方式:私用模式
protected 一种访问控制方式:保护模式
public 一种访问控制方式:共用模式
return 从成员方法中返回数据
short 基本数据类型之一,短整数类型
static 表明具有静态属性
strictfp 用来声明FP_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范
super 表明当前对象的父类型的引用或者父类型的构造方法
switch 分支语句结构的引导词
synchronized 表明一段代码需要同步执行
this 指向当前实例对象的引用
throw 抛出一个异常
throws 声明在当前定义的成员方法中所有需要抛出的异常
transient 声明不用序列化的成员域
try 尝试一个可能抛出异常的程序块
void 声明当前成员方法没有返回值
volatile 表明两个或者多个变量必须同步地发生变化
while 用在循环结构中
java命名规范
PS:标识符
- 数字、字母、下划线组成(不推荐使用$)且不能使用字母开头
- 不使用JAVA关键字
- 最好做到见名知意
- 驼峰规则(如上图)
注释(禁止放在句尾)
运算符
if语句
int score=90;
if (score>90){
System.out.println("优秀");
}else if (score<20){
System.out.println("准备叫家长!");
}else{
System.out.println("良好");
}
//不加大括号 范围遇到第一个分号结束
if (score == 100)
System.out.println("if范围内");
System.out.println("if范围外");
}
switch
/*
1.关于case后面的break;
如果case后不加break,会继续执行下一个case的代码;(可自行实验)
2.关于switch支持的类型
byte、short、int、char、string(1.7版本后才开始支持)
*/
int day = 3;
switch (day) {
case 1:
System.out.println("周一");
break;
case 2:
System.out.println("周二");
break;
case 3:
System.out.println("周三");
break;
case 4:
System.out.println("周四");
break;
case 5:
System.out.println("周五");
break;
case 6:
System.out.println("周六");
break;
case 7:
System.out.println("周日");
break;
default:
System.out.println("错误");
break;
}
三目运算
/*
写一个三数最大值的demo来介绍三目运算符的作用
*/
int oneNumber = 3;
int twoNumber = 100;
int threeNumber = 2;
//如果one>two max=one 反之 max=two
int maxNumber = oneNumber >= twoNumber ? oneNumber : twoNumber;
//如果max>three max=max 反之 max=three
maxNumber = maxNumber >= threeNumber ? maxNumber : threeNumber;
System.out.println(maxNumber);
while
/*
1.关于while的执行
先判断条件,在执行代码段的内容
2.关于do-while的执行
先执行代码段,在判断条件,也就是说do-while最少执行代码段一次
3.关于break的作用
打破循环
4.关于continue的作用
结束本次执行,开始下一次执行
*/
int i = 1;
while (i < 10) {
if (i == 4) {
System.out.println("我不喜欢4这个数字,下一个!");
i++;
continue;
}
if (i == 5) {
System.out.println("劳资不陪你玩了,再见!我要打破循环跑路去了!");
break;
}
System.out.println(i++);
}
do {
System.out.println("劳资就是这么任性,就算不满足条件,我也能执行一次");
} while (i < 5);
}
for
/*
1.关于for的三个表达式
第一个表达式=="初始化"(最开始执行,且只执行一次)
第二个表达式==循环判断条件(n次循环执行n+1次)
第三个表达式==每次循环结束后执行(相当于在代码段的尾端书写 n次循环执行n次)
*/
/*
阶乘和连加的demo
*/
int allMultiply = 1;
int allAdd = 0;
for (int i = 1; i < 10; i++) {
allAdd += i;
allMultiply *= i;
}
System.out.println("阶乘:" + allMultiply + "\t连加:" + allAdd);
}
函数
参数为基本数据类型:值传递(传递的是值)
参数为引用数据类型:引用传递(传递的是地址)
PS:参数列表:参数类型,个数,顺序
数组
/*
数组的三种常见初始化
*/
int[] numbers = {1, 2, 3};
int[] numbers1 = new int[]{1, 2, 3};
int[] numbers2 = new int[10];
/*
经典数组遍历
*/
for (int i = 0; i < numbers.length; i++) {
System.out.println(numbers[i]);
}
/*
迭代方式 更加高级
*/
for (int number : numbers) {
System.out.println(number);
}
PS:Arrays类的使用,专为处理数组而生的一个类
/*
binarySearch
二分查找,简单来说就是查找的功能;
参数:第一个参数是数组,第二个参数是你想从数组里查询的内容
返回值:未查询到则返回-4 查询到则返回数据的位置下标
*/
// System.out.println(Arrays.binarySearch(numbers,5));
/*
copyOf
复制数组中的数据
参数:第一个参数是数组,第二个参数是你想复制数组数据的个数(长度),默认从第一个数据开始
返回值:数组
*/
// int[] numberTemp=Arrays.copyOf(numbers,1);
// for (int i = 0; i < numberTemp.length; i++) {
// System.out.println(numberTemp[i]);
// }
/*
copyOfRange
复制数组中的数据
与copyOf相似 只不过复制数组时数据的起点不再默认从第一个数据开始,而是人为规定
*/
// numberTemp=Arrays.copyOfRange(numbers,1,2);
// for (int i = 0; i < numberTemp.length; i++) {
// System.out.println(numberTemp[i]);
// }
/*
equals
比较数组的元素是否完全相等
参数:比较的两个数组
返回值:相等返回true,不相等返回false
*/
// System.out.println(Arrays.equals(numbers,numbers1));
/*
fill
把数组的每个元素变成某个元素
参数:第一个参数是数组,第二个是你指定的值
*/
// Arrays.fill(numbers, 2);
// for (int i = 0; i < numbers.length; i++) {
// System.out.println(numbers[i]);
// }
/*
sort
排序(升序)
参数:数组
*/
// Arrays.sort(numbers);
// for (int i = 0; i < numbers.length; i++) {
// System.out.println(numbers[i]);
// }
/*
toString
转为字符串
参数:数组
*/
// System.out.println(Arrays.toString(numbers));
java垃圾回收
OOP(面向的对象)
类是对象的概括,对象是类的具体实例。
万物皆对象,万物皆可以抽象成类
继承和多态
异常
String and StringBuffer
包装数据类型
时间、日期
Math 和Random
正则表达式
[]:单个字符的范围
{}:左边字符的长度
():就是普通的()
详细知识
国际化
三大集合
大数、小数的处理(BigDecimal)
comparable和comparator
compareble对新建类(员工类)内部进行增强(实现comparable接口),但是排序的字段只能是一个。所以引入了comparator,可以实现对n个字段排序。
comparator不对新建类进行更改,而是定义一个新类实现comparator接口成为一个排序工具,给用户使用。
文件API
字节流和字符流
对象序列化(对象流)
demo
package P2020_05_21;/*
@author:Qian
@time:2020/5/22
*/
import java.io.Serializable;
import java.util.Objects;
public class student implements Serializable {
private String name;
public String getName() {
return name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
student student = (student) o;
return name.equals(student.name);
}
@Override
public int hashCode() {
return Objects.hash(name);
}
public void setName(String name) {
this.name = name;
}
public student() {
}
@Override
public String toString() {
return "student{" +
"name='" + name + '\'' +
'}';
}
public student(String name) {
this.name = name;
}
}
package P2020_05_21;/*
@author:Qian
@time:2020/5/21
*/
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class SerializeTest {
public static void main(String[] args) {
/*
写
*/
try {
student a = new student("小红");
student b = new student("小蓝");
student c = new student("小黄");
List<student> list = new ArrayList<>();
list.add(a);
list.add(b);
list.add(c);
//文件路径
String filePath = "123.txt";
FileOutputStream fileOutputStream = new FileOutputStream(filePath);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(list);
objectOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
/*
读
*/
try {
String filePath = "123.txt";
FileInputStream fileInputStream = new FileInputStream(filePath);
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
try {
List<student> list2 = (List<student>) objectInputStream.readObject();
for (student student : list2) {
System.out.println(student);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
mysql
常用函数
substr
剪切
trim
去除空格
concat
粘合
replace
代替
case when then else end
if else