回顾
1. 第一天
HelloWorld.java
public class 类名{ //大写驼峰
//程序的入口 main
public static void main(String[] aaa){
//逻辑功能代码
}
}
注释:
单行注释 // ctrl+/
多行注释 /* */ ctrl+shift+/
文档注释 /**
*
*/
配置jdk环境变量:
1.1 path: jdk的bin目录 bin有很多exe java javac
1.2 JAVA_HOME: jdk的根目录 path: %JAVA_HOME%\bin
java程序的运行:
1.1 创建java文件 HelloWorld.java
1.2 编译java程序 javac HelloWorld.java
1.3 运行class文件 java HelloWorld
数据类型:
1.1 引用数据类型 数组 类 接口
1.2 基本数据类型
4类八种
整数类型 byte short int long 0
小数类型 float double 0.0
布尔类型 boolean true false
单字符类型 char 'a' \u0000
1.3 变量: 代表内存中的数据
1. 全局变量
[访问权限修饰符] [普通修饰符] 数据类型 变量名称 = 数据;
2. 局部变量
[普通修饰符] 数据类型 变量名称 = 数据; int num = 100;
1.4 数据类型转换
byte-->short-->char-->int-->long-->float-->double
1. 自动转换
低精度的数据自动转换成高精度的数据
short s = 100;
long lon =s;
2. 强制转换
高精度的数据转换成 低精度的数据
double d = 10.12345;
int num = (int)d; // 对于基本数据类型而言 数据溢出
1.5 运算符
1.6 流程控制语句
顺序结构
分支结构
1. 条件判断 if else if else
2. 条件选择 switch case break default ---> 等值判断
switch(数据){// byte short int char String enum
case 1:
break;
}
循环结构
1. while
2. do..while
3. for
4. 增强for循环: 目前只适合于遍历数组
关键字:
break: 与switch和循环 代表跳出当前的switch和循环
continue:循环 代表跳过本次循环 继续执行以下循环
if(){}
1.7 数组 []
定义: 存储相同类型的指定length个数据。 容器 空间固定的
语法:
[普通修饰符] 数据类型[] 数组名称/变量/引用 = new 数据类型[length];
// 初始化: 在内存占据一定空间 且赋值(数组元素)
int[] array = new int[4];
//操作数组元素: index 0-length-1
//1. 新增/修改 array[0] = 100;
//2. 删除 移动位置
//3. 遍历/查询
for(int a:array){
//a就是维护数组里面的每个数据
}
//1.NPE 空指针 变量=null
//2.ArrayIndexOutofBoundException index
每日随机
public static void main(String[] args) {
//摇号 1-30
//double randomNum = Math.random()*30+1;//0.0-30.0 包头不包尾
//System.out.println(randomNum);
//1000-10000
//(Math.random()*9000+1000)
int[] array = {5};//维护之前随机过的数字
//循环遍历 参与过这些号码
int num;
while (true) {
boolean flag = false;
num = (int) (Math.random() * 30 + 1);
for (int i : array) {
if (num == i) {
flag = true;
break;
}
}
//从开始到末尾一直比较 都与随机数字不等的话 结束外层循环
if (!flag) {
break;
}
}
System.out.println("随机的数字:" + num);
}
方法
//psvm/main
public static void main(String[] args) {
}
1. 组成部分
[1. 访问权限修饰符] public 公共的 private protected 默认/缺省
[2. 普通修饰符] static 静态的 final synchronized native abstract
3. 方法的返回值类型----> 所有的数据类型都可以充当方法的返回值类型
---> 只能返回一种数据类型
1.1 void 无返回值类型---> Void类
1.2 有返回值类型
4. 方法名称----> 变量名 类名 方法名 都属于标识符。只要自己命名的东西
---> 规范: 小写驼峰 目前方法名唯一
5. 形式参数---->形参
1.1 无参 a()
1.2 有参 所有的数据类型都可以充当参数 b(int a,String s)
其实就是局部变量
[6. {}] 方法体 编写功能代码
2. 分类
1.1 无参无返回值
1.2 无参有返回值
1.3 有参无返回值
1.4 有参有返回值
3. 自定义方法
3.1 无参无返回值
//方法与方法之间是平级的关系
//创建无参无返回值方法
public static void demo() {
System.out.println("demo.............");
}
public static void a() {
System.out.println("a.............");
}
//方法入栈 先进后出
public static void main(String[] args) {
System.out.println("main开始....................");
//调用a方法
a();
System.out.println("main结束....................");
}
3.2 无参有返回值
//需求: 模拟用户登录
public static boolean userLogin() {
String username = "admin";
String password = "admin";
Scanner input = new Scanner(System.in);
System.out.println("请录入用户名:");
String name = input.nextLine();
System.out.println("请录入密码:");
String pass = input.nextLine();
if (!username.equals(name) || !password.equals(pass)) {
return false;
}
//jdhffgd
return true;
}
public static void main(String[] args) {
System.out.println("main开始....................");
//调用demo方法
//对于方法的返回值 谁调用它 就把数据返给谁
//int num = demo();//接收返回值
//int result = num + 100;
if(userLogin()){
System.out.println("登录成功");
}else{
System.out.println("登录失败");
}
System.out.println(userLogin());
System.out.println("main结束...................." );
}
3.3 有参无返回值
1. 基本数据类型
//创建有参无返回值
//形式参数: 参数个数 参数类型
public static void demo1(int num1) {
System.out.println("demo1.。。。。。。。。。。。");
if (num1 < 0) {
System.out.println("num1是一个负数");
return;
}
num1 += 100;
System.out.println("num1运算之后的数据:" + num1);//200
}
public static void main(String[] args) {
System.out.println("main开始..................");
//调用方法
//调用有参的方法 必须传参 实际参数---> 实参
//int num1 = 100;
//demo1(num1);
System.out.println("main结束..................");
//System.out.println("main里面的num1的数据:" + num1);
//参数传递: 基本数据类型作为形参 传递的是数据
}
2. 引用数据类型_数组
//修改数组的第一个数据
public static void demo2(int[] array) {
//提前预判 避免出现一些不正常的现象
if (array == null) {
System.out.println("参数不能为null");
return;
}
int length = array.length;
if (length == 0) {
System.out.println("[]");
return;
}
array[0] = 100;
//遍历所有的数据
/*for (int i : array) {
System.out.println("元素是:" + i);
}*/
System.out.println("demo2修改之后的数组元素:" + Arrays.toString(array));//[100, 2, 3]
}
public static void main(String[] args) {
System.out.println("main开始..................");
//int[] array = new int[]{1, 2, 3};
//demo2(array);
//System.out.println("main里面的array的数据:" + Arrays.toString(array));// [1,2,3] [100,2,3]
}
3. 引用数据类型_String
public static void demo3(String str) {
System.out.println("demo3修改之前的数据:" + str);
str = "hello";
System.out.println("demo3..........str:" + str);
}
String str = "abc";
demo3(str);
System.out.println("main里面str的数据:" + str);//hello abc String的数据不可变的 常量 final char[] value;
4. 可变参数
//用户注册
//用户名 密码 年龄 简介---> 获得数据数量不固定的
//不清楚具体传输多少个数据的时候 可以使用可变参数进行维护
//数据类型...变量名称
//一个方法里面有且只有1个可变参数 必须在方法形参的最后一个位置上
//可变参数就是一个一维数组 传参的时候可以传递>=0个数据
//底层使用的时候比较多。 封装的时候 反射
public static void userRegister(String... params) {
System.out.println("params:" + Arrays.toString(params));//[]
}
3.4 有参有返回值
/**
* 模拟实现计算器功能
*
* @param num1 第一个数字
* @param num2 第2个数字
* @param operator 运算符
* @return 运算之后的结果
*/
public static double cal(int num1, int num2, String operator) {
if ("/".equals(operator) || "%".equals(operator)) {
if (num2 == 0) {
System.out.println("除数不能为0");
//不需要返回数据 还要结束当前这个方法 终止当前程序
//1.可以使用手动产生异常 throws
//2.System.exit(-1);
System.exit(-1);//终止当前程序
}
}
double result = 0;
switch (operator) {
case "+":
result = num1 + num2;
break;
case "-":
result = num1 - num2;
break;
case "*":
result = num1 * num2;
break;
case "/":
result = num1 / num2;
break;
case "%":
result = num1 % num2;
break;
default:
System.out.println("录入运算符不符合要求!");
System.exit(-1);
}
return result;
}