目录
- 1 标识符和关键字
- 2 常量和变量
- 3 运算符
- 4 流程控制
- break、continue、return关键字
- 5 方法的定义、调用和重载
- 可变参数
1 标识符和关键字
只要是起名字的地方,名字就是标识符。
标识符定义规则:
(1)组成部分:数字、字母、下划线,美元符号。
(2)不可以:不能以数字开头,不能使用java关键字。
(3)见名知意。
(4)大小写敏感。
(5)大驼峰命名(如:MyProject)
类名:首字母大写,驼峰命名;
方法、变量:首字母小写,其余驼峰命名;
包名:全部小写。
(6)长度不限制,但是不要太长。
关键字:JAVA语言赋予了特殊含义,用作专门作用的单词。
2 常量和变量
字面常量,字符常量
Java中利用final来定义常量,常量一旦被初始化后不能再更改。一个变量被final修饰后就变成了常量,值不可变,这个变量即为字符常量,字符常量名字要全部大写。
变量本质上代表一个“可操作的存储空间”,空间位置确定,但位置里放什么值不确定,可以操纵这个存储空间存储的值。JAVA是强类型的语言,声明变量时必须定义类型。不同类型的变量占内存大小不同,以达到节省空间的目的。
如果只定义一个变量,但没有初始化,相当于没有定义。没有初始化就使用变量会报错。变量不可以重复定义,变量名不能重复。
javap命令可以看到底层执行的过程
javap -v xxx.class
变量作用域:即变量在什么范围有效。离变量最近的花括号。
局部变量:方法中的变量;
成员变量:类中、方法外的变量;
数据类型:
基本数据类型:数值型(整数类型byte 1字节, short 2字节, int 4字节, long 8字节),浮点类型 (float 4字节,double 8字节),字符型,布尔型;
引用数据类型:类,接口,数组。
乱码问题:编码和解码的编码类型要一致(GBK, UTF-8, ANSI)
基本数据类型转换:数据类型不匹配时会进行类型转换,有自动类型转换和强制类型转换。数据类型占位小的像大的转换会发生自动类型转换(如:把整数放在double类型变量),反之需要进行强制类型转换。
多种数据类型参与运算时,整数类型、浮点类型、字符类型都可以参与运算,但布尔类型不能。
类型级别( 从低到高 ):
byte,short,char-->int-->long-->float-->double
当一个表达式中有多种数据类型时,要找出当前表达式中最高级别的类型,其余类型都转换为当前表达式中最高级别类型进行运算。
在进行运算时,类型级别与类型转换:
左=右:直接赋值;
左<右:强转;
左>右:自动转换。
特殊情况:对于byte,short,char,只要在他们的表述范围中,赋值就不用进行强制转换,可以直接赋值。
3 运算符
逻辑运算符和位运算符
逻辑运算符:左右连接的是布尔类型的操作数;&、|、&&(短路与,第一个表达式为false时第二个表达式不再计算,此时效率高于&)、||、!、^
位运算符:左右连接的是具体的数值。&(按位与),|,^(异或),~(取反),>>(有符号右移,右移是除),<<(左移是乘),>>>(无符号右移)
例如,4乘8最快的方式?4<<3(4左移三位)
二进制求一个数的负数:取反,加一。
运算符优先级:赋值<三目<逻辑<关系<算数<单目(!,++,~,–)
4 流程控制
顺序结构,条件判断结构(分支结构),循环结构。
分支结构:if,switch
循环结构:while,do while,for
循环只是提高了程序员编写代码的效率,但底层执行时仍然是重复执行。三种循环的底层效率一样高。
循环分为当型和直到型。
循环四要素:条件初始化;条件判断;循环体;迭代
什么情况用do-while:先执行后判断
for(条件初始化;条件判断;迭代){
循环体
}
break、continue、return关键字
outer: for(int i=1;i<=100;i++){ //outer是标签的名字,给外层循环起的名字
System.out.println(i);
while(i==36){
break outer; //这时终止的是外层的循环,默认是离break最近的循环
}
}
continue关键字也可以使用标签
outer: for(int i=1;i<=100;i++){ //outer是标签的名字,给外层循环起的名字
System.out.println(i);
while(i==36){
continue outer; //这时终止的是本次外层的循环,进行下一次循环
}
}
return:遇到return结束当前正在执行的方法
int count=0,count1=0,count2=0;
int num;
Scanner input=new Scanner(System.in);
while(count<=10){
num=input.nextInt();
if(num>=0)count1++;
else count2++;
if(num==666){
System.out.println(count1);
System.out.println(count2);
if(count<10) System.out.println("不正常");
else System.out.println("正常");
return;}
count++;
}
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(i+"*"+j+"="+i*j+"\t");
}
System.out.println();
}
for(int i=1;i<=3;i++){
for(int j=1;j<=9;j++){
System.out.print(*);
}
System.out.println();
}
5 方法的定义、调用和重载
方法:一段用来完成特定功能的代码段。
方法用于定义该类或该类的实例的行为特征和功能实现。方法是类和对象行为特征的抽象。面向对象中,整个程序的基本单位是类,方法是属于类和对象的。方法和方法是并列的关系,定义的方法不能写在main方法中。
方法的定义(写方法):形参列表怎么写(几个参数,什么类型);方法是否需要返回值(返回值类型是什么)。
修饰符 方法返回值类型 方法名(形参列表){
方法体;
return 方法返回值; //将返回值返回到方法调用处
}
方法的调用(用方法):实际参数怎么传入(传几个参数,什么类型);是否有返回值要接收。同一个类中的方法可以直接调用。
方法的作用:提高代码的复用性。
方法的重载:在同一个类中,方法名相同,形参列表不同的多个方法,构成了方法的重载。调用时会根据不同的参数自动匹配对应的方法。方法的重载只跟方法名和形参列表有关,与修饰符、返回值类型无关。形参列表不同指的是个数或顺序或类型不同。重载方法实际是完全不同的方法,只是名称相同而已。
可变参数
作用:提供一个方法,参数个数是可变的。解决了部分方法的重载问题。是JDK1.5之后的特性。
int…num
double…num
boolean…num
只能传入某一个类型的参数。
在方法内部对可变参数的处理跟数组一样。
可变参数和其他数据一起作为形参时,可变参数要放在最后。
public void method(int num1, int...num){}
public class Test{
public static void main (String[] args){
method(10);
method();
method(12,23,24);
method(new int[]{1,2,3,4,5});
}
public void method(int...num){
System.out.println("可变参数");
}
}
//这个程序会输出四次可变参数。