文章目录
javaSE基础总结
- 初始java
java执行文件后缀名.class;用于开发桌面应用软件的java版本:javaSE - java基础语法
- 程序流程控制
- 数组
- 面向对象(重难点)
- 常用工具类
- 异常处理
- 集合框架(重难点)
- IO流
- 网络编程
- 多线程处理
- MySQL数据库(重点)
- JDBC(重点)
- 单元测试
1 JVM,JRE,JDK
1.1 JVM
全名:Java Virtual Machine
含义:Java虚拟机
内存中开辟一块空间,将源文件.java编译成计算机可识别的字节码文件.class;字节码文件解释成机器码文件执行,(解释是通过JVM来执行),字节码文件不面向任何具体平台,只面向虚拟机,故java语言具有平台无关性。
源文件(.java)----(javac.exe编译)----> 编译器编译(JVM)--------> 字节码文件(.class)----(java.exe解释器)---->执行程序
eg:
编译: javac Test.java (编译,形成字节码文件.class)
执行:java Test (运行,执行字节码文件)
1.2 JRE
全名:Java runtime environment
含义:Java运行环境
1.3 JDK
JDK:Java Development Kit
含义:Java开发工具包
2 八种基本类型
2.1 数据类型
在java中,数据类型分为两大类 基本数据类型和引用数据类型,以下是八种基本数据类型(四类八种):
类型 | 占用存储空间 | 表数范围 |
---|---|---|
byte字节 | 1字节 | -128 ~ 127 |
short短整数 | 2字节 | -215 ~ 215-1 |
int整数 | 4字节 | -231 ~231-1 |
long长整数 | 8字节 | -263 ~ 263-1 |
float单精度小数 | 4字节 | |
double双精度小数 | 8字节 | |
char字符 | 2字节 | |
boolean布尔 |
精度从低到高:
byte short char int long float double
(级别低的变量赋值给高的,自动数据转型,否则,强制类型转换)
- 整数类型:byte short int long(默认值0)
- 浮点型:float double(默认值0.0)
- 字符型:char(默认值空格字符)
- 布尔型:boolean(默认值false)
除此之外的所有引用数据类型默认值都是null -
- 整型值在jdk1.7之后是支持二进制,十进制,八进制,十六进制
- 0——ASCII码:48
2.2 标识符
规则:
- 1,不能使用关键字(go,const)
- 2,由英文字母(可以使用汉字,但不推荐),_,$,和数字组成
- 3,不能以数字开头
- 4,区分大小写的
-
- 行业内的约定:
- 1,命名使用驼峰命名法,
- 2,见名思意
- 3,类名首字母大写
- 4,变量名,包名,方法名首字母小写
- 5,常量命名全部大写,两个单词之间用下划线PRIMERY_KEY
- 行业内的约定:
3 运算符
3.1 算术运算符
- 运算符:+, -, *, /, %求余
- 10 / 20 = 0.5 结果只保留整数,并且不会四舍五入;整数与整数相除,结果只有整数;
- 9 % -1 = 0; 9 % 0 报错;
- 如果运算时,某一个类型是小数,那么整个运算会以小数的方式计算结果。
(Duplicate错误发生原因:重复定义变量)
3.2 一元运算符
递增、递减(前后处理不同)
++a:先对a加1操作,后赋值给其他变量;
a++:先赋值后加1。
int a = 1;
int b = ++a + a++; // (a + 1) + (a) =2+2
System.out.println(a); // 3
System.out.println(b); // 4
3.3 关系运算符
== 、!= 、> 、>= 、< 、<=返回类型都是布尔类型,返回的值只有true和false
(Type mismatch:cannot convert from boolean to int 类型不匹配错误)
3.4 逻辑运算符
3.4.1 各类逻辑运算符
&(and和,逻辑与)只要有一个false全部条件为真
| (or或者,逻辑或)只要有一个真,条件就为真
&&(短路与)
|| (短路或)
!(非)只能对布尔类型的结果取反
~异或:相同为0(假),不同为1(真)
数值上使用^
System.out.println("9 ^ 7:" + (9 ^ 7)); //将数值转换为二进制
返回值只有true和false
(&&优先级高于|| )
3.4.2 || 和 | 区别
||短路或:当||之前有条件为true时,后面的条件不需要执行;
|逻辑或 :不管|之前有没有条件为true,| 后面的都要执行;
|| 只有在|| 前有条件为true 时,性能才会比 | 好
3.4.3 && 和 & 区别
&&短路与:当&&之前有条件为false时,后面的条件不在执行;
&逻辑与 :不算|之前有没有条件为false,& 后面的都要执行;
&& 只有在&& 前有条件为false时,性能才会比 & 好
3.5 位运算符
位运算符 &(与) | (或)~(非) ^(异或) <<、 >> 、>>>(按位右移,无符号)
3.6 三目运算符
a > b ? a : b
4 判断、循环
4.1 判断
if支持无线嵌套
switch-case:表达式类型参数应该是 int、 short、 char 、byte,在jdk 1.7之后,还有enum,字符串类型。
mima.equals(“111”) && “111”.equals(mima):
后者较好。mima是变量,可能不存在,为null的情况下就会报错。
4.2 循环
- for循环:
break结束最近的那一层循环;
continue后面的代码不执行,表达式3继续执行;
跳出双层循环的两种方法:
// 方法一:
public void test4() {
flag: for (int i = 1; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (i == 2) {
break flag;
} else {
System.out.println("i=" + i + " ;j=" + j);
}
}
}
}
/**
i=1 ;j=0
i=1 ;j=1
i=1 ;j=2
i=1 ;j=3
*/
// 方法二:推荐使用
@Test
public void test5() {
boolean flag = false;
for (int i = 1; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if(i==2) {
flag = true;
}else {
System.out.println("i=" + i + " ;j=" + j);
}
}
if (flag) {
break;
}
}
}
/**
i=1 ;j=0
i=1 ;j=1
i=1 ;j=2
i=1 ;j=3
*/
- while循环:
- do-while循环:(可以用while循环代替)
- for-each:遍历数组每个元素
4.3 几个简单的例子
public static void main(String[] args) {
/**
* 判断素数
*/
for(int j = 2; j <= 100; j++) {
int num = j;
boolean isSushu = true;
for(int i = 2; i < num; i++) {
if(num % i == 0) {
isSushu = false;
break;
//return; //返回,也可以结束循环,结束整个main方法
}
}
if(isSushu) {
System.out.println(num+"是素数");
}
}
/**
* 乘法口诀表
*/
for(int i = 1; i <= 9; i++) {
for(int j = 1; j <= i; j++) {
System.out.print(i+"*"+j+"="+(i*j)+" ");
}
System.out.println();
}
System.out.println();
/**
* 百钱买百鸡:100块钱买100只鸡,母鸡3元,公鸡5元,小鸡1元三只
*/
for(int muji = 1; muji < 34; muji++) {
for(int gongji = 1; gongji < 21; gongji++) {
if((100-3*muji-5*gongji)*3+muji+gongji == 100) {
System.out.println("母鸡: "+muji+" 公鸡: "+gongji+" 小鸡:"+(100-muji-gongji));
}
}
}
System.out.println("------------------------");
int maxmuji= 100 / 3;
for(int i = 0; i < maxmuji; i++) {
int maxgongji = (100 - 3 * i) /5;
for(int j = 0; j <= maxgongji; j++) {
int xiaojiCount = (100- 3 * i - j * 5)*3;
if(i + j + xiaojiCount == 100) {
System.out.println("母鸡:" + i + " 公鸡: " + j + " 小鸡: " + xiaojiCount);
}
}
}
/**
* 求出1-10的所有数字的阶乘和
* 5!= 5*4*3*2*1
*/
int sum = 0;
int num = 1;
for(int i = 2; i <= 10; i++) {
num *= i;
sum += num;
}
System.out.println("1-10的所有数字的阶乘和:" + sum+1);
}
强制性退出程序:System.exit(0) 终止当前正在运行的java虚拟机,参数用作状态码,0表示正常退出程序,非0表示异常退出。
5 数组
5.1 定义以及初始化
5.1.1 定义
数组:一堆数据的集合。要求里面的每个元素类型一致,可以存任意数据类型,数组本身是一个引用数据类型。
5.1.2 声明
int[] nums1 = {1,2,3,4,5}; // 数组初始化方法1:只能用在声明并初始化中。
int[] nums2;
nums2 = new int[5]; // 数组初始化方法2:初始化了5个int大小的内存空间
int[] nums3 = new int[] {1,2,3,4,5}; //数组初始化方法3
// int nums4[]; //不推荐使用
System.out.println(nums1.length);
5.1.3 遍历
想改变数组的元素,必须使用for; for-each循环遍历
for (Role role : team.roles) {//循环遍历
//role=new Role();
System. out .println(role);
}
//想改变数组的元素值必须使用for
for (int i=e;i<team. roles .1ength;i++) {
Role role =team. roles[i] ;
//role=new Role() ;
//team. roles[i]=new ROle();
System. out .println(role);
}
用下标(索引)访问数据,下标从0开始,下标最大取值:长度 - 1
(java.lang.ArrayIndexOutOfBoundsException:数组下标越界)
- 数组的长度不可改变
5.2 简单的几个例子
/**
* 已知一个有序数组往里插入一个数字,请放在合适的位置
*/
public static void main(String[] args) {
int[] aa = new int[] {20,35,45,52,64};
int[] bb = new int[aa.length+1];
System.out.println("输入新增数据:");
int num = scanner.nextInt();
//找到这个数字该放的位置
int index = aa.length - 1;
for(int i = 0; i < aa.length; i++) {
if(num <= aa[i]) {
index = i;
break;
}
}
// 把值给新数组
for(int i = 0; i < bb.length; i++) {
if(i < index) {
bb[i] = aa[i];
} else if(i == index) {
bb[index] = num;
}else {
bb[i] = aa[i - 1];
}
}
for(int each : bb) {
System.out.print(each + " ");
}
}
package java201;
import java.util.Scanner;
public class Pro_01 {
public static void main(String[] args) {
/**
* 请录入学生成绩,输入后询问是否继续输入(y/n?),如果输入y,则继续录入,
* n则退出(如果输入y/n以外的字符,请重新输入y/n,为y仍然继续录入成绩)
* 退出后找出这堆成绩中的最高分,最低分,并求出平均分。
*/
Scanner scanner = new Scanner(System.in);
double[] scores = {}; // 存放老数据
double[] newscores;
boolean isContinue = false;
int count = 0; // 计数器
do {
count++;
// 新数组,存放添加的成绩,输入的成绩放在最后一位,原来的数据要从旧数组中复制过来
newscores = new double[count];
System.out.println("请输入学生的成绩:");
double score = scanner.nextDouble();
newscores[newscores.length-1] = score;
// 数据复制
for(int i = 0; i < scores.length; i++) {
newscores[i] = scores[i];
}
scores = newscores; // 引用赋值(内存中的地址)
// 控制输入是否正确
// 输入错误
boolean errorInput = true;
do {
System.out.println("是否继续输入(y/n?):");
String yesOrNo = scanner.next();
if(yesOrNo.equalsIgnoreCase("y")) { // 不区分大小写
isContinue = true;
errorInput = false;
} else if(yesOrNo.equalsIgnoreCase("n")) {
isContinue = false;
errorInput = false;
} else {
System.out.println("输出错误,请重新输入!");
errorInput = true;
}
} while(errorInput);
} while(isContinue);
double max = newscores[0];
double min = newscores[0];
double sum = 0;
// 遍历数组
for(double score : newscores) {
// System.out.print(score + " ");
if(max < score) {
max = score;
}
if(min > score) {
min = score;
}
sum += score;
}
System.out.println("最大值:" + max + " 最小值:" + min + " 平均值:"+sum/newscores.length);
}
}
运行结果:
5.3 数组的排序算法
点击链接,就可以看到了哇!
https://blog.youkuaiyun.com/weixin_45044097/article/details/96593267