2、类型和运算
1、常量和变量
常量:程序执行中,值不可以改变的量。
分类: 字面值常量:字面上写定了值.
自定义常量: final 的变量
1 /* 2 常量--程序执行中值不可以变 3 字面值常量--写定了值 4 */ 5 public class ConstDemo 6 { 7 //main方法是程序的入口 8 public static void main(String[] args) 9 { 10 //直接写名了值 11 System.out.println(110); 12 System.out.println(3.14); 13 System.out.println('1'); 14 //字符,('')单引号之间只能是单个符号;注意('')是错误的,而(' ')是正确的 15 } 16 }
变量:程序执行中,在某个范围内值可以改变的量.
定义:
方法1 先声明后赋值
方法2 在声明的同时赋值
作用: 不断存放的某一类型的常量,并可以重复使用.
过程描述:
1)声明变量向内存申请一块空间,同时指定这块空间的名称(变量)和数据类型;
2)不断存放在这个类型中的常量.
分类(按作用域划分):
成员变量:直接定义在类中.
局部变量:出成员变量外的都是,(包括:方法形参\代码块变\方法内变量)
作用域:只在这个区域内才能使用变量;从定义开始到定义所在的花括号结束.
使用规则:1)使用前,必须赋值.
2)同一作用域中不能重复定义.
1 public class VarDemo 2 { 3 public test = 20;//成员变量 4 public static void main(String[] args) 5 { 6 //定义变量:方式1:先声明后附值 7 byte a ; 8 a = 10; 9 byte a1,a2,a3; //也可以声明多个 10 //定义变量:方式2:声明同时附值 11 int b = 20; 12 System.out.println(b); 13 } 14 }
1 /*变量-注意事项*/ 2 public class VarDemo2 3 { 4 public static void main(String[] args) 5 { 6 int v =10;//局部变量 7 //byte v = 20;//报错:同一作用域,不能重复定义 8 int c; 9 //System.out.println(c);//变量使用前,必须赋值 10 } 11 byte test = 10;//成员变量 12 }
2、数据类型
分类:
1)基本数据类型:
整型: byte 占用1个字节 -128到127
short 占用2个字节 -32768到32767
int 占用4个字节 2^32次方
long 占用8个字节 2^64次方
字符型:char 占用2个字节 0到65535
布尔型:boolen 理论上占用8分之1个字节,但java中没有明确指明大小.
浮点型: float 占用4个字节
double 占用8个字节
1 /*布尔型*/ 2 public class BooleanDemo1 3 { 4 public static void main(String[] args) 5 { //布尔型常量 6 System.out.println(true); 7 System.out.println(false); 8 //布尔型变量 9 boolean IsMan = true; 10 System.out.println(IsMan); 11 } 12 }
1 //整型(byte short int long) 2 public class BooleanDemo2 3 { 4 public static void main(String[] args) 5 { 6 //二进制:前面加0b或0B 7 System.out.println(0b1100100); 8 //八进制:前面加0 9 System.out.println(0144); 10 //十六进制:前面加0x或0X 11 System.out.println(0x64); 12 //十进制: 13 System.out.println(100); 14 //注意:整数的默认类型是int, 15 //操作的常量值超过int范围(及long类型),要指定l或L 16 long a = 888888888888L; 17 //long a = 888888888888;//这里报错 18 System.out.println(a); 19 } 20 }
1 public class DecimalDemo 2 { 3 public static void main(String[] args) 4 { 5 /*小数常量: 6 方式1:小数 7 方式2:科学计数法 8 小数默认是double类型;要表示常量为float要加上f或F 9 */ 10 System.out.println(3.14); 11 System.out.println(3.14E-2); 12 System.out.println(3.14E2); 13 //小数变量: 14 float a =3.14F; 15 System.out.println(a); 16 } 17 }
1 public class CharDemo 2 { /*char类型: 3 无符号整型 4 unicode字符 5 */ 6 public static void main(String[] args) 7 { 8 //常量: 9 System.out.println('◆'); 10 System.out.println('7'); 11 12 //变量:输入无符号整型或unicode字符,返回unicode字符 13 char t1 = 97; 14 char t2 = '\u0061'; 15 char t3 = '码'; 16 System.out.println(t1); 17 System.out.println(t2); 18 System.out.println(t3); 19 } 20 }
2)引用数据类型:
类 接口 数组(基本数据类型以外的都是--引用数据类型)
常用的引用数据类型:sting类;
引用数据类型默认值null
字符串通过+符号,将字符连接起来;用""号括起来;
任何类型和string相连接+,结构都是新的字符串
1 //做常用的引用类型:string 2 public class StringDemo 3 { 4 public static void main(String[] args) 5 { 6 String username = "liang"; 7 System.out.println(username + 17); 8 //转义字符 9 System.out.println("\"师姐你好\""); 10 String a = "haha"; 11 int b = a; //不兼容的类型: String无法转换为int 12 } 13 }
3、基本数据类型转换
1)数据过大溢出
原因:变量存储的值,超出变量类型的容量
1 //要存储的值,超出变量类型的容量时,称为溢出 2 //int类型的范围:[-2147483648,2147483647] 3 public class IntDemo 4 { 5 public static void main(String[] args) 6 { 7 int max = 2147483647; 8 max = max + 1; 9 System.out.println(max);//-2147483648 10 11 int mix = -2147483648; 12 mix = mix - 1; 13 System.out.println(mix);//2147483647 14 } 15 }
2)基本数据类型转换
boolean不是数值型,不参与转换
分类:1)强制类型转换(显式的转换)
可能会溢出或损失精度.
2)自动类型转换(隐式的转换)
3)表达式中类型的自动转换
所有byte short char参与运算,自动转换为int
最终的结果类型是表达式中容量最高的类型
任何类型与string相连结果都是string.
4、运算符
4.1)算术运算符:
+号:2个字符相加得到是ASCII码表值;当2个字符串相加得到新字符串.
除号:任何整数除以0,会报错.
NaN:0.0/0.0 不是一个数;它自己不等于自己
自增/自减:将变量的值自增1/自减1
前自增:将变量值增1,再进行其他运算
后自增:将变量值增1,后拿变量原来的值,进行其他运算
注意:byte a ; a++ 相当于 a = a + 1,但是为什么没报错,java内部进行了转换a = (byte)(a+1);
1 public class zizeng 2 { 3 public static void main(String[] args) 4 { //自增自减 5 //demo1: 6 int num1 = 1; 7 num1 = num1 ++; 8 System.out.println(num1);//1 9 int num2 = 1; 10 num2 = ++ num2; 11 System.out.println(num2);//2 12 //demo2: 13 int i = 5; 14 i++; 15 System.out.println("i = " + i);//6 16 ++i; 17 System.out.println("i = " + i);//7 18 int a = ++i; 19 System.out.println("a=" + a);//8 20 System.out.println("i=" + i);//8 21 int b = i++; 22 System.out.println("a=" + b);//8 23 System.out.println("i=" + i);//9 24 } 25 }
4.2)赋值运算符
= -= += *= /= %=
注意:byte a ; a += 1 相当于 a = a + 1,但是为什么没报错,java内部进行了转换a = (byte)(a+1);
4.3)比较运算符
== != < <= > >= instanceof
4.4)三元运算符
boolean类型表达式 ? 值1 : 值2; //表达式为true时,结果为值1,否则,为值2.
4.5)逻辑运算符
& | ! && ||
& 与,值都为true,才是true
| 或,有一个值为true,就为true
&和&& 区别:当第一个表达式为false,&&双与不进行第二个表达式运算;而&单与进行运算
|和|| 区别:当第一个表达式为ture,||双或不进行第二个表达式运算;
1 public class LuojiDemo{ 2 public static void main(String[] args) { 3 //证明双&&,短路作用: 4 boolean b = (false && (1/0 == 1));//没有报错 5 System.out.println(b); 6 } 7 }
4.6)位运算符
& | ~ ^ >> << >>>
^异或:相同为假,不同为真
>> 右移
>>>无符号右移
>>和>>>的区别:变量为负数,则左侧一直用1补充,为正数一直用0补充;而>>>全部用0补充.
4.7)运算符优先级
算数运算符>比较运算符>逻辑运算符>三元运算符>赋值运算符