Java003
类型转换
强制类型转换和自动类型转换
package base; public class Typeconversion { public static void main(String[] args){ int i=128; byte b=(byte)i;//内存溢出 //强制类型转换 高到低 (类型)变量名 System.out.println(i);//输出128 System.out.println(b);//输出-128 byte只能表示-128到127之间的数 //自动类型转换 低到高 double d=i;//由低到高,自动类型转换 System.out.println(d);//输出128.0 //低到高 //byte,short,char--int--long--float--double; /* 1.不能对布尔值进行转换 2.不能把对象类型转换为不相关的类型 3.在把高容量转换为低容量的时候,需要强制类型转换 4.转换的时候可能存在内存溢出和精度问题 */ System.out.println("_______________________"); double d1=3.141; System.out.println(d1);//输出结果3.141 System.out.println((int)3.141);//输出结果3,存在误差 float f1=3.14159f; System.out.println(f1);//输出结果3.14159 System.out.println((int)3.14159f);//输出结果3 System.out.println("_______________________"); char c='a'; int i2=c+1;//低转高自动转换 System.out.println((int)c);//输出结果97 System.out.println(i2);//输出结果98 System.out.println((char)i2);//输出结果b } }
类型转换注意事项
package base; public class TypeconversionExpand { public static void main(String[] args) { //操作比较大数字时,注意溢出问题 //JDK7新特性,数字之间可以用下划线分割,易读性 int money=1000000000; int money2=10_0000_0000; System.out.println(money);//输出结果1000000000 System.out.println(money2);//输出结果同样是1000000000 int year=20; int total=money*year; System.out.println(total);//输出-1474836480,计算结果溢出导致错误 long total2=money*year;//系统会先计算money*year的值,然后去赋予total2,计算时的值是int类型,在赋予之前就已经是错误的 System.out.println(total2);//输出-1474836480,同样溢出 long total3=money*((long)year);//先转换,在计算,成功 System.out.println(total3);//成功输出20000000000 } }
变量和常量
变量
-
变量就是可以变化的量
-
Java是一种强类型语言,每个变量都必须申明其类型
-
Java变量是程序中最基本的存储单元,要素包括变量名,变量类型和作用域;
Type varName=value; //数据类型 变量名 值
-
每个变量都有类型,可以是基本类型,也可以是引用类型
-
变量名必须是合法的标识符
-
变量声明是一条完整的语句,每一个声明都必须以分号结束
package base; public class Variable { //main方法 //类里除了方法还能定义属性,变量 //类变量 static static String St="String111"; //实例变量 从属于对象 如果不自行初始化,会变成这个类型的默认值 0 0.0 //布尔类型的默认值是false //除了基本类型,其余的默认值都是null String name; int age; boolean Bb; public static void main(String[] args) { ///int a,b,c; //int a=1,b=2,c=3; int a=1; int b=2; int c=3; String myname="有枫"; char cr='$'; double p=3.14; boolean bl=false; //变量类型 变量名 值 Variable v1=new Variable(); System.out.println(v1.age);//输出0 age未初始化,所以是默认值0 System.out.println(v1.name);//输出null if (v1.Bb){ System.out.println("true"); }else{ System.out.println("false"); }//输出false,布尔类型的默认值是false System.out.println(St); } //其他方法 public void add(){ //局部变量,必须申明和初始化值 String s1="有枫枫"; } }
变量作用域
-
类变量
-
实例变量
-
局部变量
常量
-
常量(constant)就是初始化后不能再改变值!不会变动的值
-
常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被修改
//final 类型 常量名=值; final double PI=3.141;
-
常量名一般使用大写字符
package base; public class constant { //static final 都是修饰符,不区分前后 //final static double PI=3.14; static final double PI=3.14; public static void main(String[] args) { System.out.println(PI); } }
命名规范
-
所有变量,方法,类名:见名知意
-
类成员变量:首字母小写,驼峰原则
-
局部变量:首字母小写,驼峰原则
-
常量:大写字母和下划线 MAX_VALUE
-
类名:首字母大写和驼峰原则
-
方法名:首字母小写和驼峰原则
运算符
介绍
优先级()
-
算数运算符: +,-,*,/,%(模运算,也就是求余运算),++,--
-
赋值运算符:=
-
关系运算符:> , < , ≥ , ≤,== , != ,instanceof
-
逻辑运算符:&& , || , !
-
位运算符:& , | , ^ , ~ , >> , << , >>>
-
条件运算符 ? :
-
扩展赋值运算符:+= , -= , *= , /=
算数运算符
package Operator; public class Operator { public static void main(String[] args) { //二元运算符 int a=10; int b=20; int c=25; int d=25; System.out.println(a+b); System.out.println(a-b); System.out.println(a*b); System.out.println(c%a);//输出结果5 25/10余数为5 //System.out.println(a/b);//结果输出为0,正确答案是小数,转int类型变成了0 System.out.println(a/(double)b);//得出结果0.5 //关系运算符返回的结果是布尔值 true false System.out.println(a>b);//false System.out.println(a<b);//true System.out.println(a==b);//false } } 自增 package Operator; public class AutoOperator { public static void main(String[] args) { //++ 自增 -- 自减 一元运算符 //a++ 就是 a+1 //a-- 就是 a-1 int a=1; int b=a++;//a=a+1 执行代码,先把a的值赋予b,然后再执行a++ System.out.println(a);//输出结果2 int c=++a;//执行时机的不同 a先进行自增,然后把值赋予c System.out.println(a);//输出结果3 System.out.println(a);//输出结果3 System.out.println(b);//输出结果1 System.out.println(b);//输出结果1 System.out.println(c);//输出结果3 System.out.println(c);//输出结果3 } }
逻辑运算符和扩展赋值运算符
package Operator; public class MoreOperator { public static void main(String[] args) { //逻辑运算符 //与(&&)and 或(||)or 非(!)取反 boolean a=true; boolean b=false; boolean c=true; boolean d=false; System.out.println("a&&b : "+(a&&b));//逻辑与运算 两个都为真,结果才为正 System.out.println("a&&c : "+(a&&c)); System.out.println("a||b : "+(a||b));//逻辑或运算 两个变量至少有一个为真,结果才是真 System.out.println("a||c : "+(a||c)); System.out.println("b||d : "+(b||d)); System.out.println("!(a&&b) : "+!(a&&b));//逻辑非运算 把(a&&b)结果取反,(a&&b)结果为真则取反结果为假,反之亦然 System.out.println("__________________________"); //短路运算 int i=5; boolean b1=(i<4)&&(i++<10); System.out.println(b1); System.out.println(i); // a&&b 如果开头的a就是错误的,那么b不再会进行比较和运算 短路运算 System.out.println("__________________________"); int j=5; boolean b2=(j++<10)&&(j<4); System.out.println(b2); System.out.println(j); System.out.println("_____________________"); //扩展赋值运算符:+= , -= , *= , /= int num1=10; int num2=20; //num1+=num2;//num1=num1+num2 num1=30 //num1-=num2;//num1=num1-num2 num1=-10 //num1*=num2;//num1=num1*num2 num1=200 //num1/=num2;//num1=num1/num2 num1=0.5 由于是转成了int类型,输出结果会变成0 //字符串连接符 + System.out.println(""+num1+num2);得出结果1020 会把后面的转换为String类型进行字符串拼接 //System.out.println(num1+num2+"");得出结果30 从左到右运算 } }
位运算符
package Operator; public class BitOperator { public static void main(String[] args) { //位运算 & , | , ^ , ~ /* A=00111100 B=00001101 A&B=00001100//对应位都为1结果才为1,否则为0 A|B=00111101//对应位都为0结果才为0,否则为1 A^B=00110001//对应位置相同结果才是0,否则为1 ~B=11110010//0变1,1变0,取反 <<左移 相当于把数字*2 >>右移 相当于把数字/2 2*8 2*2*2*2 效率极高 0000 0000 代表 0 0000 0001 1 0000 0010 2 0000 0011 3 0000 0100 4 0000 0101 5 0000 0110 6 0000 0111 7 0000 1000 8 0000 1001 9 0000 1010 10 0000 1011 11 0000 1100 12 0000 1101 13 0000 1110 14 0000 1111 15 0001 0000 16 */ System.out.println(2<<3);//输出16 } }
条件运算符
package Operator; public class TernaryOperator { public static void main(String[] args) { //三元运算符 // ? : //X?y:z //如果x==true,则结果为y,否则等于z int score=80; String type=score>60?"及格":"不及格"; System.out.println(type);//及格 } }
扩展
package Operator; public class OperatorExpand { public static void main(String[] args) { long a=1519440000L; int b=200; byte c=1; short d=10; System.out.println(a+b+c+d);//long类型 计算过程中含有long类型,那么结果也为long System.out.println(b+c+d);//int类型 System.out.println(c+d);//int类型 //计算过程中含有double类型的话,那么结果也为double //幂运算 2^3 2*2*2 很多运算我们会使用工具类来操作 double p=Math.pow(2,3); System.out.println(p);//输出结果8.0 } }

浙公网安备 33010602011771号