目录
Java代码的基本格式
我们写程序都必须要有格式来规范,所以在JAVA程序里它的代码都必须放在一个类中,因此,我们写任何程序都需要新建一个类。定义类的关键字使用class关键字,类的前面可以加一些权限的修饰符代码写在类名后面的在大括号之中
JAVA语言中严格的区分大小写
JAVA语言虽然没有严格的要求,用什么样的格式来写代码,但是我们应该养成一个良好的计算机习惯,让自己的代码更清晰明了,更简洁美观
一个字符串不能分开在两行中书写,这样会报错。
如果一定要进行两行的书写的话,可以将这一段分成两个字符串,再用加号将它们相连
注释
在编写程序时,为了使代码易于阅读,通常会在实现的同时加一些注释。
注释是对程序的某个功能或者某行代码的解释,它只在JAVA源文件中有效,编译器会忽略注释的信息,不会编译到class字节码文件中去
标识符
标识符就是自己定义的,名称,包名类名方法名参数名变量名称这些都是标识符,
可以由任意顺序的大小写字母数字下划线和美元符号组成,
但是不能以数字开头,并且不能是JAVA中的关键字
初学者在定义标识符应该介意遵循以下规则
并不是强制要求,但遵行的话会比较好
- 包名所有字母一律小写、
- 类名和接口名,每个单词的首字母要大写、
- 常量名,所有字母都大写,单词之间用下划线连接、
- 变量名和方法名的第一个单词首字母小写从第二个单词开始每个首字母大写
- 在程序中,应该尽量使用有意义的英文单词来定义标识符,使得程序便于阅读做到见名知意
关键字
关键字是编译语言中事先定义好,并且赋予了特殊含义的单词,也叫做保留字和其他语言一样JAVA中保留了很多关键字,下面举例的是JAVA中所有的关键字
千万不要去死记硬背,用到哪里就自然会学到哪里记到哪里
如果使用JAVA中的关键字定义,那么很有可能会出错,甚至编译失败
常量
常量是程序中固定不变的值,是不能够进行改变的数据,常量有很多,包括整型、浮点型、布尔型等等。
整形常量
进制就是人们计数的方式
现实生活中,大多以十进制为计算,但计算机里它的底层逻辑是二进制
浮点数常量
因为虚拟机会默认是double双精度浮点数
字符常量
用于表示一个字符,一个字符常量,要用英文的单引号引起来,它可以是英文字母,数字标点符号以及汉字来表示的特殊字符,但是他一对单引号只能应用于一个字符,必须确保单引号括起来的是一个字符
有例外就是转义字符,'\u0000'表示一个空白字符,之所以能这样表示,
是因为JAVA采用的是unicode字符集,unicode字符以\u开头,而'\u0000'在unicode码表中对应的是空白字符
字符串常量
是一串连续的字符,字符串常量要用一对双引号引起来,一个字符串可以包含一个字符或多个字符,也可以不包含任何字符,那么长度为零
注意,在编译器内所使用的所有符号均为英文的符号
布尔类型常量
只有两个值,真和假通常用于区分真假
Null常量
只有一个值null表示对象的引用为空
变量
在程序运行的期间,可能会产生一些临时的数据,程序会将这些数据保存在一些内存单元中,每个内存单元都用一个标识符来标识这些单内存单元,我们称之为变量定义的标识符,就是变量名内存单元中存储的数句,就是变量的值
Java是一门强制类型的编程语言,对变量的数据类型有严格的限定,在定义变量时必须声明变量的类型在为变量赋值时必须赋予和变量同一类型的值,否则程序会报错
JAVA的数据类型只分为两个大类,基本数据类型和引用数据类型
字符串属于引用类型中类的范围
整数类型
分为四个byte short int long,其中,byte存储的范围是最小的,lone存储的范围是最大的,
这样的区分有利于节约内存
占用空间是不同类型的变量分别占用的内存大小,取值范围是变量存储的值不能超出的范围,JAVA中整数类型默认为int类型
为一个long类型的变量赋值时,要注意一点,所赋的值后面要加上字母l,说明赋值为long类型,如果赋的值未超出int的取值范围,则可以省略字母l
在取值范围中E表示,十为底的指数E后面的加号和减号代表正指数和负指数
在程序中也可以为一个浮点数类型变量赋予一个整数的数值,但是整数并不能放浮点数类型
字符常量
每个char类型的字符变量都会占用两个字节
赋值时要用单引号将字符括起来
可以赋值0~65535范围内的整数,计算机会自动转换为所对应的字符类型转换
![](https://img-blog.csdnimg.cn/65af9d4a8ec94698a61f97022ab8fcd4.png)
自动类型转换
也叫做隐式类型转换,指的是两种数据类型在转换的过程中不需要显示的进行声明,
Byte类型转换为int类型,是可以直接进行自动类型转换的,最简单的说法就是bet类型的存储范围,没有int类型的存储范围大,那么它可以直接完全的转换为int类型
- 整数类型之间可以转换
- 整式类型转换为float类型,
- 其他类型转换为double类型
如果想将大的类型转换为小的类型,那就不是自动类型转换了,
比如将int类型转化为beta类型,这种转换是强制类型转换,
强制类型转换
强制类型转换也是显示类型转换,指的是两种数据类型之中的转换,需要进行显示的声明,当两种类型彼此不兼容或者目标类型取值范围小于原类型时,自动类型转换无法进行,这就需要强制类型转换
强制类型转换的格式是
目标类型 变量=(目标类型)值
作用域
变量需要在它的作用范围内才可以被使用这个作用范围,被称为作用域,变量在哪个大括号里面被定义那么大括号所包含的代码区域就是这个变量的作用域
,也就是说出了这个大括号这个变量就不会有作用
局部代码块是限制变量的作用范围的
运算符
运算符分为算术运算符和赋值运算符
算术运算符
算术运算符是用来处理四则运算的符号,是最简单最常用的运算符号,取模就是取余数
在进行自增和自减的运算时,如果运算符号放在操作数的前面,则先进行自增或自减运算,再进行其他运算,反之,如果放在操作数的后面,则先进行其他运算,再进行自增自减的运算
++a(--a)//先运算后使用
a--(a++)//先使用后运算
在进行除法运算时,当除数和被除数都是整数时可以得到的结果也是一个整数,
如果除法算术中有小数参与,那么得到的结果才会是小数
在进行取模%运算时,运算结果的正负取决于被模数%左边的数的符号与模数%右边的数的符号无关。
赋值运算符
赋值运算符的作用就是将常量变量或表达式的值赋给某一个变量
我们需要注意的问题有
在JAVA中,可以通过一条赋值语句对多个变量进行赋值(但不太赞同这样使用)
除了等号,其他都是特殊的赋值运算符以+=为例,x+=3就相当于x=x+3,首先会进行加法运算,
x+3再将运算结果赋值给变量x,-=,*=,/=,%=赋值运算符可以以此类推
案例
在为变量赋值时,当两种类型彼此不兼容或者目标类型取值范围小于原类型时,需要进行强制类型
转换,然而,在使用运算符进行赋值时,强制类型转换会自动完成程序,不需要做任何的显示的声
明
比较运算符
用于对两个数值或变量进行比较,其结果是布尔型,为真或假
在使用时需要注意,不能将比较运算符==误写成赋值运算符=
逻辑运算符
逻辑运算符用于对布尔型的数据进行操作,结果仍然是个布尔型
在使用逻辑运算符的过程中,需要注意以下几个细节
- 逻辑运算符可以针对结果为布尔值的表达式进行运算
- 运算符&和&&都表示与运算,运算符右边为表达式时,两者在使用上还是有一定的区别的,在使用&进行运算时,不论左边为真或者为假,右边的表达式都会进行运算,如果使用&&进行运算,当左边为假时,右边的表达式不会进行计算,因此&&被称为短路与
案例
||符号表示,短路或,当运算符或的左边为真时,右边的表达式不会进行运算
运算符^表示异或,操作当运算符两边的布尔值相同时,结果为甲当两边布尔值不相同时,结果才为
真
运算符的优先级
在一些比较复杂的表达式进行运算的时候,要明确表达式中所有运算符参与运算的先后顺序,我们把这种顺序称为运算符的优先级
我们简单的去记的话,就是先算括号里面的,再算括号外面的,最后算等于
案例(根据所学完成例题)
package b;
public class t {
public static void main(String[] args) {
// TODO Auto-generated method stub
/**商品库存清单案例
用变量的形式对商品的数据进行保存
首先我们先定义商品的属性
名称 大小 金额 库存*/
String s1="手机";//商品1
double s1c=6.67;//商品1尺寸
double s1j=3333.99;//商品1金额
int s1k=6;//商品1库存
String s2="电脑";
double s2c=14.4;
double s2j=7777.99;
int s2k=3;
String s3="平板";
double s3c=13;
double s3j=2222.99;
int s3k=7;
//输出清单
System.out.println("-----------商品清单----------");
System.out.println("名称 大小 金额 库存");
System.out.println(s1+" "+s1c+" "+s1j+" "+s1k);
System.out.println(s2+" "+s2c+" "+s2j+" "+s2k);
System.out.println(s3+" "+s3c+" "+s3j+" "+s3k);
//计算金额
int z=s1k+s2k+s3k;//总库存
double zj=(s1j*s1k)+(s2j*s2k)+(s3j*s3k);//总金额
System.out.println("--------------------------");
System.out.println("总库存为:"+z);
System.out.println("总库存金额为:"+zj);
}
}
条件判断语句
if条件语句
三元运算符
在JAVA中,还有一种特殊的运算,叫三元运算,它和if else语句类似
语法是:判断条件?表达式一:表达式2
三元运算通常用于对某个变量进行赋值,当判断条件成立时,运算结果为表达式一的值,否则是表达式二的值
If else if else语句
用于对多个条件进行判断,进行多种不同的处理
其语法格式如下
一旦判断条件成立,那么之后的所有语句都不再执行
if else例题
package a;
public class h {
public static void main(String[] args) {
// TODO Auto-generated method stub
int x = 30;//定义条件
if( x < 20 ){//判断
System.out.print("这是 if 语句");
}else{
System.out.print("这是 else 语句");
}
}
}
Switch
Switch是一种很常见的选择,语句和if条件语句不同,它只能针对某个表达式的值做出判断,从而决定执行哪一串代码
在switch语句中使用switch关键字来描述一个表达式使用case关键字来表述和表达式结果比较的目标值,当表达式的值和目标值匹配时,会执行case下的语句switch语句的基本语法。
结果如图
Switch中还有一个比较特别的东西,就是brake,Brake是跳出循环,可以用于结束循环
Switch的格式是switch case Brake,如果switch的条件得到了case的满足,那么我们不再需要剩下的语句执行的话,我们可以使用brake,
需要注意,switch中的表达式只能是byte 、 short、 char 、int 、枚举(枚举是JAVA中一种引用的数据类型)、String类型的值如果传入其他值程序会报错
流程图表达
例题代码
package a;
import java.util.Scanner;//导入扫描器
public class h {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner q=new Scanner(System.in); //打开扫描器
int c=q.nextInt();//输入数据
switch(c) {//switch
case 12:System.out.println(123);//判断
break;
case 13:System.out.println(124);
break;
default:System.out.println(1);
q.close();//关闭
}
}
}
While循环
While语句跟if语句很像,都是根据条件判断来决定是否执行后面的代码,
区别在于while语句会反复的进行判断,如果条件成立,那么大括号内的执行语句就会执行,直到条件不成立,循环结束
while例题代码
package a;
public class h {
public static void main(String[] args) {
// TODO Auto-generated method stub
int x = 1;//定义变量x,初始值为1
while( x <=4 ){ //循环条件
System.out.println("x = "+ x);//条件成立,打印x的值
x++;//x自增
}
}
}
do while循环
do while循环和do while循环语句功能很类似,语法结构是
Do while语句有一个特点,无论他的条件为真还是假,他都会先执行一次语句,这是他和while的区别
do while 例题代码
package a;
public class h {
public static void main(String[] args) {
// TODO Auto-generated method stub
int x = 1;//定义变量x,初始值为1
do {
System.out.println("x =" + x);//打印x的值
x++; // 将x的值自增
}while(x <=0);// 循环条件
}
}
for循环
For循环语句是最常用的循环语句,一般用在循环次数已知的情况下;语法格式如下图
For后面括号中包括三部分内容初始化表达式,循环的条件和操作表达式,他们之间用分号隔开,大括号中执行的语句为循环体
For循环的执行有严格的秩序限制的不允许搞错了他的执行过程
过程表达如下
循环嵌套
是指在一个循环语句的循环体中,再定义一个循环语句的语法结构
where、do where、for循环都可以进行嵌套,而且他们之间也可以进行相互的嵌套
内循环是外循环的一个循环主体
跳转语句(break,continue)
跳转语句用于实现循环执行过程中程序流程的跳转,在JAVA中的跳转语句有breakt和continue语句
Brack语句一般用在switch语句中和循环语句中,它的作用是终止某个case并跳出switch结构
但是它也适用于其他循环
Continue语句用在循环语句中,它的作用是终止本次循环执行下一次循环并不是完全跳出循环
for循环遇到continue后先执行增量部分,while和do...while语句遇到continue则直接回到条件测试部分
案例:猜数字游戏
package b;
import java.util.Random;
import java.util.Scanner;
public class t {
public static void main(String[] args) {
// TODO Auto-generated method stub
Random random = new Random();
int num = random.nextInt(100)+1;//随机数
Scanner scanner = new Scanner(System.in);
while(true){
System.out.println("请输入猜测的数:");
int toGuess = scanner.nextInt();//输入数据
if(toGuess>num){//如果输入的数大于随机数
System.out.println("猜大了");
} else if(toGuess<num){//如果输入的数小于随机数
System.out.println("猜小了");
} else{
System.out.println("猜对了!");
break;//猜到了,跳出循环
}
}
scanner.close();
}}
方法
在一个程序中,程序在运行过程中,要不断的执行一个动作,我们要重复编写100行代码,这样程序会变得很臃肿,可读性也非常的差
为了解决代码重复编写的问题,我们可以将代码块提取出来,放在一个大括号中,为这段代码起一个名字,这样每次使用的地方通过这个名字来调用代码就可以
所以所提取出来的代码可以被看作成是程序中定义的一个方法,程序在需要的时候可以调用这个方法
在JAVA中声明一个方法的具体语法格式如下
修饰符是对访问权限的限定,如public static都是修饰符
返回值类型:用于限定方法返回值的数据类
参数:用于限定调用方法时传入参数的数据类型
参数名:是一个变量用于接收调用方法时传入的数据
Return关键字:用于结束方法以及返回方法指定类型的值
返回值被return语句返回的值,该值会返回调用者
Java允许在一个程序中定义多个名称相同的方法,但是参数的类型或个数必须不同,这就是方法的重载
数组
数组是指一组数据的集合,数组中的每个元素都被称为元素,在数组中可以存放任意类型的元素,但同一数组存放的元素类型必须一致,在JAVA中可以使用下列格式定义一个数组
上述语句就相当于在内存中定义了100个int类型的变量,第一个变量的名称为X0,第二个变量的名称为X1,以此类推,第100个变量的名称为x99,这些变量的初始值都是零
在JAVA中,为了方便我们获得数组的长度,提供了一个length属性,在程序中可以通过数组名点length的方式来获得数组的长度,也就是元素的个数
当数组被成功创建后,数组中元素会被自动赋予一个默认的值,根据元素的类型不同,默认初始化的值也是不一样的
静态初始化
在初始化数组时,还有一种方式叫静态初始化就是在定义数字的同时,为数组的每个元素赋值,有两种方式
为了简便建议采用第二种方式,在定义数组的同时赋值
每个数组的索引都有一个范围及零到length- 1,在访问数组的元素时,索引不能超过这个范围,否则程序会报错,其实就是数组的长度
在使用变量引用一个数组时,变量必须指向一个有效的数组对象,如果该变量的值为null,则意味着没有指向任何数组,此时,通过该变量访问数组的元素会出现空指针异常
遍历数组
在操作速度时,通常需要依次访问数组中的每个元素,这种操作叫便利素组
使用for循环进行遍历数组
数组排序
在操作数组时,经常需要对数组中的元素进行排序
冒泡排序
比较常见的一种算法,冒泡过程中不断比较,数组中相邻的两个数较小者上浮,较大者下沉和水中气泡上升的原理相似
冒泡排序用代码实现一般是两层循环
内循环内有个if的判断,比较相邻的元素进行元素的交换
从而达到气泡的上升
数组最值在操作数组时,经常需要获得数组中元素的最值
案例
多维数组
多维数组可以简单的理解为,在数组中嵌套数组在程序中比较常见的是二维数组,二维数组的定义有很多方式,具体如下
一维数组就是一个一个值
二维数组就是一个一个地址,在进入到地址中去找一个一个的值
方式2这一种方式有一个好处,每个数组存储多长都是可以的
多维数组对元素的访问,也是通过下标的方式
Arrays.fill(数组名,替换的值);
Arrays.fill(数组名,前索引,后索引,替换的值);
复制数组元素(空位补0,溢出去掉)
新数组名=Arrays.copyOf(旧数组名,新数组长度);
复制数组部分元素(前在后不在)
新数组名=Arrays.copyOfRange(旧数组名,前索引,后索引);
查询数组元素(先排序再查询)
索引=Arrays.binarySearch(数组名,元素);
查询部分元素 (先排序再查询,前含后不含
索引=Arrays.binarySearch(数组名,前索引,后索引,元素);
案例
随机点名器
package a;
import java.util.Random;
import java.util.Scanner;//导入扫描器
public class h {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个字符串数组存储姓名
String []arr=new String[3];
System.out.println("---------随机点名器---------");
//创建接收数据对象
Scanner sc=new Scanner(System.in);
//使用for循环依次接收用户输入的姓名存储到数组中
for(int i=0;i<arr.length;i++) {
//因为数组的下标从0开始,所以这里表示第几人时需要将下标+1
System.out.println("第"+(i+1)+"个学生姓名");
//使用nextLine方法获取所有字符串存储到数组中
arr[i]=sc.nextLine();
}
//打印数组中的所有姓名
for(int i=0;i<arr.length;i++) {
System.out.println("第"+(i+1)+"个学生姓名:"+arr[i]);
}
//创建随机数对象
Random r=new Random();
//数组的长度作为抽取随机数的范围
int a=r.nextInt(arr.length);
//将随机抽取到的数值作为数组下标时输出的姓名即为抽取的学生姓名
System.out.println("被点名的同学是"+arr[a]);
}
}