Java基础一到五章复习笔记

本文是Java基础知识的复习笔记,涵盖了Java语言特点、JDK和JRE的区别、转义字符和注释、变量和运算符、进制转换、程序控制结构等内容。详细讲解了算术运算、逻辑运算、位运算、分支控制结构如if-else、for、while、do..while循环,以及break和continue的用法,适合初学者巩固Java基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

第一章

第二章

java语言特点

JDK和JRE

转义字符:

注释:

相对路径和绝对路径

常用dos命令

第三章

变量三要素:

加号+的使用:

Java API

 基本数据类型转换

强制类型转换

String和基本数据类型转换

第四章

运算符介绍

算术运算符

关系运算符

逻辑运算符

练习题:

赋值运算符

三元运算符

运算符优先级

标识符

命名规则

关键字

键盘输入语句

进制

进制转换

一、其他进制转换为十进制

二、十进制转换为其他进制

三、除十进制外的转换

原码、反码、补码(重点、难点)

位运算符详解

第五章程序控制结构

顺序控制

分支控制 if-else

1) 单分支 if

2) 双分支 if-else

3) 多分支 if-else if -....-else

嵌套分支

 switch 分支结构

语法

流程图

for循环

基本语法

流程图

使用细节

while 循环控制

基本语法

 流程图

 do..while 循环控制

多重循环(重点、难点)

break语句

流程图

Continue

基本语法

流程图

练习题

第一题

第四题

第六题:每五个一行

第七题

第八题

第九题



内容汇总

第一章

java就业环境和应用领域的介绍

第二章

1995年发布第一个java版本

java语言特点

(1)面向对象的

(2)健壮的

(3)跨平台性(依靠java虚拟机JVM实现)

(4)解释型语言

JDK和JRE

JDK=JRE + java开发工具(javadoc,javac等)

JRE= JVM+java的核心类库

转义字符:

\t制表位 ;

\n换行 ;

\r回车

\\表示 \;

\"表示"

\'表示'

注释:

1) 单行注释 //

2) 多行注释 /* */

3) 文档注释 /** */

实际运用:

/**

* @author 韩顺平

* @version 1.0

*/

相对路径和绝对路径

相对路径:从当前目录开始定位形成的一个路径

绝对路径:从根目录(C盘或者D盘)开始定位形成的一个路径

常用dos命令

dir:查看当前目录是有什么内容

切换盘符 D:

切换路径:cd

清屏:cls

退出:exit

第三章

变量三要素:

变量名、值、数据类型

加号+的使用:

1)左右两边都是数值型时做加法运算 2)有一方是字符串时做拼接运算

数据类型(重点!)

浮点数=符号位+指数位+尾数位

小数2.73/8.1在计算机中并不是相等的,其输出的是近似于2.7的一个小数

Java API

Java提供的基本编程接口

 基本数据类型转换

 (byte、short)和char之间不会相互自动转换

   byte,short,char 他们三者可以计算,在计算时首先转换为 int 类型 

byte b2 = 1;

byte b3 = 2;

那么b2+b3也就自动转换为了int型数据

强制类型转换

用()即可,如int i = (int)1.9;

如变量是公式则用小括号 int i = (int)(1.9*4+3.2)

String和基本数据类型转换

1)Stiring转基本类型: +""即可,int n1 = 5; String s1 = n1 + "";

2)基本类型转换到String:调用parseXX方法

String s1 = "123";

int num1 = Interger.parseInt(s1);

float num2 = Float.parseFloat(s1);

boolean b = Boolean.parseBoolean("true");

字符串转成字符:取出字符串的第一个字符

​​​​System.out.println(s1.charAt(0));//外国人从0开始数数,得到s1的第一个字符1"

第四章

运算符介绍

1) 算术运算符

2) 赋值运算符

3) 关系运算符 [比较运算符]

4) 逻辑运算符

5) 位运算符 [需要二进制基础]

6) 三元运算符

算术运算符

正号、负号、加、减、乘、除、取模(余)、自增、自减、字符串相加(拼接)

除法/:整数之间做除法时只保留整数部分舍弃小数部分

在 % 的本质 看一个公式!!!! a % b = a - a / b * b

自增:++

两种情况

1)先取值再运算 a = 2 ; b = a++;则 a = 3 ; b = 2;

2)先运算再取值 a = 2 ; b = ++a;则 a = 3 ; b = 3;

自减:同理自增

1)先取值再运算 a = 2 ; b = a--;则 a = 1 ; b = 2;

2)先运算再取值 a = 2 ; b = --a;则 a = 1 ; b = 1;

关系运算符

 关系运算符的结果都是 boolean 型,true或者false

逻辑运算符

1) 短路与 && , 短路或 ||,取反 !

短路与&&:有F则F;若左边有F则不再判断右边

短路或||:有T则T;若左边有T则不再判断右边

取反:若a为true,结果是false

2) 逻辑与 &,逻辑或 |,^ 逻辑异或

逻辑与&:有F则F;若左边有F则继续判断右边

逻辑或||:有T则T;若左边有T则继续判断右边

异或^:两者不同时为true;两者同为true或者false时,结果是false

练习题:

public class Review{
	public static void main(String[] args){
		boolean x = true;
		boolean y = false;
		short z = 46;
		if((z++ == 46)&&(y = true));
		z++;
		if((x = false)||(++z == 49));
		z++;
		System.out.println("z=" + z);
		
		
	}
}

运行分析如下图

此题目的两个陷阱:赋值语句 y = true 和 x = false;

y = true;将true赋值给y,此条件为true

x = false;将false赋值给x,此条件为false

赋值运算符

基本赋值运算符 =

复合赋值运算符 += ,-= ,*= , /= ,%= 等 

a += b; 即 a = a + b; 

a -= b; 即 a = a - b; 

注意事项:

复合赋值运算符会进行类型转换

byte b = 3; b += 2; // b+2是int型;自动转换 b = (byte)(b + 2);

b++; // b = (byte)(b+1);同上

三元运算符

基本语法 条件表达式 ? 表达式 1:表达式 2;

口诀: [一灯大师:一真大师]

条件表达式为true,则运算后的结果是表达式 1;

反之则为表达式2

细节:表达式 1 和表达式 2 要为可以赋给接收变量的类型(或可以自动转换或强制转换)

public class TernaryOperatorDetail{
	public static void main(String[] args){
		//编写一个main方法
		//表达式 1 和表达式 2 要为可以赋给接收变量的类型(或可以自动转换或强制转换)
		int a = 10;
		int b = 99;
		//result为int型变量,3.1和4.2为double型变量,从double转换到int可能会有损失
		//int result = a > b ? 3.1:4.2;
		int result = a > b ? (int)3.1 : (int)4.2;//强制类型转换
		double result1 = a > b ? 3.1 : 4.2;//前后都是double型变量
		System.out.println("result=" + result);
		System.out.println("result1=" + result1);
		//三元运算符可以转成 if--else 语句

		if(a > b){
			System.out.println("result1=" + 3.1);
		}else{
			System.out.println("result1=" + 4.2);
		}
	}

}

运算符优先级

只有单目运算符和赋值运算符是从右到左的,单目运算符是指只有一个操作数(++a;a++)

使用多了就熟悉了

标识符

命名规则

(必须遵守)特别重要

                ①由26个英文字母大小写,0到9,_或$组成

               ②不能用数字开头,如 int 5n 就是错的

                ③不可以直接使用关键字和保留字,但是可以包含关键字和保留字(如class public goto)//goto是保留字,即现在不用但是将来可能会用到

                ④java中严格区分大小写,长度不受限制,abc和Abc aBc abC是不同的变量 

                ⑤标识符中不能包含空格,比如 int a b = 90,这种写法是错误的
规范

包名:全都是小写字母,用.来间隔

类名和接口名:多个单词组成时,第一个字母大写,eg:TernaryOperator;大驼峰

变量名:多个单词组成时,第一个单词的第一个字母小写,后面的单词的第一个字母大写eg:totalNum;stuName;小驼峰

常量名:所有字母都要大写,单词之间用_连接(与包名对照)eg:XXX_YYY_ZZZ

关键字

被java赋予了特殊含义,用作专门用途的字符串

所有字母都是小写

关键字不能作为标识符

键盘输入语句

import java.util.Scanner;//表示把java.util下的Scanner类导入到此文件

Scanner myScanner = new Scanner(System.in)创建一个Scanner对象

不同数据类型接收输入时使用的方法不同

int型 int age = myScanner.nextInt();

double型  double salary= myScanner.nextDouble();

   char型  char gender = myScanner.next().charAt(0);

      String型 String name = myScanner.next();

进制

基本功,整数的四种表达形式

二进制:只有两个数字0、1 ,满 2 进 1,以 0b 或 0B 开头,如:0B01010

十进制:0-9 ,满 10 进 1。

八进制:0-7 ,满 8 进 1, 以数字 0 开头表示。

十六进制:0-9 及 A(10)-F(15),满 16 进 1,以 0x 或0X为开头,A-F不区分大小写

进制转换

一、其他进制转换为十进制

1)二转十


从最低位(右边)开始,将每个位上的数提出来乘以2的(位数-1)次方

eg: 0b1101011=1*2^0+1*2^1+0*2^2+1*2^3+0*2^4+1*2^5+1*2^6

                        =1+2+0+8+0+32+64

                        =107

2)八转十


从最低位(右边)开始,将每个位上的数提出来乘以8的(位数-1)次方

eg:04723=3*8^0+2*8^1+7*8^2+4*8^3

                =3+16+448+2048

                =2515

3)十六转十

从最低位(右边)开始,将每个位上的数提出来乘以16的(位数-1)次方

eg:0XB63=3*16^0+6*16^1+11*16^2

                =3+96+2816

                =2915

二、十进制转换为其他进制

1)十转二

规则:将该数不断除以 2,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的二进制。

    eg:123转换成二进制,结果为0B0111 1011

  2)十转到八

规则:将该数不断除以 8,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的八进制。

           eg :131转成八进制,结果为0203

3)十转到十六

规则:将该数不断除以 16,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的十六进制。

 案例:请将 237 转成十六进制,结果为0xED

三、二、八、十六之间的转换

1)二转到八

  从低位(右边)开始,将二进制数每三位一组(不足的补零),从左往右依次写上421,然后计算,eg 0B0010 1111转成八进制为057

 

2)二转到十六

 将十六进制数每 1 位,转成对应的 4 位的一个二进制数即可。8421法则

eg:ob0010 1111换成十六进制为0X2F;

 3)八转到二

    421倒转计算,eg:0237

    2=4*0+2*1*1*0,转成二进制就是010

    3=4*0+2*1*1*1,转成二进制就是011

     7=4*1+2*1*1*1,转成二进制就是111

      转成二进制就是0B1001 1111

   4)十六转二

         8421倒转计算,eg: 0x23B

         2=8*0+4*0+2*1+1*0(0010)

         3=8*0+4*0+2*1+1*1(0011)

          B(11)=8*1+4*0+2*1+1*1(1011)

          结果是0B0010 0011 1011

         计算机内部处理的信息都是采用的二进制

原码、反码、补码(重点、难点)

八个重要知识点

1.二进制的最高位(最左边)是符号位,0表示正数,1表示负数

2.正数的原码、反码、补码都是一样的(三码合一)

3.负数的反码=符号位不变,其他的取原码的反值(反码转原码同理)

4.负数的补码=它的反码+1;反码=补码-1;

5.0的反码补码都是0

6.java没有无符号数,换言之,java中的数都是有符号的

7.在计算机运算的时候,是以补码的方式来运算的

8.当我们看运算结果的时候,要看它的原码

位运算符详解

java中有7个位运算符(&、|、^、~、>>、<<和 >>> )

按位与 & :两位全为1,结果为1,否则为0(把逻辑运算符中的true和false替换成1和0

按位或  | :两个有一个为1,结果为1,否则为0

按位异或 ^   两个数相同(同为0或者同为1)结果为0,两个数不同(一个为1,一个为0)结果为1,与逻辑异或大同小异

按位取反  ~    :0变1,1变0 

算术右移>>:①正数时:1>>3,计算公式1\2^3,②负数时:-1>>3,求出-1的补码,向右移三位,空缺用1补齐,再求出此结果的原码

算术左移<<:①正数时:1>>3,计算公式1*2^3,②负数时:-1>>3,求出-1的补码,向左移三位,空缺用0补齐,再求出此结果的原码

无符号右移 >>>:右移的空缺全部用0补全,不用符号位补     正数运算同算术右移,负数运算空缺是用0补全,就是最终结果,不用再推算反码和原码     

未解决的问题 -1 >>>2

解决办法:反码右移后直接输出结果,不用推算反码和原码

第五章程序控制结构

1) 顺序控制 2) 分支控制 3) 循环控制

顺序控制

按照代码顺序执行,中间没有任何判断和跳转

分支控制 if-else

分为三种

1) 单分支 if

流程图

2) 双分支 if-else

 流程图

3) 多分支 if-else if -....-else

基本语法

多分支的流程图(重要!) 

 当所有条件表达式都不成立的时候,执行else的代码块,只有1个入口

赋值语句:

public class If04{
	//编写一个main方法
	public static void main(String[] args){
		boolean b = true;
		if(b = false){//赋值语句,b被重新赋值为false,
			System.out.println("a");
		}else if(b){// b为false,不执行此代码块
			System.out.println("b");
		}else if(!b){//b为false,取反为true,打印c
			System.out.println("c");
		}else{
			System.out.println("d");
		}
		
	}
}

关系判断语句

public class If04{
	//编写一个main方法
	public static void main(String[] args){
		boolean b = true;
		if(b == false){//判断语句,b!=false,不执行此代码块
			System.out.println("a");
		}else if(b){// b为true,执行此代码块
			System.out.println("b");
		}else if(!b){//
			System.out.println("c");
		}else{
			System.out.println("d");
		}
		
	}
}

嵌套分支

在一个分支结构中又完整的嵌套了另一个完整的分支结构,最多不超过三层

语法

 switch 分支结构

在java中只要是一个表达式就会有一个值返回

语法

 说明:将表达式的值一次与常量1、2、3等匹配,匹配成功就执行语句块,break退出这个swtich语句,如果所有的都没有匹配成功则执行default语句

流程图

说明:1)在java中只要有返回值,就是一个表达式2)表达式的返回值必须是char,byte,short,int,string,enum(枚举) 3)case后面接的必须是常量

for循环

基本语法

流程图

使用细节

1) 循环条件是返回一个布尔值的表达式

2) for(;循环判断条件;) 中的初始化和变量迭代可以写到其它地方,但是两边的分号不能省略。

3) 循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代 语句,中间用逗号隔开  eg: for(int i = arr.length - 1, j = 0; i >= 0; i--, j++);

while 循环控制

基本语法

 流程图

 do..while 循环控制

流程图

 do..while 循环是先执行,再判断, 因此它至少执行一次

例子:还钱(难点)

多重循环(重点、难点)

将一个循环放在另一个循环体内,就形成了嵌套循环。

设外层循环次数为 m 次,内层为 n 次,则内层循环体实际上需要执行 m*n 次。

break语句

生成随机数的接口:

Matn.random();//生成0.0到1.0之间的double型数据

Matn.random()*100;//生成0.0到100.0之间的double型数据

(int)(Matn.random()*100);//生成0到99之间的整数

(int)(Matn.random()*100)+1;//生成1到100之间的整数

结束或者提前结束循环

流程图

细节:break可以通过标签指定结束哪一层的语句块,语法:break lable1;
        for(int i = 1; i <= 100; i++),i只在这个for循环里有用,当跳出这个for循环后就输出i就会报错

判断字符串相等的语法 :"丁真".equals(name)

break第二道练习题注意点:先在循环开始前定义好变量name和passWord

Continue

continue 语句用于结束本次循环,继续执行下一次循环。

continue 语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环

基本语法

流程图

练习题

第一题

while(1 == 1)当循环条件为true时,进入无限循环,ctrl+c停止无限循环

第四题

水仙花数

一个五位数a

万位数为 a/10000;

千位数为a/1000%10;

百位数为a/100%10;

十位数为a/10%10;

个位数为 a%10;


四位数b

千位数为/1000;

百位数为b/100%10;

十位数为b/10%10;

个位数为 b%10;

三位数c

百位数为c/100;

十位数为b/10%10;

个位数为 b%10;

第六题:每五个一行

我写的代码

public class HomeWork06{
	public static void main(String[] args){
		int count = 0;
		for(int i = 1; i <= 100; i++){
			if(i % 5 != 0){
				count++;
				System.out.print(i + "\t");
				
			}
            if(count % 5 == 0){
					System.out.print("\n");
				}
			
		}
	}

}

输出效果

 多一行空行的原因:

n = 24时 count = 20,执行第一,二个if,打印 24 并打印一个换行符。 n = 25时,第一个if不执行,此时count 还是25,执行第二个if,再次打印一个换行符。

解决办法:把第二个if嵌套在第一个if里

public class HomeWork06{
	public static void main(String[] args){
		int count = 0;
		for(int i = 1; i <= 100; i++){
			if(i % 5 != 0){
				count++;
				System.out.print(i + "\t");
				if(count % 5 == 0){
					System.out.print("\n");
				}
			}
			
		}
	}

}

n = 25时,外层if不执行,就不会出现上述情况

第七题

打印a-z和A-Z

char型变量可以直接运算,'b'='a'+1;'c'='a'+2;.....'z'='a'+25;同理大写

tips:1)int c1 = ; int c2 = 'a'

第八题

求1-1/2+1/3-1/4+...+1/99-1/100的和

初始代码

public class HomeWork08{
	public static void main(String[] args){
		//求1-1/2+1/3-1/4+...+1/99-1/100的和
		//分两种情况,当i为奇数是1/i,当i为偶数时,-1/i
		double sum = 0;
		for(double i = 1; i <= 100; i++){
			if(i % 2 != 0){
				sum += 1/i;
			}else if(i % 2 == 0){
				sum -= 1/i;
			}
		}
		
        System.out.print(sum);	

		
	}

}

运算结果为1.0

原因:sum += 1/i;1和都是int型数据,1/i的结果为0,赋值给double型数据sum,就是0.0

改正:1)sum += 1.0/i;  1.0为double型,1.0/i的结果也是double型

        2)double i = 1;同上,1/i也变成了double型

第九题

求1+(1+2)+(1+2+3)+...+(1+2+..+100)的和

使用双重循环

public class HomeWork09{
	public static void main(String[] args){
		//求1+(1+2)+(1+2+3)+...+(1+2+..+100)的和
		//使用双重循环,类似于九九乘法表
		//外循环:
		int sum = 0;
		for(int i = 1; i <= 100; i++){
			for(int j = 1; j <= i; j++){
				sum = sum + j;
			}
		}

		System.out.print("sum=" + sum);				
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值