java基础笔记(一)
java基础笔记(一)
学了这么久java,给我的感觉还是得基础要扎实,基础不牢,学再牛批的技术都是空中楼阁,所以来复习一下基础吧
1. 数据类型
计算机中的数据存储
计算机用于各种数据,无论内存和硬盘,最终都是以二进制数据形式存储。
计算机中最小信息单元叫“位”又称之为“比特位”,由0和1组成,通常用小写的字母”b”表示。
计算机中最小的存储单位叫做”字节(byte)”由8个连续的位组成,通常用大写字母”B”表示
存储单位换算 1B(字节) = 8bit 1KB = 1024B 1MB = 1024KB 1GB = 1024MB 1TB = 1024GB
java中的数据类型
Java是强类型语言,对于每种数据都给出了明确的数据类型。
不同数据类型分配不同的内存空间,所以各种数据范围大小也是不一样的。
在java中数据类型分为两类分别是 基本数据类型 和 引用数据类型
1.1 基本数据类型
①整数类型:long、int、short、byte
②浮点类型:float、double
③字符类型:char
④布尔类型:boolean
基本数据类型四类八种
byte的取值范围
整数和小数的取值大小的关系
double>float>long>int>short>byte
long类型变量:需要加入L后缀,建议大写
float类型变量:需要加入F标识,建议大写
//byte 1个单位 -128~127
//short 2个单位 -32768~32767
//int 4个单位 -2的31次方到2的31次方-1
//long 8个单位 -2的63次方到2的63次方-1
//float 4个单位 负数:-3.402823E+38到-1.401298E-45 正数: 1.401298E-45到3.402823E+38
//double 8个单位 -128~127负数:-1.797693E+308到-4.9000000E-324 正数:4.9000000E-324 到1.797693E+308
//char 2个单位 -128~1270-65535
//boolean 1个单位 true,false
1.2 引用数据类型
类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型
例:
String
类型就是引用类型。
1.3 数据类型存储位置的区别
基本变量类型
- 在方法中定义的非全局基本数据类型变量的具体内容是存储在栈中的
引用变量类型
- 只要是引用数据类型变量,其具体内容都是存放在堆中的,而栈中存放的是其具体内容所在内存的地址
如图:
基本数据类型 引用数据类型:
1.3传递方式的区
基本变量类型
- 在方法中定义的非全局基本数据类型变量,调用方法时作为参数是按数值传递的
引用变量类型
- 引用数据类型变量,调用方法时作为参数是按引用传递的,传递的是引用的副本
2. 数据存储
2.1 常量
常量:
在程序运行过程中,其值不可以发生改变的量。
常量分类:
字符串常量: 用双引号括起来的内容。"HelloWorld","黑马程序员"
整数常量: 不带小数的数字。666,-88
小数常量: 带小数的数字。13.14,-5.21
字符常量: 用单引号括起来的内容。'A','0','我'
布尔常量: 布尔值,表示真假。true,false
空常量: 一个特殊的值,空值。null
public class Test_01常量 {
public static void main(String[] args) {
//字符串常量
System.out.println("黑马程序员");
//整数常量
System.out.println(10);
//小数常量
System.out.println(88.88);
//字符常量
System.out.println('a');
//布尔常量
System.out.println(true);
System.out.println(false);
//空常量 注意,空常量不能直接输出的
//System.out.println(null);//Error:(32, 27) java: 对println的引用不明确
//以后学,赋值使用。
//String s =null;
//System.out.println(s);
}
}
3. 运算符
3.1 运算符概述
运算符概述
运算符
对常量或者变量进行操作的符号
表达式
用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。
不同运算符连接的表达式体现的是不同类型的表达式。
举例说明:
int a = 10;
int b = 20;
int c = a + b;
+:是运算符,并且是算术运算符
a + b:是表达式,由于+是算术运算符,所以这个表达式叫算术表达式
3.2 算术运算符
算术运算符
分类
符号 作用 说明
+ 加 参看小学一年级
- 减 参看小学一年级
* 乘 参看小学二年级,与"×"相同
/ 除以 参看小学二年级,与"÷"相同
% 取余 获取的是两个数据做除法的余数。
注意事项
/和%的区别:两个符号都是做除法,/取结果的商,%取结果的余数。
算术表达式中包含不同数据类型的数据时,小类型会自动进行提升为较大的类型参与运算。
byte类型,short类型和char类型参与运算的时候将被提升到int类型。
public class Test_01算数运算符 {
public static void main(String[] args) {
int a=6;
int b =4;
//加法
/*int c =a+b;
System.out.println(c);*/
System.out.println(a+b);//10
//减法
System.out.println(a-b);//2
//乘法
System.out.println(a*b);//24
//除法
System.out.println(a/b);//1
//取余
System.out.println(a%b);//2
//想要得到小数,需要由小数参与运算 (java中只支持同类型运算,如果类型不一样,小类型自动转换为大类型)
System.out.println(1.0*a/b);//1 1.0*6.0=6.0 6.0/4.0=1.5
}
}
3.3 字符的+操作
概述
字符参与操作,拿字符在计算机底层对应的数值来进行计算的
public class Test_02字符的加操作 {
public static void main(String[] args) {
//字符参与运算,使用底层对应的数值运算
System.out.println('A'+1);
System.out.println('a'+1);
System.out.println('0'+1);
//byte,short,char参与运算,自动提升为int类型
byte b1 =10;
byte b2=20;
//byte b3= b1+b2;//(int)b1+(int)b2 报错
//int b3= b1+b2;
byte b3 = (byte) (b1 + b2);
}
}
3.4 字符串的+操作
概述
"+"操作中出现字符串时,这个"+"是字符串连接符,连接后得到一个新的字符串,而不是算术运算
范例:"itheima"+ 666
拼接规则
当连续进行"+"操作时,从左到右逐个执行,如果出现字符串,就是连接运算符,否则就是算术运算。
范例:1 + 99 + "年黑马"
范例:"6"+6+6
public class Test_03字符串的加操作 {
public static void main(String[] args) {
System.out.println(1 + 99 + "年黑马");
System.out.println("6" + 6 + 6);
System.out.println(10);
int age=10;
System.out.println(age);
System.out.println("小明的年龄是:"+age);
}
}
3.5 赋值运算符
分类
符号 作用 说明
= 赋值 a=10,将10赋值给变量a
+= 加后赋值 a+=b,将a+b的值给a
-= 减后赋值 a-=b,将a-b的值给a
*= 乘后赋值 a*=b,将a×b的值给a
/= 除后赋值 a/=b,将a÷b的商给a
%= 取余后赋值 a%=b,将a÷b的余数给a
注意事项
扩展的赋值运算符隐含了强制类型转换。
public class Test_04赋值运算符 {
public static void main(String[] args) {
int a = 10;
int b = 20;
a += b;//a=a+b;
System.out.println(a);
//注意:特殊赋值运算符,隐含了强制类型转换
byte b1 = 10;
byte b2 = 20;
b1+=b2;// b1 = (byte)(b1 + b2);
System.out.println("b1="+b1);
}
}
3.6 自增自减运算符
分类
符号 作用 说明
++ 自增 变量的值加1
-- 自减 变量的值减1
注意事项
++和-- 既可以放在变量的后边,也可以放在变量的前边
单独使用时,放在变量的前边和后面没有区别
参与操作时:
放在变量的后边,先拿变量的值参与操作,后拿变量做++或者--。
放在变量的前边,先拿变量做++或者--,后拿变量的值参与操作。
常见用法
单独使用。
public class Test_05自增自减运算符 {
public static void main(String[] args) {
//基本使用
int i = 10;
//i++;//i=i+1;
++i;//i=i+1;
System.out.println("i=" + i);
//混合使用
int a = 10;
//前置:自增自减运算符放到变量的前面 先自增自减运算,后使用该变量的值
//int b = ++a;
//后置:自增自减运算符放到变量的后面 先使用该变量的值,后自增自减运算
int b = a++;
System.out.println("a=" + a + ",b=" + b);
//面试题
int d=10;
int e=20;
int c = d++ + ++d + ++e + e++;// 10(d=11) + (d=12)12 + (e=21)21 + 21(e=22)
System.out.println(c);
}
}
3.7 关系运算符
分类
符号 说明
== a==b,判断a和b的值是否相等,成立为true,不成立为false
!= a!=b,判断a和b的值是否不相等,成立为true,不成立为false
> a>b,判断a是否大于b,成立为true,不成立为false
>= a>=b,判断a是否大于等于b,成立为true,不成立为false
< a<b,判断a是否小于b,成立为true,不成立为false
<= a<=b,判断a是否小于等于b,成立为true,不成立为false
注意事项
关系运算符的结果都是boolean类型,要么是true,要么是false
不要将"=="误写成"="。
public class Test_06关系运算符 {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 10;
//==
System.out.println(a == b);//false
System.out.println(a == c);//true
//!=
System.out.println(a != b);//true
System.out.println(a != c);//false
//>
System.out.println(a > b);//false
System.out.println(a > c);//false
//>=
System.out.println(a >= b);//false
System.out.println(a >= c);//true
System.out.println("--------");
//注意事项 不要把== 写成 =
boolean bb = false;
System.out.println(bb == true);//false
System.out.println(bb = true);//false
}
}
3.8 逻辑运算符
概述
在数学中,判断一个数据x,大于3,小于6,可以这样表示:3<x<6。
在Java中,不支持对一个变量做两种判断,需要将上述式子拆解,再进行合并。
所以说,逻辑运算符,是用来连接关系表达式的运算符。也可以直接连接布尔类型的常量或变量。
分类
符号 作用 说明
& 逻辑与 a&b,a和b都是true,结果为true,否则为false
| 逻辑或 a|b,a和b都是false,结果为false,否则为true
^ 逻辑异或 a^b,a和b结果不同为true,相同为false
! 逻辑非 !a,结果和a的结果正好相反
public class Test_07逻辑运算符 {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 10;
// & 有假则假
System.out.println(b > a & b > c);//true & true ===true
System.out.println(b > a & b < c);//true & false ===false
System.out.println(b < a & b > c);//false & true ===false
System.out.println(b < a & b < c);//false & false ===false
System.out.println("--------");
// | 有真则真
System.out.println(b > a | b > c);//true & true ===true
System.out.println(b > a | b < c);//true & false ===true
System.out.println(b < a | b > c);//false & true ===true
System.out.println(b < a | b < c);//false & false ===false
System.out.println("--------");
// ^ 不同为true,相同为false
System.out.println(b > a ^ b > c);//true & true ===false
System.out.println(b > a ^ b < c);//true & false ===true
System.out.println(b < a ^ b > c);//false & true ===true
System.out.println(b < a ^ b < c);//false & false ===false
System.out.println("--------");
// !
boolean bb =true;
System.out.println(!bb);//false
System.out.println(!!bb);//true
System.out.println(!!!bb);//false
}
}
3.9 短路逻辑运算符
分类
符号 作用 说明
&& 短路与 作用和&相同,但是有短路效果
|| 短路或 作用和|相同,但是有短路效果
短路效果
短路与&&,如果左边为假,右边不执行。
短路或||,如果左边为真,右边不执行。
public class Test_08短路逻辑运算符 {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 10;
// && 有假则假
System.out.println(b > a && b > c);//true && true ===true
System.out.println(b > a && b < c);//true && false ===false
System.out.println(b < a && b > c);//false && true ===false
System.out.println(b < a && b < c);//false && false ===false
System.out.println("--------");
// || 有真则真
System.out.println(b > a || b > c);//true | true ===true
System.out.println(b > a || b < c);//true | false ===true
System.out.println(b < a || b > c);//false | true ===true
System.out.println(b < a || b < c);//false | false ===false
System.out.println("--------");
//短路效果
//单& 有假则假,如果左边为假,右边执行
//双& 有假则假,如果左边为假,右边不执行(短路效果)
int i = 20;
//System.out.println(false & i++ > 20);
System.out.println(false && i++ > 20);
System.out.println("i=" + i);
}
}
3.10 三元运算符
格式:
关系表达式 ? 表达式1 : 表达式2;
范例:
a > b ? a : b;
执行流程:
首先计算关系表达式的值
如果值为true,表达式1的值就是运算结果
如果值为false,表达式2的值就是运算结果
public class Test_09三元运算符 {
public static void main(String[] args) {
int a = 10;
int b = 20;
//需求:返回a和b中的较大值,并打印
int max = (a > b) ? a : b;
System.out.println("max=" + max);
}
}
3.11 两只老虎案例
需求:两只老虎
动物园里有两只老虎,已知两只老虎的体重分别为180kg、200kg,请用程序实现判断两只老虎的体重是否相同。
思路:
准备数据
比较数据,获取结果
打印结果
public class Test_10三元运算符案例1 {
public static void main(String[] args) {
//定义变量,记录两只老虎的体重
int weight1 = 180;
int weight2 = 200;
//比较两只老虎的体重,是否相同
boolean b = (weight1 == weight2) ? true : false;
//打印结果
System.out.println("两只老虎体重的比较结果是:" + b);
}
}
3.12 三个和尚案例
需求:三个和尚
一座寺庙里住了三个和尚,已知他们的身高分别是150cm、210cm、165cm,使用程序或取三个和尚的最高身高。
思路:
准备数据
比较前两个和尚数据,获取结果
使用结果与第3个和尚比较,获取最终结果
打印结果
public class Test_11三元运算符案例2 {
public static void main(String[] args) {
//定义三个变量,记录三个和尚的身高
int height1 = 150;
int height2 = 210;
int height3 = 165;
//比较前两个和尚的身高,使用临时身高变量记录结果
int tempHeight = (height1 > height2) ? height1 : height2;
//比较临时身高和第三个和尚的身高,使用最高身高变量记录结果
int maxHeight = (tempHeight > height3) ? tempHeight : height3;
//打印结果
System.out.println("三个和尚的最高身高是:" + maxHeight);
}
}
4. 数据输入
4.1 基本使用
使用步骤
导包:
import java.util.Scanner;
创建对象:
Scanner sc = new Scanner(System.in);
接收数据:
int x = sc.nextInt();
import java.util.Scanner; //要导入的位置
public class Test_01Scanner基本使用 {
public static void main(String[] args) {
//创建对象
Scanner sc = new Scanner(System.in);
//提示语句
System.out.println("请输入数据");
//接受数据
int x = sc.nextInt();
//打印接收的数据
System.out.println(x);
}
}
4.2 三个和尚案例优化
需求:三个和尚
一座寺庙里住着三个和尚,他们的身高必须经过测量得出,请用程序实现获取这三个和尚的最高身高。
思路:
准备数据(Scanner)
比较前两个和尚数据,获取结果
使用结果与第3个和尚比较,获取最终结果
打印结果
导包:
1:手动导包 import java.util.Scanner;
2:快捷键导包 Alt+Enter
3:自动导包
快速生产等于号及变量
Ctrl+Alt+V
import java.util.Scanner;
public class Test_02Scanner练习 {
public static void main(String[] args) {
//身高未知,采用键盘录入实现。首先导包,然后创建对象。
Scanner sc = new Scanner(System.in);
//键盘录入三个身高分别赋值给三个变量。
System.out.println("请输入第1个和尚的身高");
int height1 = sc.nextInt();
System.out.println("请输入第2个和尚的身高");
int height2 = sc.nextInt();
System.out.println("请输入第3个和尚的身高");
int height3 = sc.nextInt();
//用三元运算符获取前两个和尚的较高身高值,并用临时身高变量保存起来。
int tempHeight = (height1 > height2) ? height1 : height2;
//用三元运算符获取临时身高值和第三个和尚身高较高值,并用最大身高变量保存。
int maxHeight = (tempHeight > height3) ? tempHeight : height3;
//输出结果。
System.out.println("三个和尚的最高身高是:" + maxHeight);
}
}
5. 基础语法4-分支语句
5.1 流程控制语句概述
分类
顺序结构
分支结构(if语句,switch语句)
循环结构(for语句,while语句,do...while语句)
顺序结构
没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
5.2 if语句格式1
格式:
if (关系表达式) {
语句体;
}
执行流程:
1:首先计算关系表达式的值
2:如果关系表达式的值为true就执行语句体
3:如果关系表达式的值为false就不执行语句体
4:继续执行后面的语句内容
需求:判断a和b的值是否相等,如果相等,就在控制台输出:a等于b
public class Test_02if格式1 {
public static void main(String[] args) {
System.out.println("开始");
//定义两个变量
int a = 10;
int b = 20;
//需求:判断a和b的值是否相等,如果相等,就在控制台输出:a等于b
b=10;
if (a == b) {
System.out.println("a等于b");
}
System.out.println("结束");
}
}
5.3 if语句格式2
格式:
if (关系表达式) {
语句体1;
} else {
语句体2;
}
执行流程:
1:首先计算关系表达式的值
2:如果关系表达式的值为true就执行语句体1
3:如果关系表达式的值为false就执行语句体2
4:继续执行后面的语句内容
需求:判断a是否大于b,如果是,在控制台输出:a的值大于b,如果不是,在控制台输出:a的值不大于b
public class Test_03if格式2 {
public static void main(String[] args) {
System.out.println("开始");
//定义两个变量
int a=10;
int b=20;
//需求:判断a是否大于b,如果是,在控制台输出:a的值大于b,如果不是,在控制台输出:a的值不大于b
b=5;
if (a>b){
System.out.println("a的值大于b");
}else{
System.out.println("a的值不大于b");
}
System.out.println("结束");
}
}
5.4 if语句格式2练习
需求:
任意给出一个整数,请用程序实现判断该整数是奇数还是偶数,并在控制台输出该整数是奇数还是偶数。
public class Test_04if格式2练习 {
public static void main(String[] args) {
//为了体现任意给出一个整数,采用键盘录入一个数据。(导包,创建对象,接收数据)
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数值");
int x = sc.nextInt();
//判断整数是偶数还是奇数要分两种情况进行判断,使用if..else结构
//判断是否偶数需要使用取余运算符实现该功能 number % 2 == 0
//根据判定情况,在控制台输出对应的内容
if ((x % 2) == 0) {
System.out.println(x + ":是一个偶数");
} else {
System.out.println(x + ":是一个奇数");
}
}
}
5.5 if语句格式3
格式:
if (关系表达式1) {
语句体1;
} else if (关系表达式2) {
语句体2;
}
…
else {
语句体n+1;
}
执行流程:
1:首先计算关系表达式1的值
2:如果值为true就执行语句体1;如果值为false就计算关系表达式2的值
3:如果值为true就执行语句体2;如果值为false就计算关系表达式3的值
4:…
5:如果没有任何关系表达式为true,就执行语句体n+1。
需求:键盘录入一个星期数(1,2,...7),输出对应的星期一,星期二,...星期日
import java.util.Scanner;
public class Test_05if格式3 {
public static void main(String[] args) {
System.out.println("开始");
//需求:键盘录入一个星期数(1,2,...7),输出对应的星期一,星期二,...星期日
//键盘录入星期数
Scanner sc = new Scanner(System.in);
System.out.println("请输入星期数");
int week = sc.nextInt();
//通过if语句的第3中格式,对输入1-7的多种情况做判断
if (week == 1) {
System.out.println("星期一");
} else if (week == 2) {
System.out.println("星期二");
} else if (week == 3) {
System.out.println("星期三");
} else if (week == 4) {
System.out.println("星期四");
} else if (week == 5) {
System.out.println("星期五");
} else if (week == 6) {
System.out.println("星期六");
} else if (week == 7) {
System.out.println("星期日");
} else {
System.out.println("您输入的数有误");
}
System.out.println("结束");
}
}
5.6 if语句格式3练习
需求:
小明快要期末考试了,小明爸爸对他说,会根据他不同的考试成绩,送他不同的礼物,假如你可以控制小明的得分,
请用程序实现小明到底该获得什么样的礼物,并在控制台输出。
奖励:
95~100 山地自行车一辆
90~94 游乐场玩一次
80~89 变形金刚玩具一个
80以下 胖揍一顿
import java.util.Scanner;
public class Test_06if格式3练习 {
public static void main(String[] args) {
//小明的考试成绩未知,可以使用键盘录入的方式获取值
Scanner sc = new Scanner(System.in);
System.out.println("请输入小明的成绩");
int score = sc.nextInt();
//由于奖励种类较多,属于多种判断,采用if...else...if格式实现
//为每种判断设置对应的条件
//为每种判断设置对应的奖励
if (score >= 95 && score <= 100) {
System.out.println("山地自行车一辆");
} else if (score >= 90 && score <= 94) {
System.out.println("游乐场玩一次");
} else if (score >= 80 && score <= 89) {
System.out.println("变形金刚玩具一个");
} else if (score > 0 && score <= 79) {
System.out.println("胖揍一顿");
} else {
System.out.println("您输入的分数有误");
}
}
}
5.7 switch语句格式
格式:
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
…
default:
语句体n+1;
[break;]
}
格式说明:
表达式:取值为byte、short、int、char,JDK5以后可以是枚举,JDK7以后可以是String。
case:后面跟的是要和表达式进行比较的值。
break:表示中断,结束的意思,用来结束switch语句。
default:表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
执行流程:
首先计算表达式的值。
依次和case后面的值进行比较,如果有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
如果所有的case后面的值和表达式的值都不匹配,就会执行default里面的语句体,然后程序结束掉。
需求:键盘录入一个星期数(1,2,...7),输出对应的星期一,星期二,...星期日
import java.util.Scanner;
public class Test_07switch格式 {
public static void main(String[] args) {
System.out.println("开始");
//需求:键盘录入一个星期数(1,2,...7),输出对应的星期一,星期二,...星期日
//键盘录入星期数
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个星期数");
int week = sc.nextInt();
//判断星期数
switch (week) {
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;
}
System.out.println("结束");
}
}
5.8 switch语句格式练习
需求:春夏秋冬
一年有12个月,分属于春夏秋冬4个季节,键盘录入一个月份,请用程序实现判断该月份属于哪个季节,并输出。
春:3、4、5
夏:6、7、8
秋:9、10、11
冬:1、2、12
import java.util.Scanner;
public class Test_08switch格式练习 {
public static void main(String[] args) {
//键盘录入月份数据,使用变量接收
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个月份");
int month = sc.nextInt();
//多情况判断,这里采用switch语句实现,在每种情况中,完成输出对应的季节
/* switch (month) {
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;
case 8:
System.out.println("夏天的风");
break;
case 9:
System.out.println("秋天不回来");
break;
case 10:
System.out.println("秋天不回来");
break;
case 11:
System.out.println("秋天不回来");
break;
case 12:
System.out.println("冬天的雪");
break;
case 1:
System.out.println("冬天的雪");
break;
case 2:
System.out.println("冬天的雪");
break;
default:
System.out.println("您输入的月份有误");
}*/
switch (month) {
case 3:
case 4:
case 5:
System.out.println("春天在哪里");
break;
case 6:
case 7:
case 8:
System.out.println("夏天的风");
break;
case 9:
case 10:
case 11:
System.out.println("秋天不回来");
break;
case 12:
case 1:
case 2:
System.out.println("冬天的雪");
break;
default:
System.out.println("您输入的月份有误");
}
}
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 fanfanの博客!