保留字:尚未使用,以后版本会作为关键字用,goto,const
合法标识符规则:
1.由26个英文字母大小写, 0-9 , _或 $ 组成
2.数字不可以开头。
3.不可以使用关键字和保留字,但能包含关键字和保留字。
4.Java中严格区分大小写,长度无限制。
5.标识符不能包含空格
名称命名规范
1.包名:多单词组成时所有字母都小写: xxxyyyzzz
2.类名、接口名:多单词组成时,所有单词的首字母大写: XxxYyyZzz
3.变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个
单词首字母大写: xxxYyyZzz
4.常量名:所有字母都大写。多单词时每个单词用下划线连接: XXX_YYY_ZZZ
先声明后使用
1.数据类型 变量名=变量值;
2.注意:
变量必须先声明后使用
变量都定义在作用域{}内。在作用域内,有效。
同一个作用域,不可以声明两个同名的变量
变量根据声明位置分类:
在方法体外,类体内声明的变量称为成员变量。
在方法体内部声明的变量称为局部变量。
数据类型
字符串属于类。
基本数据类型
byte的范围:-28 ~28 -1
为什么float和int同样占四个字节。但是其表示范围比long还大?
这是因为float中一部分表示具体数值,另一部分表示10的几次幂,所以表述范围大。还可以表示小数点,但存储空间一定,精度差。
char c1='a';
char c1=97//ASCII码
基本数据类型之间的运算法则
字符串String类型变量的使用
int num=10;
char c='a'//97;
String s="hello";
System.out.println(c+num+s);//107hello
System.out.println(c+s+num);//ahello10
进制之间的转换
二进制(binary): 0,1 ,满2进1.以0b或0B开头。
十进制(decimal): 0-9 ,满10进1。
八进制(octal): 0-7 ,满8进1. 以数字0开头表示。
十六进制(hex): 0-9及A-F,满16进1. 以0x或0X开头表示。此处的A-F不区分大小写。如: 0x21AF +1= 0X21B0
原码反码补码:
原码:直接将一个数值换成二进制数。最高位是符号位
负数的反码:是对原码按位取反,只是最高位(符号位)确定为1。
负数的补码:其反码加1
正数的原码、反码、补码都相同
计算机底层都是使用的数值的补码保存数据的。
进制转换:
十进制-二进制:除2取余的逆
二进制-八:三位二进制为八进制一位
二进制-十六:三位二进制为十六进制一位
short s1=10;
s1=s1+1;//编译失败,s1+1是int类型
s1=(short)(s1+1);正确
s1++//自增1不会改变本身变量的数据类型,编译成功,同时比上一句效率高
short s1=10;
s1=s1+1;//编译失败,s1+1是int类型
s1=(short)(s1+1);正确
s1+=1//不会改变本身变量的数据类型,编译成功。
列子一:
开发中,如果希望变量实现+2的操作,有几种方法?(前提int num=10;)
int num=10;
num=num+2;//方式一
num+=2//方式二,推荐
列子二:
开发中,如果希望变量实现+1的操作,有几种方法?(前提int num=10;)
int num=10;
num=num+1;//方式一
num+=2//方式二
num++//方式三,推荐
列子三:
int i=1;
i*=0.1;
System.out.ptintln(i);//0,0.1转为int,截断为0
i++;
System.out.ptintln(i);//1
boolean b1=true;
boolean b2=false;
System.out.println(b2==b1);//false
System.out.println(b2=b1);//true
System.out.println(b1=false);//false
int x=1;
int y=1;
if(x++==2 & ++y==2){ //x++:1,x:2,x++==2:false,++y:2,y:2
x=7;
}
System.out.println("x="+x+",y="+y);//2,2
实例2
int x=1;
int y=1;
if(x++==2 && ++y==2){ //x++:1,x:2,x++==2:false
x=7;
}
System.out.println("x="+x+",y="+y);//2,1
实例3
int x=1;
int y=1;
if(x++==2 | ++y==2){ //x++:1,x:2,x++==2:false,++y:2,y:2,true
x=7;
}
System.out.println("x="+x+",y="+y);//7,2
实例2
int x=1;
int y=1;
if(x++==2 || ++y==2){ //x++:1,x:2,x++==2:false,++y:2,y:2,
x=7;
}
System.out.println("x="+x+",y="+y);//7,2
面试题:
class Test{
public static void main(String[] args){
boolean x=true;
boolean y=false;
short z=42;
//if(y==true)
if((z++==42)&&(y=true))z++; //z++:42,t,z:43,z:44
if((x=false)||(++z==45))z++; //f,++z:45,z:45,t,z:46
System.out.println("z="+z);//46
}
}
位运算符
最高效的方式计算2*8?
2<<3或8<<1(更好)
实例1
交换两个变量的值
int num1=10;
int num2=20;
System.out.println("num1="+num1+",num2="+num2)
//方式一,推荐
int temp=num1;
num1=num2;
num2=temp;
//方式二
//好处:不定义临时变量,弊端:相加操作可能超出存储范围;有局限性,只能是用于数值型
num1=num1+num2;
num2=num1-num2;
num1=num1-num2;
//方式三 依据:m=(m^n)^n,局限性,只适用于数值类型
num1=num1^num2;
num2=num1^num2;
num1=num1^num2;
//一步
int max=((n1>n2)?n1:n2)>n3?((n1>n2)?n1:n2):n3;
int max1=(n1>n2)?n1:n2;
//两步
int max2=(max1>n3)?max2:n3;
int a = 3;
int b = 1;
if(a = b){
System.out.println("Equal");
}else{
System.out.println("Not Equal");
}
编译不通过, 错误: 不兼容的类型: int无法转换为boolean if(a=b)
实例二:如何求一个0~255范围内的整数的十六进制值,例如60的十六进制表示形式3C
//方式一:自动实现
String str1 = Integer.toBinaryString(60);
String str2 = Integer.toHexString(60);
//方式二:手动实现
int i1 = 60;
int i2 = i1&15;//得到二进制的后四位
String j = (i2 > 9)? (char)(i2-10 + 'A')+"" : i2+"";
int temp = i1 >>> 4;
i2 = temp & 15;//得到数的第二组四位二进制
String k = (i2 > 9)? (char)(i2-10 + 'A')+"" : i2+"";
System.out.println(k+""+j);