1.关键字、保留字和标识符
关键字是对编译器有特殊意义的单词,不同的关键字单词可以用来表示一种数据类型,或者表示程序的结构等。 关键字不能用作变量名、方法名、类名、包名。
goto是java的保留关键字,意思是java并没有使用goto,以后是否使用未定。
Java中的包、类、方法、参数和变量的名称总称为标识符。
标识符的命名规则:
a) 必须以字母、下划线(_)或美元符号($)开头;
b) 余下的字符可以是下划线、美元符号或任何的字母或数字,长度不限;
c) 标识符中不能有空格;
d) 不能使用Java中的关键字或保留字做为标识符。
其中:
项目名:全部小写。如:workdesk.
包名:全部小写,名词。如:java.event.
类名、接口名:首字母大写,多个单词组成时,每个单词的首字母大写。如:public class VariableClass {};
方法名:首字母小写,多个单词组成时,从第二字单词开始,每个单词的首字母大写。如:public MainMachine getMachine() {};
当java程序如果没有使用package声明包的名称,则编译器会自动添加一个default默认包(default是关键词,default不是包名,是没写的意思)。
2.常量、变量和数据类型
2.1常量
在Java中,使用final修饰的变量称为常量,常量就是在运行过程中不能被修改的变量,其必须指定数据类型。可以在定义的时候初始化,或在构造方法中初始化。
常量命名要大写。
属性常量需要在定义时进行初始化,常量一旦被初始化就不能被修改。
例1:
private static final String MAN = "男";
属性常量如果在定义时没有进行初始化,可以在构造方法中初始化一次。
例2:
private final String SEX;
public AbstractClass() {
super();
this.SEX = " ";
}
在JDK 7以后版本中,数值常量增加对下划线的支持。可以在数值常量中使用’_’来提升可阅读性。如:int a = 100_000_000;但不能在小数后面,或者数字的开始或结束的地方放下划线。
2.2 变量
变量是在程序运行过程当中,用于暂存数据的一个字段或一个标识,可以保存程序运行时用户输入的数据或特定的运算结果等。
变量的格式为:String(数据类型) name(变量名) =(赋值符号) “”数据值
例1:
private String nameString = "hello";
例2:
double salary;//声明变量
salary=1500.00;//变量赋初值
System.out.println(salary);//访问变量
int age=23;//变量初始化
2.3 变量的分类
目标:为了在不同作用范作用域和范围下保存或传递数据。
①实例变量(非静态变量)Instance Variables(Non-Static Fields)
实例变量:定义在类下面,无static修饰。是所属对象所私有的,一个对象的改变不影响其他对象。其可以在本类的实例方法中和同一个对象中共享数据。实例变量不能被静态方法引用。
②类变量(静态变量)Class Variables(Static Fields)
类变量:定义在类下面,使用static修饰。是所有对象共有的,一个对象将它的值改变,其他对象得到的就是改变后的结果。其可以访问作用域范围内共享数据,是全局作用域。加了static是类变量,调用时不用新建实例对象,直接使用类名进行调用。Static修饰的方法不能被重载,但能被继承。
③局部变量 Local Variables
局部变量是定义在方法内或者代码块内的变量,只在变量定义后的方法内部或代码块中有效。局部变量在使用前,必须先初始化。
④全局变量(成员变量)
是定义在类中的变量,不可以进行初始化,Java会自动进行初始化,如果是引用类型默认初始化为null,如果是基本类型例如int则会默认初始化为0。
⑤参数 Parameters
参数:定义在方法的参数列表,由参数类型和参数名构成,参数不能使用赋值符号进行赋值。其在方法内有效,在程序运行过程中根据调用情况和参数决定参数值。public static void main(String[] args)。这里的args变量是此方法的参数。
例:实例变量和类变量的使用划分。
package chap2.classroom;
public class Variables {
static int age;//类变量,使用static修饰
public String name = "李四";//实例变量
public static void main(String[] args) {
Variables A = new Variables();
A.age=10;
A.name="张三";
System.out.println(A.age);//结果为10
System.out.println(A.name);//结果为张三
Variables B = new Variables();
//类变量的针对所有对象的,所以A.age=10,改变了age的结果,所以B.age的值也改变了。
System.out.println(B.age);
//实例只改变自身的,所以A.name="张三"的name的改变不影响B.name的值。
System.out.println(B.name);
}
}
2.4 基本数据类型分类
在Java中,数据类型分为两类:基本数据类型和引用数据类型。
数据类型一定要在常量名或变量名面前。
其中,整数默认是int类型,小数默认是double类型的。
字符类型可以表示一个字符图像和一个字符编号。其保存的是在字符编码表的位置,这个位置是一个index索引,是个数字。字符要用单引号表示,引号内部必须有个特定的符号。如:char c = ‘a’;并且字符串可以保留汉字,如:char c3=‘中’;
boolean类型表示一种逻辑类型,真和假,对与错,正与反。只有true和false两个值。例:boolean bool1=true; boolean boo2=false;
单精度浮点数必须以f或F结尾,双精度的小数以D或d结尾,如果不写默认是double类型。
引用数据类型有类、接口和数组。类中有String字符串,字符串String是用双引号表示的,可以是空字符串。如:String str = “”;,String字符串的默认值是null,null是一种特殊的数据类型,如:String string=null;
2.5 进制数
常用的进制数有二进制,八进制,十进制,十六进制。
二进制:0 1
八进制:0 1 2 3 4 5 6 7
十进制:0 1 2 3 4 5 6 7 8 9
十六进制:0 1 2 3 4 5 6 7 8 9 A B C D E F
二进制数以0b或0B开头,例:int i3 = 0B1010101010101;
八进制以(零)0开头,例:i3 = 01010101017;
十六进制以(零)0x开头,例:i3 = 0xa1b2c3d4;
3.运算符和表达式
运算符(操作符)是一种特殊的符号,用以表示数据的运算、赋值和比较。
运算符的种类:
赋值运算符:=、+=、﹣=、=、/=、%=
算术运算符: +、﹣、、/、%、++、 –
比较运算符:>、<、>=、 <=、= =、!=、instanceof
逻辑运算符:!、&&、||
位运算符: &、|、^ 、 ~、>>、<<、>>>
条件运算符: ?:
逻辑运算符优先级:算数运算符>比较运算符>逻辑运算符>赋值运算符。对于复杂的表达式,按照运算的优先级别进行拆分句子。
左移(<<)是乘,右移(>>)是除,每移动一位表示乘以2或除以2.
例1:计算3^2,要求使用效率最高的方法计算。解:3<<2
System.out.print(3<<2);//输出为12
instanceof用于判断某个对象是否在特定的数据类型,在反射或编程时常用
例2:
if(j instanceof String){
System.out.print("j的类型是字符串");
}
Instanceof也用于数据类型强制转换前,进行类型判断使用,避免出现异常。
例3:
if(object instanceof Animal){
Animal animal = (Animal)object;
animal.sing();
}else{
System.out.println("不是类型还原,不能进行强制转换");
}
算数运算操作数必须是数值类型,分为一元运算符和二元运算符。一元运算符只有一个操作数,二元运算符有两个操作数,运算符在两个操作数之间。
一元运算符:正‘+’,负‘-’,自加‘++’,自减‘- -’这四个。
正负号(+,-):在数值前,表示正数还是负数
自增、自减运算符: ++, –
自增、自减运算符可以用于数值变量之前或者之后
i++, 后++, 先将i的值作为整个表达的值, 然后将i增加1.
++i, 先++, 先将i增加1, 然后将i的值作为整个表达的值.
i–, 后–, 先将i的值作为整个表达的值, 然后将i减少1.
--i, 先–, 先将i减少1, 然后将i的值作为整个表达的值.
例3:设 x = 1 , y = 2 , z = 3,则表达式 y+=z--/++x 的值是( )。
int x=1;
int y=2;
int z=3;
y+=z--/++x;//z和x是来自不同变量,所以z--不影响++x变量
System.out.print("y="+y);
结果:y=3
例4:
int k=3;
k+=++k-k-- *++k;//字母相同,k--会影响*后面的++k的计算。
//1.先算赋值符号的右边,2.运算级别高的先算,3.按照四则运算顺序
//整个流程等于:k=k+(++k-k--*++k)=3+(4-4*(5-1)),注意k--是k为原值,然后再参与*后面的运算,即第二个++k为5的值后要-1.
System.out.println("kk="+k);
结果为:kk=-9
4.数据类型的转换
4.1 自动类型转换
自动类型转换又称为隐式类型转换,当有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那一种数据类型,然后进行计算。
自动转换规则:
Boolean类型不可以转换为其他的数据类型。
整型、字符型、浮点型的数据在混合运算中相互转换,转换时遵守以下原则:
byte、short、char之间不会相互转换,它们三者在计算时首先会转换为int类型。
例:
int a1=12;
char a2='好';
int v=a1+a2;//自动类型转换把字符char类型自动转换int类型
System.out.println("v="+v);
当把一个小范围的数据转换为大范围时,可以自动转换。当把一个大范围的数据转换为一个小范围时,需要进行强制转换,强制转换使用小括号转换。例:f=(float)d1;
4.2 强制类型转换
强制类型转换又称为显示类型转换。容量大的数据类型转换为容量小的数据类型时,需要使用强制类型转换。格式如下:变量=(目标类型)值。
例:
byte a;
int b;
a = (byte)b;
数据类型强制转化,会导致数据精度的损失,高数据位会全部损失掉;如果把小数转整数会把小数部分损失掉。
5.练习
1 已知a,b均是整型变量,写出将a,b两个变量中的值互换的程序。(知识点:变量和运算符综合应用) [必做题]
Ans:
package classroom.chap2;
import java.util.Scanner;
public class Chap2Change {
public static void main(String[] args) {
System.out.print("请输入a,b的值:");
Scanner cs = new Scanner(System.in);
int a=cs.nextInt();
int b=cs.nextInt();
int t = a;
a = b;
b = t;
System.out.print("a="+a+",b="+b);
}
}
2 给定一个0~1000的整数,求各位数的和,例如345的结果是3+4+5=12注:分解数字既可以先除后模也可以先模后除(知识点:变量和运算符综合应用) [必做题]
package classroom.chap2;
public class Chap2Sum {
public static int sum(int x){
int s = 0;
while(x>0){
s+=x%10;
x=x/10;
}
return s;
}
public static void main(String[] args) {
System.out.println(sum(35)); //sum方法是类方法,调用时不用新建实例对象
}
}
3 华氏温度和摄氏温度互相转换,从华氏度变成摄氏度你只要减去32,乘以5再除以9就行了,将摄氏度转成华氏度,直接乘以9,除以5,再加上32即行。[选做题]
M1:
package chap2.chap3.work;
import java.util.Scanner;
public class chap2_3 {
public static void main(String[] args) {
double a;
System.out.print("请输入华氏度a的值:");
Scanner cs = new Scanner(System.in);
a=cs.nextInt();
double change_a=(a-32)*5/9;
System.out.println("华氏度"+a+"转换为摄氏度后值为"+change_a);
double change_b=change_a*9/5+32;
System.out.println("摄氏度"+change_a+"转换为华氏度后值为"+change_b);
cs.close();
}
}
4 给定一个任意的大写字母A~Z,转换为小写字母。 (知识点:变量和运算符) [选做题]
package chap2.chap3.work;
import java.util.Scanner;
public class chap2_4 {
public static void main(String[] args) {
String a;
System.out.print("请输入一个大写字母:");
Scanner cs = new Scanner(System.in);
String aa=cs.next();//字符串的值
/*a=aa.charAt(0);//返回指定索引位置的char值
char b =(char)(a+32);*/
a=aa.toLowerCase();
System.out.print(aa+"小写为"+a);
cs.close();
}
}