Java基础语法2
类型转换
Demo04、05
转换方法
- 强制转换 (类型)变量名 高–低
- 自动转换 低–高
注意点:
1、不能对布尔值进行转换
2、不能把对象类型转换为不相干的类型
3、在把高容量转换到低容量的时候,强制转换
4、转换的时候可能存在内存溢出,或者精度问题!
-
操作较大数,注意溢出问题,可如下操作:
public static void main(String[] args) { //操作较大数,注意溢出问题 //JDK7新特性,数字之间可用下划线分割,且不会被输出 int money = 10_0000_0000; int years = 20; int total = money*years;//-1474836480,计算的时候溢出了 long total2 = money*years;//默认是int,转换之前已经存在问题了 long total123 = money*((long)years);//先把一个数转换为long System.out.println(total123); //L l } }
变量
Demo07
- 变量是什么:就是可以变化的量!
- Java是一种强类型语言,每个变量都必须声明其类型。
- Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。
- 注意事项:
- 每个变量都有类型,类型可以是基本类型,也可以是引用类型。变量名必须是合法的标识符。
- 变量声明是一条完整的语句,因此每一个声明都必须以分号结束
- 类变量 static
- 实例变量:从属于对象;如果不自行初始化,除了布尔值默认为false,其他基本类型为0或0.0
- 除了基本类型,其余都是null
- 局部变量;必须声明和初始化值
常量
Demo08
- 常量(Constant):初始化(initialize)后不能再改变值!不会变动的值。
- 所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。
- 常量名一般使用大写字符。
- final 常量名=值;
final double PI=3.14;
注意
- 所有变量、方法、类名:见名知意
- 类成员变量:首字母小写和驼峰原则:除了第一个单词以外,后面的单词首字母大写 monthSalary
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线:MAX_VALUE
- 类名:首字母大写和驼峰原则:Man,GoodMan
- 方法名:首字母小写和驼峰原则:run(),runRun()
运算符
operator
- % :取余,模运算
public static void main(String[] args) {
//关系预算符返回结果:正确,错误 布尔值
int a = 10;
int c = 24;
//取余,模运算
System.out.println(c%a);// c/a 24/10=2...4
}
- long,int,short,byte运算:
- 有long结果默认为long
- 其它默认为interesting型
public class Demo02 {
public static void main(String[] args) {
long a =290390299489332L;
int b = 398;
short c = 2298;
byte d = 56;
System.out.println(a+b+c+d);//Long 有long结果为long
System.out.println(b+c+d);//Int 默认int
System.out.println((double)c+d);//Double 强制转换为double
}
}
- 关系运算符返回结果为布尔值:true;false
- != :不等于
public class Demo03 {
public static void main(String[] args) {
//关系预算符返回结果:正确,错误 布尔值
int a = 10;
int b = 30;
System.out.println(a>b);
System.out.println(a<b);
System.out.println(a==b);
System.out.println(a!=b);
}
}
- ++ :自增;-- :自减 ;都是一元运算符
- b=a++ :先赋值,再自增
- b=++a :先自增,再赋值
public class Demo04 {
public static void main(String[] args) {
//++自增;--自减 一元运算符
int a = 6;
int b = a++;//执行完这行代码后,先给b赋值,再自增
//a++ :a = a+1
System.out.println(a);
//++a :a = a+1
int c = ++a;//执行完这行代码前,先自增,再给c赋值
System.out.println(a);
System.out.println(b);
System.out.println(c);
//幂运算 2^3 2*2*2 = 8
//很多运算,我们会使用工具类来操作!
double pow = Math.pow(2,8);
System.out.println(pow);
}
}
- 逻辑运算符
- && :逻辑与运算:两个变量都真,结果才为true
- || :逻辑或运算:两个变量有一个真,则结果为true
- ! :非,取反:如果是假则变为真;如果是真则变为假
- 运算a&&b时,若a为假,则停止运算,输出false,不会继续运算b
public class Demo05 {
public static void main(String[] args) {
//与(and) 或(or) 非(取反)
boolean a = true;
boolean b = false;
System.out.println("a&&b:"+(a&&b));//逻辑与运算:两个变量都真,结果才为true
System.out.println("a||b:"+(a||b));//逻辑或运算:两个变量有一个真,则结果为true
System.out.println("!(a&&b):"+!(a&&b));//如果是假则变为真;如果是真则变为假
//短路运算
int c = 6;
boolean d = (c<4)&&(c++<4);//c<4为false,&&结果直接返回false,不会继续运算
System.out.println(d);
System.out.println(c);
}
}
-
位运算(运算效率高)
- 若 A = 0011 1100 ; B = 0000 1101 ,则:
A&B = 0000 1100//都为1才为1,其余为0
A|B = 0011 1101//有1则1
A^B = 0011 0001//相同为0,不同为1
~B = 1111 0010//与B相反 - << :左移(*2);>> :右移(/2)
- 若 A = 0011 1100 ; B = 0000 1101 ,则:
public class Demo06 {
public static void main(String[] args) {
/*
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 16
*/
System.out.println(2<<3);
}
}
//结果为16
- 条件运算符
- x ? y : z ——如果 x==true,则结果为y,否则为z
public class Demo08 {
public static void main(String[] args) {
// x ? y : z
//如果 x==true,则结果为y,否则为z
int score = 80;
String type = score<60 ?"不及格":"及格";
System.out.println(type);
}
}
//结果为及格
-
赋值运算符
-
+:字符串连接符
-
a+=b :a=a+b
-
a-=b :a=a-b
-
public class Demo07 {
public static void main(String[] args) {
int a = 10;
int b = 20;
a+=b;//a=a+b
a-=b;//a=a-b
System.out.println(a);
//字符串连接符 + , String
System.out.println(a+b+"");//30 ""在后面则先算a+b
System.out.println(""+a+b);//1020 ""在前面则拼接a,b
}
}