目录
1. 数据类型
1.1 Java中数据类型的分类
- 基本数据类型
- 引用数据类型
1.2 基本数据类型的四类八种
整数类型:byte、short、int、long
浮点类型:float、double
字符类型:char
布尔类型:boolean
扩展:
引用数据类型,在代码中除了上面的四类八种其他所有的都是引用数据类型。
基本数据类型需要记忆的
-
byte的取值范围:
-128 ~ 127
-
int的大概取值范围:
-21亿多 ~ 21亿多
-
整数和小数的取值范围的大小关系:
byte < short < int < long < float < double
扩展:
不同的数据类型,在内存中占用的字节数量是不一样的。
1.3 不同数据类型变量的定义
注意点:
定义long类型变量的时候,后面的数据值要加L后缀。建议大写。
定义float类型变量的时候,后面的数据值要加F后缀。建议大写。
代码示例:
//byte
byte b = 10;
System.out.println(b);//10
//short
short s = 100;
System.out.println(s);//100
//int
int i = 99;
System.out.println(i);//99
//long
//如果给long类型的变量赋值。
//后面的数据值要加L后缀。
//L可以是大写的,也可以是小写的。
//建议大写。
long n = 9999999999L;
System.out.println(n);
//float
float f = 11.1F;
System.out.println(f);
//double
double d = 10.2;
System.out.println(d);
//char
char c = '我';
System.out.println(c);
//boolean
boolean bb = true;
System.out.println(bb);
1.4 变量的练习
练习1:
定义变量记录老师的信息。
代码示例:
public class VariableDemo2{
public static void main(String[] args){
//老师的姓名
String s = "黑马谢广坤";
//老师的年龄
int i = 18;
//老师的性别
char c = '男';
//老师的身高
double d = 180.1;
//是否单身
boolean b = true;
//输出所有变量
System.out.println(s);
System.out.println(i);
System.out.println(c);
System.out.println(d);
System.out.println(b);
}
}
练习2:
定义变量记录电影的信息。
代码示例:
public class VariableDemo2{
public static void main(String[] args){
//定义变量记录电影的名字
String name = "送初恋回家";
//定义变量记录主演的名字
String personName = "刘鑫等等";
//定义变量记录年份
int year = 2020;
//定义变量记录分数
double score = 9.0;
//输出所有变量
System.out.println(name);
System.out.println(personName);
System.out.println(year);
System.out.println(score);
}
}
练习3:
定义变量记录手机的信息。
代码示例:
public class VariableDemo2{
public static void main(String[] args){
//定义变量记录手机的价格
double price = 5299.0;
//定义变量记录手机的品牌
String name = "华为";
//输出所有变量
System.out.println(price);
System.out.println(name);
}
}
2. 标识符
2.1 什么是标识符?
给类、方法、变量起的名字就是标识符。
简单理解:在代码中,凡是我们自己起的名字都是标识符,都要遵守我们下面讲解的规则。
2.2 标识符的硬性要求
必须要这么做,否则代码就会报错。
- 必须由数字、字母、下划线、美元$符组成
- 不能以数字开头
- 不能是关键字
- 区分大小写
2.3 标识符的软性建议
如果不这么做,代码不会报错,但是影响阅读,也显得代码很low
建议:不管是硬性要求还是软性建议,咱们都要遵守。
小驼峰命名法:
适用于:方法名、变量名
-
一个单词,全部小写。
比如:name,age,gender,address
-
多个单词,从第二个单词开始首字母大写。
比如:firstName
大驼峰命令法:
适用于:类名
-
一个单词,首字母大写。
比如:Demo,Test,Student
-
多个单词,每一个单词的首字母都要大写。
比如:HelloWorld
建议:
不管起什么名字,都要遵守四个字:见名知意。
如果英文单词记不住,不要使用拼音,用有道词典查一下。如果担心自己时间长了忘了,写注释。
3. 键盘录入
3.1 目的:
为了让我们变量记录的数据变得更加灵活。
3.2 实现步骤:
1.导包
简单理解:先要找到Scanner这个类在哪?
2.创建对象
简单理解:申请一下去我要开始用Scanner这个类了。
3.接收数据
只有等号右边才是真正的接收数据,接收到之后,把数据赋值给左边的变量
代码示例:
//1.导包 ,实际作用:先找到Scanner这个类在哪
//必须要写在第一行,类定义的外面
import java.util.Scanner;
public class ScannerDemo1{
public static void main(String[] args){
//2.创建对象 , 实际作用:申请一下我要开始用Scanner这个类了。
Scanner sc = new Scanner(System.in);
//加一个提示
System.out.println("请输入一个整数");
//3.把接收到的数据赋值给一个变量
int number = sc.nextInt();
System.out.println(number);
}
}
3.3 键盘录入的练习
核心:
如果我们需要多次键盘录入数据,那么第一步和第二步不需要多次书写。只要多次书写第三步即可
代码示例:
import java.util.Scanner;//找到Scanner这个类在哪
public class ScannerDemo1{
public static void main(String[] args){
//申请一下,我准备要用Scanner这个类了。
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个整数");
int number1 = sc.nextInt();
System.out.println("请输入第二个整数");
int number2 = sc.nextInt();
//求和
int result = number1 + number2;
System.out.println(result);
}
}
4. idea
4.1 什么是idea?
是Java的集成开发工具,该工具把编写代码,编译,运行,调试等都集中在一起了。
4.2 下载和安装
下载:
点击进入下载界面
安装:
傻瓜式安装直接点击下一步即可。
安装的注意点:
修改安装路径
要选择一下,在桌面创建一个64位的快捷方式
4.3 idea的结构
-
项目
-
模块
-
包
-
类
理解方式:
整个微信,可以理解为一个大的项目
下面有四个互相独立的功能:消息,联系人,朋友圈,我
这四个互相独立的功能,我们可以理解为4个模块。
以第一个消息模块为例,在这个模块里面,有文字,图片,动画等等,而这些东西都是需要用代码编写的。
为了方便管理,我们可以把所有的文字相关的代码,都放到同一个文件夹中。
为了方便管理,我们可以把所有图片相关的代码,都放到同一个文件夹中。
为了方便管理,我们可以把所有动画相关的代码,都放在同一个文件夹中。
然后在文件夹(包)中,就可以新建类,去编写代码了。
4.4 idea中类的相关操作
新建类:
细节:想要在哪个包中新建类,就右键点击谁,就可以了。
删除类:
想要删除哪个类,就右键点击谁就可以了,再选择delete即可。
修改类名:
我们不能直接在代码中修改,如果在代码中直接修改了,会导致类名跟文件夹不一致,从而报错。
如果想要修改可以有两种方式:
1.先选中要修改的文件名,按快捷键:shift + F6
2.右键点击要修改的文件名,选中rename
4.5 idea中模块的相关操作
新建模块:
点击File — 再点击项目重构 ---- 再点击加号就可以新建模块了。
删除模块:
右键点击模块选择移除模块。
细节:此时并不是真正的删除,而是从idea界面中移除当前模块。在本地文件夹里面模块还是存在的。
导入模块:
前提:在本地中,需要有一个模块才能被导入到idea中。
点击File — 再点击项目重构 ---- 再点击加号— 点击import ---- 再选择对应的模块即可 ---- 选中模块里面的iml文件,再点击ok即可导入。
如果导入成功之后,在代码的右上角有JDK的选择,那么直接选择本地对应的版本即可。
如果没有JDK的选择,那么可以直接编写代码。
4.6 idea中项目的相关操作
关闭项目:
点击File — 选择关闭项目即可
此时就可以回到idea最一开始的界面
新建项目:
在idea最一开始的界面中,我们可以点击newProject就可以新建项目了。
打开项目:
其实跟导入模块是类似的。
前提:在本地中需要有一个已经存在的项目。
在idea最一开始的界面中,我们可以点击open即可,在本地中选择要打开的项目就可以了。
4.7 扩展知识点:快捷键
关于idea快捷键的文章:点击进入
一些常用的快捷键如下:
复制:ctrl + c
粘贴:ctrl + v
撤销:ctrl + z
向下生成一个空行:shift + 回车
格式化代码:ctrl + alt + L
向下复制一行:ctrl + d
移动代码:shift + alt + 上键/下键
温馨提示:
idea中的快捷键,有可能会跟其他软件冲突。
有可能冲突的软件:
QQ,网易云音乐,QQ音乐,有道词典,金山词霸。
如果我们按快捷键没有反应:
一定是跟其他软件冲突了。此时可以一个一个的去关闭。
5. 算术运算符
5.1 分类:
+ - * / %
5.2 细节:
1.运算规则。跟小学数学是一模一样的
2.如果是整数跟整数进行计算,结果只能是整数。直接去掉小数部分,保留整数。
3.如果想要结果中有小数,需要有小数参与计算。
4.只要有小数参与计算,那么结果是有可能不精确的
5.%,叫做取余或者取模,进行的也是除法运算,只不过获取的是余数。
代码示例:
// %
//取余 取模
//跟除法一样,做的也是除法运算。
//除法 取的是商 取余取的是余数
System.out.println(10 / 3);//3
System.out.println(10 % 3);//1
%的使用场景:
1.我们可以利用%判断数字a是否可以被数字b整除。(掌握)
10 % 7
看他的最终结果是不是0,如果结果为0,那么就表示10是7的倍数。
如果结果不是0,那么就表示10不是7的倍数。
2.我们可以利用%判断一个数字是奇数还是偶数。(掌握)
10 % 2
看他的最终结果是不是0,如果结果为0,表示10是偶数
如果结果是1,表示10是奇数。
3.我们还可以利用%去做游戏中的发牌(了解)
到了就业班还会再讲。
斗地主牌
1.我们可以把54张扑克牌都定义一个序号:1~54
2.拿着每一张牌的序号对3取模
如果结果为1,就把当前的牌发给第一个玩家。
如果结果为2,就把当前的牌发给第二个玩家。
如果结果为0,就把当前的牌发给第三个玩家。
5.3 练习
需求:
键盘录入一个三位数,将其拆分为个位、十位、百位后,打印在控制台
代码示例:
//对于任意的一个整数
//个位:数字 % 10
//十位:数字 / 10 % 10
//百位:数字 / 100 % 10
//千位:数字 / 1000 % 10
//万位:数字 / 10000 % 10
//...以此类推
//分析:
//1.键盘录入一个三位数,123
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数");
int number = sc.nextInt();
System.out.println(number);
//2.将其拆分为个位、十位、百位后,打印在控制台
//number是什么?就是键盘录入的数字
//拿着键盘录入的数字跟10进行取余的计算。
//把得到的余数赋值给左边的变量
int ge = number % 10;
//拿着键盘录入的数字先跟10相除,得到整数部分
//拿着得到的整数部分,再跟10进行取余的计算。
//把得到的余数赋值给左边的变量
int shi = number / 10 % 10;
int bai = 456 / 100 % 10;
System.out.println(ge);
System.out.println(shi);
System.out.println(bai);
6. 隐式转换
概念
取值范围小的,变成取值范围大的。
细节:
隐式转换是不需要我们自己单独写代码实现的。是由虚拟机帮我们自动完成的。
触发时机:
在实际开发中,什么时候用到这个知识点。
1.取值范围小的跟取值范围大的进行计算的时候,小的会先提升为大的,然后再进行计算。
2.byte short char 这三种类型在参与计算的时候,先提升为int,再进行计算。
举例:
int a = 10;
double b = a;
//不会报错
//就是把一个取值范围小的,变成取值范围大的。
//把小的给大的不会报错,可以直接给。
//提升的时候,实际提升的不是变量a,而是变量a里面的数据10.
int a = 10;
long n = 100L;
??? result = a + n;
//问:result 是什么数据类型?long
//数据类型不一样,不能直接进行计算
//需要转成一样的才能进行计算。
//把变量a里面的数据10,提升为long类型的
//实际上,最终就是两个long类型的数据进行计算。
//最终的结果result就是long类型的
int a = 10;
long n = 100L;
double d = 20.1;
??? result = a + n + d;
//问:result 是什么数据类型?double
//数据类型不一样,不能直接进行计算
//需要转成一样的才能进行计算
//第一步:是a + n 类型不一样,变量a里面的数据先变成long,进行计算
// a + n 的结果是long类型的、
//第二步:long + double。需要继续提升,最终提升为double
//所以,最终的结果就是double类型。
byte b1 = 10;
byte b2 = 20;
??? result = b1 + b2;
//问:result 是什么数据类型?int
//取值范围比int小的类型,在计算的时候。先直接提升为int。再进行计算。
//b1和b2里面的数据,在进行计算的时候,先提升为int,再进行计算
//所以,结果为int。
7. 强制转换
核心:
把一个取值范围大的,交给取值范围小的。
在代码中,不能直接给,如果一定要这么干,就需要加入强制转换。
格式:
因为这个操作,不是虚拟机帮我们进行的,需要我们自己写代码实现。
简单理解:想要转成什么类型,就在前面的小括号中,写什么类型即可。
目标数据类型 变量名 = (目标数据类型)待转换的数据。
细节:
强制转换,有可能导致数据发生改变。
举例:
double a = 12.3;
int i = (int)a;
byte b1 = 10;
byte b2 = 20;
byte b3 = b1 + b2;
//第三行代码是报错的,因为等号的右边最终结果为int类型
//而把大的给小的,是不能直接给的,会报错。
//所以我们可以加入强制转换
//错误的。此时强转的是b1.
byte b3 = (byte)b1 + b2;
//错误的。此时强转的是b1和b2
//就算转完了,他们在再次相加计算的时候,还会变成int类型
byte b3 = (byte)b1 + (byte)b2;
//正确的。先计算小括号中的b1 + b2 ,得到一个int类型的结果
//然后再把int类型的结果转换成byte类型
byte b3 = (byte)(b1 + b2);
8. 字符串的加操作
规则1:
在+的过程中,如果有字符串参与计算,那么此时+就不是算术运算符了,而是字符串的拼接符。会把数据进行拼接,并产生一个新的字符串。
规则2:
如果有多个+连续存在,从左到右依次计算,如果没有字符串,就是普通的算术运算符。
如果有字符串参与,就是拼接。
规则3:
如果字符串跟变量进行拼接,是拿着变量里面的数据跟字符串进行拼接。
但是变量不能用双引号引起来。
规则4:
字符串只有相加操作,没有减,乘,除,取模操作
举例:
"123" + 123 结果:"123123"
123 + 123 + "123" 结果:"246123"
int age = 18;
sout("我的年龄是" + age + "岁");//我的年龄是18岁
//此时是三个字符串进行拼接
sout("我的年龄是" + "age" + "岁");//我的年龄是age岁
System.out.println(1 + 2 + "abc" + 2 + 1);//3abc21
//当连续+的时候,从左到右依次计算的,如果有字符串就是拼接
//如果没有字符串,就是相加。
//第一步:1 + 2 结果3
//第二步:3 + "abc" 结果"3abc"
//第三步:"3abc" + 2 结果"3abc2"
//第四步:"3abc2" + 1 结果"3abc21"
用法:
可以让我们的变量在展示的时候,更加有意义。
//分析:
//1.键盘录入一个三位数,123
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数");
int number = sc.nextInt();
System.out.println(number);
//2.将其拆分为个位、十位、百位后,打印在控制台
//number是什么?就是键盘录入的数字
//拿着键盘录入的数字跟10进行取余的计算。
//把得到的余数赋值给左边的变量
int ge = number % 10;
//拿着键盘录入的数字先跟10相除,得到整数部分
//拿着得到的整数部分,再跟10进行取余的计算。
//把得到的余数赋值给左边的变量
int shi = number / 10 % 10;
int bai = number / 100 % 10;
System.out.println("个位是:" + ge);
System.out.println("十位是:" + shi);
System.out.println("百位是:" + bai);
9. 字符的加操作
ASCII码表:
在这张码表中,字符跟数字有一个一一对应的关系。
‘a’ — 97
‘A’ — 65
规则:
当字符加字符 或者 字符加数字的时候,此时字符会到ASCII码表中找对应的数字,然后再进行计算。
注意点:
当字符跟字符串参与计算的时候,做的是拼接操作。
代码示例:
char c = 'a';
int result = c + 0;//97
//先拿着字符a到码表中查,查到了数字97,再跟0进行计算,结果就是97.
char c = 'a';
System.out.println("ABC" + c);//ABCa
10. 自增自减运算符
基本用法:
不管是写在前面,还是写在后面,只要单独写一行,结果就是一样的。
代码示例:
int a = 1;
//后++
a++;//把变量里面的值+1,执行完毕之后,变量里面的值就是2
System.out.println(a);//2
//先++
++a;//把变量里面的值+1,执行完毕之后,变量里面的值就是3
System.out.println(a);//3
//后--
a--;
System.out.println(a);//2
//先--
--a;
System.out.println(a);//1
扩展用法:
先++和后++,以后在实际开发中,我们基本上都是单独写成一行的。
如果实际参与了计算,一般在代码里面是不会写的。
运算规则:
先++:
先加后用
int a = 1;
int b = ++a;
// 先把变量a的值1,自增变成2.
// 再把2拿出来使用,赋值给变量b
所以,程序运行完毕之后,a为2,b为2
后++:
先用后加
int a = 1;
int b = a++;
// 先把变量a的值进行使用,赋值给变量b
// 然后变量a再进行自增
所以,程序运行完毕之后,a为2,b为1
面试题举例:
public class Test {
public static void main(String[] args) {
int x = 10;
//后++,先用后加
//先把x的值10拿出来用,赋值给y,然后x再进行自增变成11
//当这行代码执行完毕之后,x = 11 y = 10
int y = x++;
//先++,先加后用
//先把x的值进行自增,变成12,再把自增之后的值拿出来用。赋值给z
//当这行代码执行完毕之后,x = 12 z = 12
int z = ++x;
//因为x自增了两次就是12
System.out.println("x:" + x);//12
System.out.println("y:" + y);//10
System.out.println("z:" + z);//12
}
}
应用场景一:
当过生日的时候,记录age的变量要自增。
变量在合适的时候需要自增一次。
应用场景二:
商城项目中的购物车,也需要用到自增,自减运算符。
应用场景三:
统计数量的时候。
在一开始,我们可以定义一个变量记录0
把所有参与统计的数据,一个一个进行对比,如果满足,变量就自增一次。
当所有参与统计的数据全部统计完毕,那么变量就表示最终的次数。
举例:
1 ~ 100 之间有多少个偶数?
代码中,我们可以从1开始去数到100。如果遇到一个偶数,那么统计的变量就需要自增一次。
当100个数全部统计完毕之后,变量的值就是最终的结果。
具体的代码我们会在后面学习完循环的时候写,现在知道一下应用场景即可。
11. 赋值运算符
分类:
符号 | 说明 |
---|---|
= | 把等号的右边赋值给左边。int a = 10; |
+= | 把左边和右边进行相加,结果赋值给左边,对右边没有任何影响。 |
-= | 把左边和右边进行相减,结果赋值给左边,对右边没有任何影响。 |
*= | 把左边和右边进行相乘,结果赋值给左边,对右边没有任何影响。 |
/= | 把左边和右边进行相除,结果赋值给左边,对右边没有任何影响。 |
%= | 把左边和右边进行相除,把余数赋值给左边,对右边没有任何影响。 |
代码示例:
//赋值运算符
//基本的赋值运算符 =
//其他赋值运算符
//+= -= *= /= %=
//以+=为例
int a = 10;
int b = 20;
//就表示把左右进行相加,把结果赋值给左边的,对右边没有任何影响
//相当于 a = a + b;
a += b;
System.out.println(a);//30
System.out.println(b);//20
扩展点:(了解)
+=、-=、*=、/=、%= 在底层隐藏了强制类型转换
代码示例:
byte b1 = 10;
byte b2 = 20;
b1 += b2;
//相当于:b1 = (byte)(b1 + b2)
12. 比较运算符
概念:
比较运算符,又叫做关系运算符,其实就是做了一个判断而已。
分类:
==:判断左右是否相等
!=:判断左右是否不相等
>:判断左边是否大于右边
>=:判断左边是否大于等于右边
<:判断左边是否小于右边
<=:判断左边是否小于等于右边
注意点:
关系运算符的结果只能是布尔类型的,要么是true,要么是false。在后面实际开发中,我们会根据两种情况来执行不同的代码。
用户登录,正确true,登录成功
错误false,登录失败
==千万不能写成一个=
练习:
需求:
您和您的约会对象在餐厅里面正在约会。
键盘录入两个整数,表示你和你约会对象衣服的时髦度。(手动录入0~10之间的整数,不能录其他)
如果你的时髦程度大于你对象的时髦程度,相亲就成功,输出true。
否则输出false。
代码示例:
//分析:
//1.键盘录入两个整数
Scanner sc = new Scanner(System.in);
System.out.println("请输入你衣服的时髦度");
int fashtion1 = sc.nextInt();
System.out.println("请输入约会对象衣服的时髦度");
int fashtion2 = sc.nextInt();
//2.比较一下即可
boolean result = fashtion1 > fashtion2;
System.out.println(result);