目录
Day02---数据类型. 2
1 数据类型. 2
1.1 前言. 2
1.1.1 标识符. 2
1.1.2 关键字. 2
1.1.3 注释. 3
1.1.4 变量. 3
1.1.5 常量. 3
1.2 基本类型(八种)4
1.2.1 介绍. 4
1.2.2 练习1:测试最大值最小值. 4
1.2.3 练习2:圆形面积. 4
1.2.4 练习3:变量交换. 4
1.3 引用类型. 5
2 基本类型的字面值(5条). 5
2.1 整数字面值是int类型. 5
2.2 byte,short,char三种比int小的整数可以用范围内的值直接赋值. 5
2.3 浮点数的字面值是double类型. 5
2.4 字面值后缀LFD5
2.5 进制前缀. 5
3 基本类型的类型转换. 6
3.1 小到大. 6
3.2 大到小. 6
3.3 浮点数转成整数,小数直接舍弃. 6
4 运算规则(5条). 6
4.1 计算结果的数据类型,与最大类型一致. 6
4.2 byte,short,char三种比int小的整数,运算时会先自动转换成int6
4.3 整数运算溢出. 7
4.4 浮点数运算不精确. 7
4.5 浮点数的特殊值. 7
5 运算符. 7
5.1 概述. 7
5.2 练习1:平年闰年. 8
5.3 练习2:自增自减. 8
5.4 练习3:三个数的最大值. 8
Day02--数据类型
1 数据类型
1.1 前言
1.1.1 标识符
可以简单的理解为一个名字。
在Java中,我们需要标识代码的很多元素,包括类名、方法、字段、变量、包名等。我们选择的名称就称为标识符,并且遵循以下规则:
- 标识符可以由字母、数字、下划线(_)、美元符($)组成,但不能包含 @、%、空格等其它特殊字符。
- 不能以数字开头。
- 标识符是严格区分大小写的。
- 标识符的命名最好能反映出其作用,做到见名知意。
1.1.2 关键字
在java语言中已经被赋予特定意义的一些单词。一共有53个关键字。
其中有两个保留字:const和goto。
关键字不能被用作标识符!!
1.1.3 注释
Java代码的解释说明。不影响程序的运行,用于辅助读程。
//单行注释
/* 多行注释 */
/** 文档注释 */
1.1.4 变量
在JAVA中,有的数据值是不固定的,总在变,我们还需要记录这些值,我们可以把这些值理解为变量。
我们通过三个元素来描述变量:变量类型,变量名以及变量值。
int age=18; //声明int类型的变量并赋值
String tel; //声明String类型的变量
注意:
1、 变量名必须是一个有效的标识符。
2、 变量名不可以使用java关键字
3、 变量名不能重复
1.1.5 常量
在程序运行过程中一致不会改变的量成为常量。
略。。。
1.2 基本类型(八种)
1.2.1 介绍
|
类型名称 |
字节空间 |
范围 |
整数型 |
byte |
1 |
-27到27-1 或者 -128到127 |
short |
2 |
-215到215-1 |
|
int |
4 |
-231到231-1 |
|
long |
8 |
-263到263-1 |
|
浮点型 |
float |
4 |
单精度,对小数部分的精度要求不高 |
double |
8 |
双精度,精确的小数部分并操作值很大时 |
|
字符 |
char |
2 |
0到65535 |
布尔 |
boolean |
1 |
真true 假false |
1.2.2 练习1:测试最大值最小值
创建day02工程
创建cn.tedu.basic包
创建Test1_Scope.java
package cn.tedu.basic;
//这个类用来测试取值范围
public class Test1_Scope {
public static void main(String[] args) {
//测试整型数据范围 byte short int long
//创建变量保存byte取值 -- 变量类型 变量名=变量值
byte min = Byte.MIN_VALUE;
byte max = Byte.MAX_VALUE;
System.out.println(min);//-128,打印变量的值
System.out.println(max);//127
short smin = Short.MIN_VALUE;
short smax = Short.MAX_VALUE;
System.out.println(smin);//-32768
System.out.println(smax);//32767
//long -- Long
long lmin = Long.MIN_VALUE;
long lmax = Long.MAX_VALUE;
System.out.println(lmin);//-9223372036854775808
System.out.println(lmax);//9223372036854775807
//TODO int -- Integer
int imin = Integer.MIN_VALUE;
int imax = Integer.MAX_VALUE;
System.out.println(imin);//-2147483648
System.out.println(imax);//2147483647
//TODO 浮点型float--Float double--Double
float fmin = Float.MIN_VALUE;
float fmax = Float.MAX_VALUE;
System.out.println(fmin);//1.4E-45
System.out.println(fmax);//3.4028235E38
double dmin = Double.MIN_VALUE;
double dmax = Double.MAX_VALUE;
System.out.println(dmin);//4.9E-324
System.out.println(dmax);//1.7976931348623157E308
//布尔类型
boolean b = true;//真,通常用1表示真
boolean b2 = false;//假,通常用0表示假
//字符类型
char c = 'a';
char c2 = '中';//char类型可以存储一个中文汉字
char c3 = 97;
System.out.println(c);
System.out.println(c2);
//char类型数据可以保存数字,但是在使用时,并不是使用数字本身,而是,
//拿着数字去查了ascii码表,把数字对应着的字符,拿出来使用
System.out.println(c3);//a,就是因为ascii码表数字97对应着的是a字符
}
}
1.2.3 练习2:圆形面积
圆的面积:π*r*r
圆的周长:2*π*r
package cn.tedu.basic;
import java.util.Scanner;//自动导包
//求圆面积
public class Test2_Area {
public static void main(String[] args) {
//1、定义变量记录半径
// double r = 10.1;//写死了
//动态接收键盘输入的值
double r = new Scanner(System.in).nextDouble();
//2、带入公式算结果
double result = 3.14*r*r;
//动态拼接字符串:+
System.out.println("圆的面积是"+result);
}
}
1.2.4 练习3:变量交换
接收用户输入的值a和b。
假设a=1,b=2将a和b的值做交换。
package cn.tedu.basic;
import java.util.Scanner;
//测试变量交换
public class Test3_Exchange {
public static void main(String[] args) {
//1、接收键盘输入的两个整数a和b
int a = new Scanner(System.in).nextInt();
int b = new Scanner(System.in).nextInt();
//2、交换
int c = a ;//定义c,记录a的值
a = b ;//b的值给a
b = c ;//把c的值给b
//3、打印a和b的值
System.out.println(a);
System.out.println(b);
}
}
1.3 引用类型
后面学习数组和OOP时才会用到的知识,暂时不讲。
2 基本类型的字面值(5条)
2.1 整数字面值是int类型
int a = 999999999999999; //超出了int的取值范围
2.2 byte,short,char三种比int小的整数可以用范围内的值直接赋值
byte b = 127;//可以的,因为127在byte的取值范围内
byte b2 = 128; //错误,因为128的字面值是int类型,是4字节,byte是1字节,放不开
2.3 浮点数的字面值是double类型
double b = 1.5;
2.4 字面值后缀LFD
long a = 999999999999L;// 999999999999字面值是int类型,但是超出int取值范围就报错了,只能扩大数据范围,加后缀L,从int转成long
float b = 3.0F;//3.0字面值是double类型,加后缀L,从double转成float
double d = 3D;//3字面值是int类型,加后缀D,从int转成double
2.5 进制前缀
0b -2进制 如: 0b0010
0 -8进制 如:076
0x -16进制 如: 0x0986
\u -char类型,16进制 如: \u0000
3 基本类型的类型转换
3.1 小到大/隐式转换
3.2 大到小/显式转换
需要强制类型转换
package cn.tedu.basic;
public class Test {
public static void main(String[] args) {
//小转大--隐式转换
short a = 10;
//小转大,右侧的a是小类型,左侧b是大类型,详单与拿着小类型给大类型,可以直接赋值
long b = a;
//大转小--显式转换--强制转换--(小类型)
double m = 10.8;
//右侧m是大类型,左侧n是小类型,拿着大类型直接给小类型赋值--不行
int n = (int)m;
}
}
3.3 浮点数转成整数,小数直接舍弃
不管0.1还是0.9全都舍弃。
4 运算规则(5条)
4.1 计算结果的数据类型,与最大类型一致
System.out.println(3/2);//1
4.2 byte,short,char三种比int小的整数,运算时会先自动转换成int
byte a = 1;
byte b = 2;
//byte c = a+b;
//错误,因为a+b运算时自动变成int类型,大类型,给小类型byte类型赋值,---不能直接赋值--强转
byte c = (byte)(a+b);
4.3 整数运算溢出
整数运算,类似于一个钟表,转到最大时,再转会回到最小。
计算:光速运行一年的长度是多少米。3亿m/s
System.out.println(300000000L*60*60*24*365);
//整数运算溢出解决方案:超出int范围的整数运算会溢出,可以扩大数据范围,加L,变成long类型
4.4 浮点数运算不精确
System.out.println(1-0.8);
//0.19999999999999996
4.5 浮点数的特殊值
Infinity 无穷大 3.14/0
NaN not a number 0/0.0
5 运算符
5.1 概述
算术运算符 |
+ - * / |
基本运算 |
% |
模 / 取余数 10%3结果是1 5%2结果是1 n%2==0 |
|
++ -- |
自增 自减 |
|
比较运算符 结果是boolean类型 |
== |
相等比较 1==1 结果是true |
!= |
不等比较 1!=1结果是false |
|
逻辑运算符 结果是boolean类型 |
&& & |
逻辑与(短路与),两边同为真结果才为真 |
|| | |
逻辑或(短路或),两边只要有一个真结果就是真 |
|
+ |
字符串连接 |
|
! |
非,非真是假,非假是真 |
|
三元运算符 |
? : |
三项运算 1 ? 2 : 3 1是真取2,1是假取3 |
赋值运算符 |
= |
赋值运算 |
+= -= *= /= |
复合的赋值运算 a=a*21 ; // a *= 21; |
逻辑运算符:结果是boolean类型
& -- 是并且的关系(单与)
1 & 2 想要得到最终结果是true,对于1和2的要求是:必须都得是true
&& -- 是并且的关系(双与/短路与)
1&& 2 ,高效,当1结果是false时,2会被短路
| -- 是或者的关系
1 | 2 想要得到最终结果是true,对于1和2的要求是:1或者2有一个是true就可以
|| -- 是或者的关系(双或/短路或)
1 || 2 ,高效,当1的结果是true时,2会短路
5.2 练习1:平年闰年
输入年号,判断是否是闰年。
两个条件:
1、能被4整除,并且不能被100整除
2、能被400整除
package cn.tedu.basic;
import java.util.Scanner;
//测试平年闰年
public class Test6_RunNian {
public static void main(String[] args) {
//1、接收用户输入的年号
int year = new Scanner(System.in).nextInt();
//2、判断year是平年还是闰年
String desc = "平年";//设置默认值就是平年
//if(判断条件){ 满足条件的代码 }
// 1、能被4整除,并且不能被100整除
if(year % 4 == 0){ //能被4整除
if(year % 100 != 0){ //不能被100整除
desc = "闰年"; //修改desc的值为闰年
}
}
// 2、能被400整除
if(year%400 == 0){
desc = "闰年"; //修改desc的值为闰年
}
//TODO 优化第17行到第27行的代码
//if((小判断条件1 && 小判断条件2) || 大判断条件2){ 修改desc的值为闰年 }
if(( year%4==0 && year%100 != 0 ) || year%400 == 0 ){
desc="闰年";
}
// System.out.println("2000年是闰年");
//+拼接字符串
System.out.println(year+"年是"+desc);
}
}
5.3 练习2:自增自减
package cn.tedu.basic;
//测试自增++自减--
public class Test4_ZiZeng {
public static void main(String[] args) {
//符号在前,先变化后使用
//符号在后,先使用再变化
int a = 1;
System.out.println(a++);//1
int b = 1;
System.out.println(++b);//2
System.out.println(++b+a+b++);//8,3+2+3
//TODO 自减
int m = 1;
System.out.println(m--);//1
int n = 1;
System.out.println(--n);//0
System.out.println(--m-n-m--);//0,-1-0-(-1)
}
}
5.4 练习3:三个数的最大值
package cn.tedu.basic;
import java.util.Scanner;
//三元运算符
public class Test5_Max {
public static void main(String[] args) {
//两个数里的大值
int a = 10;
int b = 6;
//三元 1 ? 2 : 3
//最终得到的是2还是3,要看1的结果,如果1成立得到2的结果,如果1不成立,得到3
int max = a> b ? a : b ;
System.out.println(max);
//接收键盘输入的,三个数,取出最大值
int m = new Scanner(System.in).nextInt();
int n = new Scanner(System.in).nextInt();
int o = new Scanner(System.in).nextInt();
//1、定义变量记录最大值,拿着m和n比,比出来的结果交给变量保存
int result = m > n ? m : n;
//2、拿着result和o比,得到的结果才是最大值交给maxValue保存
// result = result > o ? result : o ;
int maxValue = result > o ? result : o ;
System.out.println(maxValue);
//TODO 优化
//拿着m和n比 ? m和o比 : n和o比
int result2 = m > n ? (m > o ? m : o ) : (n > o ? n : o );
System.out.println(result2);
}
}