一、变量基础知识
1、练习所有类型变量的定义,打印每种类型变量的值
A.数据类型分类
四类 | 数据类型 | 字节数 | 数据表示范围 |
---|---|---|---|
整型 | byte | 1 | -128~127 |
整型 | short | 2 | -32768~32767 |
整型 | int(常用) | 4 | -21亿21亿(-21474836482147483648) |
整型 | long | 8 | -263~263 |
浮点型 | float | 4 | 3.403E38~3.403E38 |
浮点型 | double | 8 | -1.798E308~1.798E308 |
字符型 | char | 2 | 表示一个字符,如‘a’、‘1’、’家‘ |
布尔型 | boolean | 1 | 只有两个值true与false |
B.定义各种类型变量并打印输出这些值
- 源码
class Data {
public static void main(String[] args) {
byte b = 0b10; //定义byte类型变量
System.out.println(b);
short s = 1;//定义short类型变量
System.out.println(s);
int i = 1;//定义int类型变量
System.out.println(i);
long l = 0xA;//定义long类型变量
System.out.println(l);
float f = 1.111e11F;//定义float类型变量
System.out.println(f);
double d = 1.1;//定义double类型变量
System.out.println(d);
char c = '义';//定义char类型变量
System.out.println(c);
boolean boo = true;//定义boolean类型变量
System.out.println(boo);
String str = "中国";//定义字符串
System.out.println(str);
System.out.println(b + s + i + l + f + d + c + str);
}
}
- 输出结果:
2、任选两种类型,写一个自动类型提升和强制类型小案例
A.自动类型提升
- 取值范围小的类型,自动转换取值范围大的类型
- boolean类型不参与转换
byte
-->short
-->int
-->long
-->float
-->double
char
-->int
- 例子:
public class DataConvert {
public static void main(String[] args) {
//定义double类型的变量
double d = 1000;//出现类型自动转换,把int转换成double
System.out.println(d);
int i = 100;
double d2 = i;//出现类型自动转换,int自动转成double
System.out.println(d2);
byte b = 10;
int j = b;//自动类型转换,byte自动转换int
System.out.println(j);
}
}
- 输出结果:
B.强制转换
- 数据类型范围大的转换成数据类型范围小的;
- 没有特殊要求,不得强制转换;
- 数据类型的强制转换公式
被转换后的数据类型 变量名 = (被转换后的数据类型)要转换的数据
- 例子:
class DataConvert_1 {
public static void main(String[] args) {
//double 浮点,转成整数int
double d = 3.1415926;
int i = (int)(d);
System.out.println(i);
}
}
- 输出结果:
3、运算符:
A.算术运算符(+ - * / % ++)
运算符 | 原酸规则 | 范例 | 结果 |
---|---|---|---|
+ | 正号 | +3 | 3 |
+ | 加 | 2+3 | 5 |
+ | 连接字符串 | "中" + "国" | "中国" |
- | 负号 | int a = 3 ; -a | -3 |
- | 减 | 3-1 | 2 |
* | 乘 | 2 * 3 | 6 |
/ | 除 | 5 / 2 | 2 |
% | 取模 | 5 % 2 | 1 |
++ | 自增 | int a = 1; a ++/++ a | 2 |
-- | 自减 | int b = 3; a--/--a | 2 |
- 例子:
public class Operator_1 {
public static void main(String[] args) {
//+ 连接作用,将一个字符串和其他数据连接
//遇到字符串,+意思为连接符号
//任何类型只要和字符串 + ,所有的数据都变成字符串
System.out.println("5+5 = " + 5 + 5);
int i = 9;
int j = 100;
int add = i + j;//加法运算
System.out.println(add);
int sub = i - j;//减法运算
System.out.println (sub);
int mul = i * j;//乘法运算
System.out.println(mul);
double div = (double)i / j;//除法运算
System.out.println(div);
int mod = i % j;//取模运算
System.out.println(rem);
//自增运算 ++
int a = 1;
int b = 1;
int c = 1;
c++;
int d = 1;
++d;
System.out.println(a++);
System.out.println(++b);
System.out.println(c);
System.out.println(d);
}
}
- 输出结果:
B.赋值运算符(=,+=,/=,*=,%=)
运算符 | 运算规则 | 范例 | 结果 |
---|---|---|---|
= | 赋值 | int a = 2 | 2 |
+= | 加后赋值 | int a = 2; a+=2 | 4 |
-= | 减后赋值 | int a = 2; a -=2 | 0 |
*= | 乘后赋值 | int a = 2; a *= 2 | 4 |
/= | 整除后赋值 | int a = 2;a /= 2 | 1 |
%= | 取模后赋值 | int a = 2; a %= 2 | 0 |
- 例子:
//赋值运算
class Demo_1 {
public static void main(String[] args) {
int i=2,j=2,k=2,m=2,n=2;
i += 2;//加后赋值
System.out.println(i);
j -= 2;//减后赋值
System.out.println(j);
k *= 2;//乘后赋值
System.out.println(k);
m /= 2;//整除后赋值
System.out.println(m);
n %= 2;//去模后赋值
System.out.println(n);
}
}
- 运算结果
C.比较运算符(>,<,>=,<=,==,!=)
运算符 | 运算规则 | 范例 | 结果 |
---|---|---|---|
== | 相等于 | 4 == 3 | false |
!= | 不等于 | 4 != 3 | true |
< | 小于 | 4 < 3 | false |
> | 大于 | 4 > 3 | true |
<= | 小于等于 | 4 <= 3 | false |
>= | 大于等于 | 4 >= 3 | true |
- 例子:
//比较运算
class Demo_2 {
public static void main(String[] args) {
int i = 10;
int j = 12;
boolean boo1 = i == j;
System.out.println(boo1);
boolean boo2 = i != j;
System.out.println(boo2);
boolean boo3 = i < j;
System.out.println(boo3);
boolean boo4 = i > j;
System.out.println(boo4);
boolean boo5 = i <= j;
System.out.println(boo5);
boolean boo6 = i >= j;
System.out.println(boo6);
}
}
- 输出结果:
D.逻辑运算符(&&,||,!)
- 例子:
class Operator_3 {
public static void main(String[] args) {
System.out.println(true & true);
System.out.println(false & true);
System.out.println(false & false);
System.out.println(true | true);
System.out.println(true | false);
System.out.println(false | false);
System.out.println(true ^ false);
System.out.println(true ^ true);
System.out.println(false ^ false);
System.out.println(false && true);
System.out.println(true || false);
System.out.println(!false);
System.out.println(!true);
}
}
- 输出结果:
4、练习商品库存案例
- 源码:
/*
实现商品库存清单案例
分析步骤:
1.实现表头,是固定数据,直接写输出语句;
2.表格中间,商品数据采用变量形式,定义变量,找对数据类型,输出所有变量
3.表格尾巴,一部分数据固定,另一部分,商品数据进行数学计算,运算符
*/
class Shop {
public static void main(String[] args) {
//输出表头固定数据
System.out.println();
System.out.println("---------------------------商场清单---------------------------");
System.out.println();
System.out.println("品牌型号 尺寸 价格 库存数");
//定义表格中的数据变量
//品牌型号 String类型,尺寸/价格 double类型,库存 int类型
//定义MacbookAir的属性
String macBrand = "MacBookAir";
double macSize = 13.3;
double macPrice = 6988.88;
int macCount = 5;
//定义ThinkPadT450的属性
String lenovoBrand = "ThinkPadT450";
double lenovoSize = 14.0;
double lenovoPrice = 5999.99;
int lenovoCount = 10;
//定义ASUS-FL5800的属性
String asusBrand = "ASUS-FL5800";
double asusSize = 15.6;
double asusPrice = 4999.5;
int asusCount = 18;
//输出表格内容
System.out.println(macBrand +" " + macSize + " " + macPrice + " " + macCount);
System.out.println(lenovoBrand +" " + lenovoSize + " " + lenovoPrice + " " + lenovoCount);
System.out.println(asusBrand +" " + asusSize + " " + asusPrice + " " + asusCount);
System.out.println("--------------------------------------------------------------");
//表尾内容
System.out.println("总库存数:"+(macCount + lenovoCount + asusCount));
System.out.println("库存商品总金额:"+(macPrice * macCount + lenovoPrice * lenovoCount + asusPrice * asusCount));
}
}
-
输出结果:**
二、课后作业:
1.数据类型转换:
A.第一题
byte b1=3,b2=4,b;
b=b1+b2;
b=3+4;
哪句是编译失败的呢?为什么呢?
- 答:
第2句编译错误,因为两个byte
类型的变量相加很可能超出byte
的取值范围,所以编译会错误;类似的情况还有short
、cha
类型。
B.第二题
byte by = 130;
有没有问题?有问题如何解决?结果是多少呢?
- 答:
-
130
超出byte
的取值范围(-128~127),编译错误; - 解决办法:
byte by = (byte)130
- 结果:数据会损失精度,结果为
-126
。
C.第三题:
byte b = 10;
b = b + 1;
b+=1;
有没有问题?为什么呢?
- 答:
- 第2行代码会编译错误;
- 因为1默认为int类型,(b+1)会自动提升为int类型,无法把int类型的数字赋值给byte类型的变量;
- 解决办法
b = (byte)(b + 1);
2.分析以下需求,并用代码实现
- 已知三位数173,打印百位上的数字(线索利用对100 进行 / 运算获得百位上的数字);分别打印十位上和个位上的数字(线索:利用对10或者100进行/或者%运算获取十位和个位上的数字)
- 源码
class Demo_3 {
public static void main(String[] args) {
int i = 173;
int m = i / 100;//定义百位数为m
System.out.println(m);
int n = i % 100;
int k = n / 10;//定义十位数为k
int f = n % 10;//定义个位上的数为f
System.out.println(k);
System.out.println(f);
}
}
- 输出结果
3.看程序说结果:
public class Test1 {
public static void main(String[] args) {
int x = 4;
int y = (--x)+(x--)+(x*10);
System.out.println("x = " + x + ",y = " + y);
}
}
- 输出结果:
x = 2 , y = 26