javaSE(1)——入门知识

javaSE基础总结

  1. 初始java
    java执行文件后缀名.class;用于开发桌面应用软件的java版本:javaSE
  2. java基础语法
  3. 程序流程控制
  4. 数组
  5. 面向对象(重难点)
  6. 常用工具类
  7. 异常处理
  8. 集合框架(重难点)
  9. IO流
  10. 网络编程
  11. 多线程处理
  12. MySQL数据库(重点)
  13. JDBC(重点)
  14. 单元测试

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 循环
  1. 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
*/
  1. while循环:
  2. do-while循环:(可以用while循环代替)
  3. 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:数组下标越界)

  1. 数组的长度不可改变
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.csdn.net/weixin_45044097/article/details/96593267

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值