Day 01
1.IDEA 项目结构介绍
- Project(项目、工程)
- Module(模块)
- Package(包)
- class(类)
Day 02
1.命名法
小驼峰命名法:(用于给变量起名)
- 标识符是一个变量时,所有字母小写
- 标识符由多个单词组成时,从第二个单词开始,首字母大写
大驼峰命名法:(用于给类起名)
- 标识符是一个单词时,首字母大写
- 标识符是多个单词时,每个单词的首字母大写
2.变量类型
变量类型:
public class DataType {
public static void main(String[] args) {
/*
整数:
byte 1个字节
short 2个字节
int 4个字节
long 8个字节
浮点数:
float(单精度) 4个字节
double(双精度) 8个字节
字符:
char 2个字节
布尔:
boolean 1个字节
----------------------------------------------
思路:
1.整数: 首选int,int装不下的话将类型换成long,定义long类型变量需要加入L的标识
2.小数类型:首选double,非要用float需要加入F标识
*/
System.out.println("约翰尼");
int age = 18;
char gender = '男';
double height = 180.1;
boolean single = true;
System.out.println(age);
System.out.println(gender);
System.out.println(height);
System.out.println(single);
}
}
3.从键盘录入数据
import java.util.Scanner;
public class ScannerDemo {
/*
1.找符咒
代码: import java.untl.Scanner;
2.召唤精灵
代码: Scanner sc = new Scanner(System.in);
3.指挥精灵干活
代码: int age = sc.nextInt();
*/
public static void main(String[] args) {
System.out.println("请输入您的姓名:");
Scanner sc = new Scanner(System.in);
String name = sc.next();
System.out.println("请输入您的年龄:");
int age = sc.nextInt();
System.out.println("请输入您的性别:");
String gender = sc.next();
System.out.println("请输入您的身高:");
double height = sc.nextDouble();
System.out.println("请输入您的婚姻状况:");
String marriage = sc.next();
System.out.println("注册成功");
}
}
4.运算符
- / :整数相除,结果只能得到整数;想要得到带有小数的结果,需要有小数参与运算
- % :取模,作用是用来取余数的
案例:
思路:
- 个位的计算: 数值 % 10
- 十位的计算: 数值 / 10 % 10
- 百位的计算: 数值 / 10 / 10 % 10
- 千位的计算: 数值 / 10 / 10 / 10 % 10
import java.util.Scanner;
public class OperatorTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
int a = sc.nextInt();
int bai = a / 10 /10 %10;
int shi = a / 10 % 10;
int ge = a % 10 ;
System.out.println("整数"+a+"的个位为:"+ge);
System.out.println("整数"+a+"的十位为:"+shi);
System.out.println("整数"+a+"的百位为:"+bai);
}
}
5. 字符串拼接操作
- 当 + 操作中,遇到了字符串,这时 + 就是字符串拼接符,而不是算术运算
6. 自增自减运算符
-
单独使用: ++、–在变量的前面或者后面没有区别
-
参与运算使用:
- ++ 在前: 先自增,再操作
- ++ 在后: 先操作,再自增
7. 数据类型转换
- 隐式转换:取值范围小的数据,和取值范围大的数据进行运算,小的会先提升为大的之后,再进行运算
- 强制转换格式: 目标数据类型 变量名 = (目标数据类型) 被强转的数据; int b = (int) a;
Day 03
1. 逻辑运算符
- && : 逻辑与
- | | :逻辑或
- ! : 逻辑非
2. 三元运算符
-
格式:
判断条件 ? 值 1 : 值 2 ;
-
执行流程:
- 首先计算判断条件的值
- 如果值为 true , 值 1 就是运算结果
- 如果值为 false, 值 2 就是运算结果
package operator;
public class OperatorDemo1 {
/*
三元运算符:
格式: 判断条件 ? 值1:值2;
需求:求两个整数的最大值
*/
public static void main(String[] args) {
int num1 = 10 ;
int num2 = 20 ;
int max = num1 > num2 ? num1 : num2;
System.out.println(max);
}
}
package operator;
import java.util.Scanner;
public class sanyuanTest {
/*
需求:键盘录入三个整数,求出最大值并打印在控制台
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请依次输入三个整数");
int num1 = sc.nextInt();
int num2 = sc.nextInt();
int num3 = sc.nextInt();
int max1 = num1 > num2 ? num1 : num2;
int max = max1 > num3 ? max1 : num3;
System.out.println("最大值为" + max );
}
}
3. 方法(函数)
-
定义: 一段具有独立功能的代码块,不调用就不执行
-
定义格式:
public static void 方法名(){ // 方法体 } -------------------------------------------------------------------- 举例: public static void show(){ ... }
-
调用格式:
方法名(); ------------------------------------ show();
-
实际案例
package method; public class MethodDemo { /* 需求:定义一个方法,方法中定义出两个整数变量,求出最大值并打印在控制台 */ public static void main(String[] args) { getMax(); } public static void getMax(){ int num1 = 10; int num2 = 20; int max = num1 > num2 ? num1 : num2; System.out.println(max); } }
-
方法调用内存图解
- 方法没有被调用时,在方法区中的字节码文件中存放
- 方法被调用的时候,需要进入到栈内存中运行
4. 带参数方法的定义和调用
-
格式
定义1 : public static void 方法名(数据类型 变量名){ //方法体 } 定义2 : public static void 方法名(数据类型 变量名1,数据类型 变量名2...){ //方法体 } ---------------------------------------------------- 调用1: 方法名(参数); 调用2: 方法名(参数1,参数2);
-
形参与实参
- 形参: 指在定义方法时,所声明的参数
- 实参:全称实际参数,调用方法时,所传入的参数
5.带返回值方法的定义和调用
-
格式
public static 数据类型 方法名(数据类型 变量名1 , 数据类型 变量名2...){ ruturn 数据值; }
-
void : 当前方法没有返回值
6. 方法重载的关系要求
-
在同一个类中,定义了多个同名的方法,但每个方法具有不同的参数类型或参数个数,这些同名的方法,就构成了重载关系
-
注意:识别方法之间是否重载关系,只看方法名和参数,跟返回值无关
Day 04 流程控制语句
1. 流程控制语句
- 顺序结构
- 分支结构(if,switch)
- 循环结构(for,while,do…while)
2. if 语句
package mif;
import java.util.Scanner;
public class IfDemo {
public static void main(String[] args) {
// ifTest1();
// ifTest2();
ifTest3();
}
/*
if 语句的第一种格式:
if (判断条件){
语句体;
}
*/
public static void ifTest1(){
System.out.println("开始");
int age = 18;
if (age >= 18){
System.out.println("可以去网吧");
}
System.out.println("结束");
}
/*
if语句的第二种格式:
if(判断条件){
语句体1;
}
else{
语句体2;
}
*/
public static void ifTest2(){
System.out.println("开始");
int age = 17;
if (age >= 18){
System.out.println("可以去网吧!");
}
else {
System.out.println("不可以去网吧");
}
System.out.println("结束");
}
/*
if 语句的第三种格式:
if(判断条件1){
语句体1;
}
else if(判断条件2){
语句体2;
}
else if(判断条件3){
语句体3;
}
....
else{
语句体n+1;
}
*/
public static void ifTest3(){
// 需求:键盘录入一个整数数值,表示用户身份 1.会员 2.非会员 其他.您的输入有误
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的身份:");
int input = sc.nextInt();
if (input == 1){
System.out.println("您是会员!");
}
else if (input == 2){
System.out.println("您不是会员");
}
else {
System.out.println("您的输入有误");
}
}
}
3. Switch 语句
package mswitch;
import java.util.Scanner;
public class SwitchDemo {
public static void main(String[] args) {
switchTest();
}
/*
switch语句格式:
switch(将要匹配的值){
case 值1 :
语句体1;
break;
case 值2 :
语句体2;
break;
case 值3 :
语句体3;
break;
.....
default :
语句体n+1;
break;
}
需求: 键盘录入一个整数,根据录入的数值,程序打印出对应的星期
*/
public static void switchTest(){
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
int num = sc.nextInt();
switch (num){
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;
}
}
}
4. Switch 语句的注意事项
-
case 后面的值不允许重复
-
case 后面的值只能是字面量,不能是变量
-
switch()中可接收的类型
- 基本数据类型:byte short char int
- 引用数据类型:jdk5 开始可以枚举,jdk7 开始可以是 String 字符串
5. for 循环格式
-
格式:
for(初始化语句 ; 条件判断语句 ; 条件控制语句){ 循环体语句; }
-
示例:
package loop; public class LoopDemo { public static void main(String[] args) { forTest2(); } /* 需求:请用循环在控制台打印10次黑马程序员 */ public static void forTest(){ for (int i = 1; i<=10 ; i++){ System.out.println("黑马程序员"); } } /* 需求: 使用循环模拟计时器 在控制台打印1-3,3-1 */ public static void forTest2(){ for (int i=1; i<=3; i++){ System.out.println(i); } System.out.println("-----------------------"); for (int i=3; i>=1; i--){ System.out.println(i); } } }
6. for 循环注意事项
- for 循环{ }中定义的变量,在每一轮循环结束后,都会从内存中释放
- for 循环()中定义的变量,在整个循环结束后,会从内存中释放
- for 循环()和{ }中间不要写分号
7.print 打印语句
- System.out.println( ); 打印数据后,有换行效果。
- System.out.print( ); 打印数据后,没有换行效果。
8. while 循环格式
while循环格式:
初始化语句;
while(判断条件){
循环体语句;
条件控制语句;
}
9.break 语句
- 结束循环,结束 switch 语巨
10.Continue
- 跳过
- continue 只能在循环中使用
11.无限循环(死循环)
-
for 循环
for(;;){ }
-
while 循环
while(true){ }
Day 05 数组
1. 数组
- 数组指的是一种容器,可以用来存储同种数据类型的多个值
2.数组静态初始化
- 初始化:就是在内存中,为数组开辟空间,并将数据存入容器中的过程
3.数组的定义格式
1.
数据类型[] 数组名;
2.
数据类型 数组名[];
- 注意:这种定义格式,定义出来的,只是数组类型的变量而已,内存中还没有创建出数组容器
4.数组的静态初始化格式
1. 完整格式
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
2.简化格式
数据类型[] 数组名 ={元素1,元素2,元素3...};
5.length
数组名.length:动态获取到数组的长度(元素的个数)
6.数组遍历
- 将数组中的每一个(所有)的内容,取出来进行操作
for(i=1 ; i < arr.length ; i++){
system.out.println(arr[i]);
}
- 数组遍历快捷键:数组名.for i
7.数组动态初始化
- 初始化时只指定数组长度,由系统为数组分配初始值
格式:
数据类型[] 数组名 = new 数据类型[数组长度];
示例:
int[] arr = new int[3];
8.两种初始化的区别
- 动态初始化:手动指定数组长度,由系统给出默认初始化值
- 静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组长度
9.抽却方法快捷键
ctrl+alt+m:抽取方法快捷键
10.方法的参数传递问题
- 1.基本数据类型:传递的是数据值
- 2.引用数据类型:传递的是地址值
11.二维数组介绍
-
二维数组是一种容器,该容器用于存储一维数组
-
静态初始化格式:
格式: 数据类型[][] 数组名 = {{元素1,元素2},{元素1,元素2}};
-
二维数组在存储一维数组的时候,具体存储的是一维数组的地址值
-
动态初始化格式:
格式: 数据类型[][] 数组名 = new 数据类型[m][n]; 其中: m表示这个二维数组中存放了多少个一维数组; n表示每一个一维数组可以存放多少个元素;
Day 06 一些案例
1.数组反转–普通方法
-
普通的使用第三个变量方法
public static void swap(int[] arr){
int temp = 0;
for (int i = 0; i < arr.length/2; i++) {
temp = arr[i];
arr[i] = arr[arr.length-1-i] ;
arr[arr.length-1-i] = temp;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
2.数组反转–使用双指针
-
使用两个指针进行数据交换
public static void swap1(int[] arr){
/*
for(初始化语句;循环条件;条件控制语句){
循环体; }
*/
for (int start = 0 , end = arr.length-1 ; start < end ; start++ , end--){
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}