002-标识符,变量,数据类型,数据类型的转换,运算符
2020-03-15 本文已影响0人
Ktry
变量
程序的都是运行在内存中的,程序中数据在内存中都拥有独立的内存地址。
因为内存地址不好记忆?所以就使用变量
变量就是数据在内存中的内存地址的表示。
如何使用变量
java是强类型语言,在java中的严格区分数据类型
1、声明变量(在内存中申请一块地址)
语法格式: 数据类型 变量名;
int a;
2、给变量赋值(将数据放入申请的内存中) 注意:值要与数据类型匹配
语法格式: 变量名 = 值 ;
a = 10;
3、使用变量
a = a + 10;
System.out.println(a);
代码演示
public class Demo1{
public static void main(String[] args){
//1、声明变量
int a;
//2、变量赋值
a = 102;
//3、使用变量
a = a + 10;
System.out.println(a);
//变量的定义的简写方式
int b = 10;
b = b + 10;
System.out.println(b);
}
}
变量名(标识符)的命名规则
- 标识符只能由数字、字母、下划线、美元$符号四个部分组成(可以用中文不要用)
- 标识符不能用数字开头
- 标识符不能使用java的关键字和保留字
- 标识符要见名知意
- 使用驼峰命名法(两个以上单词组成) 小驼峰(方法名、变量名) bigData 大驼峰 BigData(类名)
数据类型
引用数据类型
- 类
- 数组
- 接口
基本数据类型(8种)
-
整数型
byte short int long
类型 | 字节数 | 取值范围 |
---|---|---|
byte | 1字节 | -2^7 ~ 2^7-1 |
short | 2字节 | -2^15 ~ 2^15-1 |
int | 4字节 | -2^31 ~ 2^31-1 |
long | 8字节 | -2^63 ~ 2^63-1 |
- 浮点型
类型 | 字节数 | 取值范围 | 小数点位数 |
---|---|---|---|
float | 4字节 | ±3.4E+38 | 7位 |
double | 8字节 | ±1.7E+308 | 16位 |
- 字符型
类型 | 字节数 | 取值范围 |
---|---|---|
char | 2字节 | 0~65535 |
- 布尔型
类型 | 字节数 | 取值范围 |
---|---|---|
boolean | 1字节 | true、false |
注意:
- 在java中定义任意一个整数默认都会被当做是int类型(所以在定义long类型数据的时候加上L作为标记)
- 在java中定义任意一个小数默认都会被当做是double类型(所以在定义float类型数据的时候加上F作为标记)
- 数据类型所占字节数与取值范围无关
- char、byte、short类型在参加计算之前,会将自己的类型提升为int类型
数据类型的转换
- 自动(隐式)类型转换
- 强制(显式)类型转换
代码演示
public class Demo3{
public static void main(String[] args){
//自动类型转换
/*
long i = 1000;
System.out.println(i);
//强制类型转换 (类型)
float f = (float)1.2;
System.out.println(f);
*/
/*
总结:
如果等号右边的类型比左边的类型要范围小就会发生自动类型转换
小转大
如果等号右边的类型比左边的类型要范围大就要发生强制类型转换(否则会报错)
大转小
byte short int long float double
char
boolean类型在java中不参与任何的数据类型转换
强制类型转换会发生数据的丢失
如果是浮点型转换成整数型, 小数点以后的数据都会丢失
大类型强转成小的类型,见图
*/
/*
整数与字符型互转
int i = 98;
char c = (char)i;
System.out.println(c);// 结果 b
char c = 'a';
int i = c;
System.out.println(i); // 结果97
*/
//整数与浮点型互转
/*
int i = 98;
double d = i;
System.out.println(d);//结果98.0
//直接砍小数点以后的数据
double d = 1.9;
int i = (int)d;
System.out.println(i);//结果 1
*/
byte b1 = 100;
byte b2 = 100;
byte b5 = (byte)(b1+b2);
System.out.println(b3); //结果-56
}
}
总结:如果等号右边的类型比左边的类型要范围小就会发生自动类型转换 小转大 如果等号右边的类型比左边的类型要范围大就要发生强制类型转换(否则会报错) 大转小
基本数据类型大小范围byte ---> short ---> int ---> long ---> float ---> double char
boolean类型在java中不参与任何的数据类型转换
强制类型转换会发生数据的丢失
如果是浮点型转换成整数型, 小数点以后的数据都会丢失
如果是大类型强转成小的类型,见图
运算符
算术运算符 + - * / % ++ --
关系运算符 > < >= <= == !=
赋值运算符 = += -= *= /= %=
逻辑运算符 && || !
位运算符(了解) & | ~ << >>
三目运算符
代码演示
public class Demo4{
public static void main(String[] args){
/*
int a = 10;
int b = 20;
System.out.println(a+b);
System.out.println(a*b);
System.out.println(a-b);
System.out.println(a/b);
System.out.println(a%b);
//String 类型 字符串要用双引号扩起来
String name = "cxk";
System.out.println(name);
int a =10;
int b =20;
System.out.println(a+b+"a+b的结果为");//30a+b的结果为
System.out.println("a+b的结果为"+a+b);//a+b的结果为1020
System.out.println(3+5+"哈哈"+1+2);//8哈哈12
int a =10;
int b =20;
String c = "a+b的结果为"+(a+b);
int a = 10;
//a++;// a = a + 1;
System.out.println(a++);//结果 10 a=11
System.out.println(++a);//结果 12
int x = 10; int y = 12;
x=9 y =13 x=10 y=12
int z = --x + y++ + x++ - --y; z? x? y?
9 + 12 + 9 - 12
*/
/*
总结
整数与整数计算结果为整数
整数与浮点数计算结果为浮点数
+号可以当数据计算,也可以作为字符串的连接
任何类型与字符串拼接之后的结果都是字符串类型
++ 表示自身加1
++在前,先加1再使用 ++ 在后,先使用再加1
-- 表示自身减1
*/
}
}
代码演示
public class Demo5{
public static void main(String[] args){
/*
int a = 10;
int b = 20;
System.out.println(a>b);
System.out.println(a<b);
System.out.println(a==b);
总结:
关系运算符的结果为boolean类型
等值判断要使用==
int a = 10;
a += 10;// a = a + 10;
System.out.println(a); //20
a%=20; // a = a % 20;
System.out.println(a); //0
short s1 = 10;
short s2 = 20;
s1 = s1 + s2; ? 错误,因为s1和s2在参加计算之前会提升为int类型,
s1 += s2; ? 正确,+=将s1+s2的结果内部做强转,强转成short再赋给s1
short s1 = 10;
short s2 = 20;
//s1 = s1 + s2;
s1 += s2; //s1 = s1 + s2;
System.out.println(s1);
逻辑运算符的符号两都应该是boolean类型或者boolean类型表达式
逻辑运算符的结果也是boolean类型的
|| 只要有一个结果为true,最终的结果就为true
&& 只要有一个结果为false,最终的结果就为false
! 取反,如果是true,取反就为false.如果是false,取反就为true
&& & || | 都可以被用作逻辑运算,且结果一样的。
&& || 短路与(如果表达式中,有一个为false就不会往下再执行了)
短路或(如果表达式中,有一个为true就不会往下再执行了)
& | 无论结果如何都会执行完整个表达式
int a = 10;
int b = 20;
//boolean boo = a > 10 || b < 30;
//boolean boo = a > 10 && b < 30;
boolean boo = !(a > 10 && b < 30);
System.out.println(boo);
int a = 10;
int b = 20;
//boolean boo = ++a > 10 || b-- < 30;
boolean boo = a++ > 10 & b-- < 30;
//boolean boo = !(a > 10 && b < 30);
//System.out.println(boo);
System.out.println(a);
System.out.println(b);
*/
/*
& 按位与 按位计算,同为1结果为1,否则为0
10 & 20 = ?
0 1 0 1 0
1 0 1 0 0
-----------------------
0 0 0 0 0
| 按位或 按位计算,同为0结果为0,否则为1
12 | 19 = ?
0 1 1 0 0
1 0 0 1 1
-----------------------
1 1 1 1 1
^ 按位亦或 按位计算,相同为0,不同为1
19^21 = ?
1 0 0 1 1
1 0 1 0 1
-----------------------
0 0 1 1 0
~ 按位取反 相反值-1
~12
<< 左移
12 << 2
00001100
00110000
>> 右移
12 >> 2
00001100
00000011
System.out.println(10&20);//结果 0
System.out.println(12|19);//结果 31
System.out.println(19^21);//结果 6
System.out.println(~12);//结果 -13
System.out.println(12 << 2);//结果 48
System.out.println(12 >> 2);//结果 3
如何求得2的三次方?
00000010
00001000
System.out.println(2<<2);
System.out.println(2*2*2);
三目运算符
语法: boolean类型表达式 ? 结果1 : 结果2;
如果表达式的结果为true,那么就是结果1,否则就是结果2
int age = 12;
String s = age > 18 ? "能上网":"回家呆着";
System.out.println(s);
*/
}
}
简单的人机交互
代码实现
import java.util.Scanner;
public class Demo6{
public static void main(String[] args){
/*
1、创建一个Scanner对象
2、引入Scanner类
3、使用的Scanner对象的方法
*/
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个姓名");
String name = sc.next();
System.out.println("姓名为:"+name);
System.out.println("请输入一个年龄");
int age = sc.nextInt();
System.out.println("年龄为:"+age);
System.out.println("请输入一个成绩");
double score = sc.nextDouble();
System.out.println("分数为:"+score);
//sc.nextChar()//没有这样的方法
}
}