java开发必备基础

2022-10-11 12:18:32

Java总复习

java知识总复习

第一章:java概述:

1:Java的历史:

Java诞生于SUN(Stanford University Network),09年SUN被Oracle(甲骨文)收购。

1996年Java之父是詹姆斯.高斯林(James Gosling)发布了第一个版本JDK1.0,java诞生!

2:Java语言的特点:

特点一: 面向对象的:基本的概念是:类与对象。

三个特性:继承,封装,多态。

特点二:健壮性:java吸收了C/C++语言的优点(代码少,运行速度快,功能强大),去掉了影响程序健壮性的部分比如,指针,内存的申请和手动的释放,提供了一个相对的内存管理机制(虚拟机的自动内存管理机制)。

特点三:跨品台性:用为有了Java虚拟机的存在,Java的语言可以在任意得平台运行!

3:Java开发环境的搭建:

1): 概念:JDK,JRE,JVM

jdk:java的工具包。

jre:java的运行环境。

jvm:java的虚拟机。

2):各个概念之间的关系:

JDK = JRE+开发工具组成。

JRE = JVM+核心的类库组成。

3):java环境的搭建:

安装JDK,将jdk的开发工具配置到电脑的开发环境path中,配置在path是因为为了使用jdk中的javac.exe工具。

4:java的第一个程序:

classHelloWorld{publicstaticvoidmain(String[] args){System.out.print("Hello Java!");}}
1):java的开发步骤:一共就3步骤那个的:

第一步:编写源代码的文件,要求必须是 .java的文件。

第二步:把源文件编译为字节码的文件.class,因为虚拟机只认识字节码,使用编译工具就是javac.exe工具。

第三步运行:使用的工具是 java.exe。

2):java程序的结构:
{
   			 	方法{
      			  语句;}}
3):java的入口方法:
publicstaticvoidmain(String[] args){}
4):java的注释:

单行注释:// 。 多行注释:// 文档注释/*/

5:java编程是的注意事项:

1):字符编码问题

当cmd命令行窗口的字符编码与.java源文件的字符编码不一致,如何解决?

解决方案一:

在Notepad++等编辑器中,修改源文件的字符编码。

解决方案二:

在使用javac命令式,可以指定源文件的字符编码。

javac -encoding utf-8 Review01.java。

2):大小写问题

(1)源文件名:

不区分大小写,我们建议大家还是区分。

(2)字节码文件名与类名 区分大小写。

(3)代码中 区分大小写。

3):源文件名与类名一致问题?
(1)源文件名是否必须与类名一致?public呢?

如果这个类不是public,那么源文件名可以和类名不一致。

如果这个类是public,那么要求源文件名必须与类名一致。

我们建议大家,不管是否是public,都与源文件名保持一致,而且一个源文件尽量只写一个类,目的是为了好维护。

(2)一个源文件中是否可以有多个类?public呢?

一个源文件中可以有多个类,编译后会生成多个.class字节码文件。

但是一个源文件只能有一个public的类。

(3)main必须在public的类中吗? =====>不是。

第二章:java的语法基础:

1:标识符:

简单的说,凡是程序员自己命名的部分都可以称之为程序的标识符,即给类,方法,变量,包命名的字符序列都可以称之为标识符。

1):标识符的命名规则

(1)Java的标识符只能使用26个英文字母大小写,0-9的数字,下划线_,美元符号$

(2)不能使用Java的关键字(包含保留字)和特殊值

(3)数字不能开头

(4)不能包含空格

(5)严格区分大小写

2):标识符的命名规范

(1)见名知意

(2)类名、接口名等:每个单词的首字母都大写,形式:XxxYyyZzz,

例如:HelloWorld,String,System等

(3)变量、方法名等:从第二个单词开始首字母大写,其余字母小写,形式:xxxYyyZzz,

例如:age,name,bookName,main

(4)包名等:每一个单词都小写,单词之间使用点.分割,形式:xxx.yyy.zzz,

例如:java.lang

(5)常量名等:每一个单词都大写,单词之间使用下划线_分割,形式:XXX_YYY_ZZZ,

例如:MAX_VALUE,PI

2:变量:

1):变量的概念:

用来存储数据,代表内存的一块存储区域,变量中的值是可以改变的。

2):变量的三要素:

(1)数据类型

(2)变量名

(3)值

3):变量使用应该注意的事项:

(1)先声明,后使用。

(2)使用之前必须初始化。

(3)注意变量的作用域,在同一个作用域不能出现两个相同 的变量名称。

4):变量的声明赋值和使用方式:

(1):变量的声明的语法规则:

数据类型  变量名;
例如:int age;String name;double weight;char gender;boolean isMarry;

(2):变量的赋值的语法格式

变量名=;
例如:
age=18;
name="柴林燕";//字符串的值必须用""
weight=44.4;
gender='女';//单字符的值必须使用''
isMarry=true;

(3):变量的使用的语法格式:

通过变量名直接引用

例如:(1)输出变量的值System.out.print(name);System.out.print("姓名:"+ name);//""中的内容会原样显示System.out.print("name = "+ name);(2)计算
age= age+1;

3:数据类型:

1):基础数据类型的分类:

1、整型系列

(1)byte:字节类型:占内存:1个字节。

(2)short:短整型类型:占内存:2个字节。

(3)int:整型:占内存:4个字节。

(4)long:整型:占内存:8个字节。

2、浮点型系列(小数)

(1)float:单精度浮点型:占内存:4个字节

(2)double:双精度浮点型:占内存:8个字节

3、单字符类型

(1)char:字符类型占内存:2个字节

注意:字符的三种表现方式:普通的一个字符 :‘A’。转译字符:\n。十六进制字符:\u5c1a。

4、布尔类型:boolean:只能存储true或false

2):进制:

1、进制的分类:

(1)十进制

数字组成:0-9:进位规则:逢十进一

(2)二进制

数字组成:0-1进位规则:逢二进一

(3)八进制

数字组成:0-7:进位规则:逢八进一

(4)十六进制

数字组成:0-9,af(或AF):进位规则:逢十六进一

3):基本数据类型的装换:

(1):自动类型转化:

把存储小范围的值,赋值给大范围值的时候。

byte->short->int->long->float->double

int i='A';//char自动升级为intdouble d=10;//int自动升级为double

当存储范围小的数据类型与存储范围大的数据类型一起混合运算时,会按照其中最大的类型运算。

int i=1;byte b=1;double d=1.0;double sum= i+ b+ d;//混合运算,升级为double

当byte,short,char数据类型进行算术运算时,按照int类型处理。boolean类型不参与计算。

byte b1=1;byte b2=2;byte b3=(byte)(b1+ b2);//b1 + b2自动升级为intchar c1='0';char c2='A';System.out.println(c1+ c2);//113

(2):强制类型装换:

当把存储范围大的值(常量值、变量的值、表达式计算的结果值)赋值给了存储范围小的变量时,需要强制类型转换。这样转化有风险,可能会损失精度或溢出。

double->float->long->int->short->byte

double d=1.2;int num=(int)d;//损失精度int i=200;byte b=(byte)i;//溢出

当某个值想要提升数据类型时,也可以使用强制类型转换,这个情况的强制类型转换是没有风险的。boolean类型不参与。

int i=1;int j=2;double shang=(double)i/j;
3):特殊数据类型的转换

(1): 任意数据类型的数据与String类型进行“+”运算时,结果一定是String类型。

System.out.println(""+1+2);//12

(2)但是String类型不能通过强制类型()转换,转为其他的类型

String str="123";int num=(int)str;//错误的
4):引用数据类型

String、数组,类,接口

4:运算符:

1):Java基本数据类型的运算符:

(1)算术运算符

(2)赋值运算符

(3)比较运算符

(4)逻辑运算符

(5)条件运算符

(6)位运算符(难)

2):按照操作数个数的分类:

(1)一元运算符:操作数只有一个

例如:正号(+),负号(-),自增(++),自减(–),逻辑非(!),按位取反(~)。

(2)二元运算符:操作数有两个

例如:加(+),减(-),乘(),除(/),模(%) 大于(>),小于(<),大于等于(>=),小于等于(<=),等于(==),不等于(!=),赋值(=,+=,-=,=,/=,%=,>>=,<<=。。。),逻辑与(&),逻辑或(|),逻辑异或(),短路与(&&),短路或(||),左移(<<),右移(>>),无符号右移(>>>),按位与(&),按位或(|),按位异或(

(3)三元运算符:操作数三个

例如: ? :

3):算术运算符

加法:+

减法:-

乘法:*

除法:/

注意:整数与整数相除,只保留整数部分

取模:% 取余

注意:取模结果的正负号只看被模数

正号:+

负号:-

自增:++

自减:–

原则:自增与自减
++/–在前的,就先自增/自减,后取值
++/–在后的,就先取值,后自增/自减
整个表达式的扫描,是从左往右扫描,如果后面的先计算的,那么前面的就暂时先放到“操作数栈”中
int i=1;
i++;//i=2int j=1;++j;//j=2int a=1;int b= a++;//(1)先取a的值“1”放操作数栈(2)a再自增,a=2(3)再把操作数栈中的"1"赋值给b,b=1int m=1;int n=++m;//(1)m先自增,m=2(2)再取m的值“2”放操作数栈(3)再把操作数栈中的"2"赋值给n,n=2int i=1;int j= i+++++i* i++;/*
从左往右加载
(1)先算i++
①取i的值“1”放操作数栈
②i再自增 i=2
(2)再算++i
①i先自增 i=3
②再取i的值“3”放操作数栈
(3)再算i++
①取i的值“3”放操作数栈
②i再自增 i=4
(4)先算乘法
用操作数栈中3 * 3 = 9,并把9压会操作数栈
(5)再算求和
用操作数栈中的 1 + 9 = 10
(6)最后算赋值
j = 10
*/
4):赋值运算符
			基本赋值运算符:=。扩展赋值运算符:+=,-=,*=,/=,%=。
注意:所有的赋值运算符的=左边一定是一个变量。
   扩展赋值运算符=右边的计算结果的类型如果比左边的大的话会强制类型转换,所以结果可能有风险。
   扩展赋值运算符的计算:(1)赋值最后算(2)加载数据的顺序是把左边的变量的值先加载,再去与右边的表达式进行计算
int i=1;int j=5;
j*= i+++ j++;//j = j *(i++ + j++);/*
(1)先加载j的值“5”
(2)在计算i++
①先加载i的值“1”
②再i自增,i=2
(3)再计算j++
①先加载j的值"5"
②再j自增,j=6
(4)算  加法
i + 5 = 6
(5)算乘法
5 * 6 = 30
(6)赋值
j = 30
*/
5):比较运算符

大于:>小于:<大于等于:>=小于等于:<=等于:== 注意区分赋值运算符的=,不等于:!=

注意:比较表达式的运算结果一定只有true/false
比较表达式可以作为(1)条件(2)逻辑运算符的操作数
6):逻辑运算符

逻辑与:&
运算规则:只有左右两边都为true,结果才为true。
例如:true & true 结果为true
false & true 结果为false
true & false 结果为false
false & false 结果为false
逻辑或:|
运算规则:只要左右两边有一个为true,结果就为true。
例如:true | true 结果为true
false | true 结果为true
true | false 结果为true
false | false 结果为false
逻辑异或:^
运算规则:只有左右两边不同,结果才为true。
例如:true ^ true 结果为false
alse ^ true 结果为true
true ^ false 结果为true
false ^ false 结果为false

逻辑非:!
运算规则:布尔值取反
例如:!true 为false
!false 为true

短路与:&&
运算规则:只有左右两边都为true,结果才为true。
例如:true & true 结果为true
true & false 结果为false
false & ? 结果就为false
它和逻辑与不同的是当&&左边为false时,右边就不看了。

短路或:||
运算规则:只要左右两边有一个为true,结果就为true。
例如:true | ? 结果为treu
false | true 结果为true
false | false 结果为false
它和逻辑或不同的是当||左边为true时,右边就不看了

开发中一般用短路与和短路或比较多
&&当左边为false,右边不计算
&不管左边是true还是false,右边都要计算
7):条件运算符

条件表达式 ? 结果表达式1 : 结果表达式2

运算规则:

整个表达式的结果:当条件表达式为true时,就取结果表达式1的值,否则就取结果表达式2的值

1boolean类型boolean marry=true;System.out.println(marry?"已婚":"未婚");2)求最值int i=3;int j=5;int max= i>=j? i: j;//当i>=j时,max就赋值为i的值,否则就赋值为j的值
8):位运算符

左移:<<

运算规则:左移几位就相当于乘以2的几次方

右移:>>

运算规则:右移几位就相当于除以2的几次方

无符号右移:>>>

运算规则:往右移动后,左边空出来的位直接补0,不看符号位

按位与:&

运算规则:

1 & 1 结果为1

1 & 0 结果为0

0 & 1 结果为0

0 & 0 结果为0

按位或:|

运算规则:

1 | 1 结果为1

1 | 0 结果为1

0 | 1 结果为1

0 & 0 结果为0

按位异或:^

运算规则:

1 ^ 1 结果为0

1 ^ 0 结果为1

0 ^ 1 结果为1

0 ^ 0 结果为0

按位取反:~

运算规则:~0就是1

~1就是0

如何区分&,|,^是逻辑运算符还是位运算符?

如果操作数是boolean类型,就是逻辑运算符,如果操作数是整数,那么就位运算符。
9):运算符操作数类型说明

1、算术运算符

数字和单个字符可以使用算术运算符。

其中+,当用于字符串时,表示拼接。

2、赋值运算符

右边的常量值、表达式的值、变量的值的类型必须与左边的变量一致或兼容(可以实现自动类型转换)或使用强制类型转换可以成功。

3、比较运算符

其他的比较运算符都是只能用于8种基本数据类型。

其中的==和!=可以用于引用数据类型的比较,用于比较对象的地址

int i=10;int j=10;System.out.println(i==j);//truechar c1='帅';char c2='帅';System.out.println(c1== c2);//true

4、逻辑运算符

逻辑运算符的操作数必须是boolean值

5、条件运算符

?前面必须是条件,必须是boolean值

结果表达式1和结果表达式2要保持类型一致或兼容

6、位运算符

一般用于整数系列

以上运算符都是针对基本数据类型设计的。
能够用于引用数据类型只有基本的赋值运算符=,和比较运算符中的==和!=。其他运算符都不能用于引用数据类型。
其中字符串类型还有一个+,表示拼接。

第三章:流程控制语句结构

流程控制语句结构分为:

1、顺序结构:从上到下依次执行

2、分支结构:多个分支选择其中一个分支执行

3、循环结构:重复执行某些代码

1:顺序结构:

1):输出语句:从上到下顺序执行
#输出常量System.out.print(1);System.out.print('尚');System.out.print(44.4);System.out.print(true);System.out.print("尚硅谷");

#输出变量int a=1;char c='尚';double d=44.4;boolean b=true;String school="尚硅谷";System.out.print(a);System.out.print(c);System.out.print(d);System.out.print(b);System.out.print(school);

#输出拼接结果System.out.print("a = "+ a);System.out.print("c = "+ c);System.out.print("d = "+ d);System.out.print("b = "+ b);System.out.print("school = "+ school);
2):输入语句:键盘输入代码的三个步骤

1、准备Scanner类型的变量

2、提示输入xx

3、接收输入内容

//1、准备Scanner类型的变量java.util.Scanner input=newjava.util.Scanner(System.in);//System.in默认代表键盘输入//2、提示输入xxSystem.out.print("请输入一个整数:");//3、接收输入内容int num= input.nextInt();//列出各种数据类型的输入int num= input.nextInt();long bigNum= input.nextLong();double d= input.nextDouble();boolean b= input.nextBoolean();String s= input.next();char c= input.next().charAt(0);//先按照字符串接收,然后再取字符串的第一个字符(下标为0)

2: 分支结构:

分支结构:根据条件选择性的执行某些代码

1):条件判断:

(1):单分支结构

if(条件表达式){
    当条件表达式成立(true)时需要执行的语句块;
}

注意:
(1)if(条件表达式)中的条件表达式的结果必须是boolean类型

(2)当{}中的语句只有一个语句(简单的语句,也可以是一个复合语句)时,可以省略{},但是我们不建议省略
//省略{}的情况if(score<0|| score>100)System.out.println("输入有误!");//简单的语句else//复合语句if(score==100){System.out.println("满分");}elseif(score>=80){System.out.println("优秀");}elseif(score>=60){System.out.println("及格");}else{System.out.println("不及格");}int year=2019;int days=28;if(year%4==0&& year%100!=0|| year%400==0){
    days=29;}

(2):双分支结构

语法规则:

if(条件表达式){
    当条件表达式成立(true)时需要执行的语句块1;
}else{
    当条件表达式不成立(false)时需要执行的语句块2;
}

执行过程:
 当条件表达式成立(true)时执行语句块1,否则执行语句块2
注意:
(1)if(条件表达式)中的条件表达式的结果必须是boolean类型
(2)当{}中的语句只有一个语句(简单的语句,也可以是一个复合语句)时,可以省略{},但是我们不建议
int num=10;if(num%2==0){System.out.println(num+"是偶数")}else{System.out.println(num+"是奇数")}

(3):多分支结构

语法规则:

if(条件表达式1){
    当条件表达式1成立的时候,执行的语句块1;
}else if(条件表达式2){
    当条件表达式1不成立,
      条件表达式2成立的时候,执行的语句块2;
}else if(条件表达式3){
    当条件表达式1不成立,
       条件表达式2也不成立,
      条件表达式3成立的时候,执行的语句块3;
}
。。。
【else{
	当以上所有的条件表达式都不成立,需要执行的语句块n+1;
}】

执行过程:
(1)多个条件顺序往下判断,如果上面有一个条件成立了,下面的条件就不看了
(2)多个分支也只会执行其中的一个
注意:

(1)每一个条件表达式都必须是boolean值
(2)当{}中只有一个语句时,也可以省略{},但不建议省略
(3)当多个条件是“互斥”关系(没有重叠部分),顺序可以随意;
当多个条件是“包含”关系(有重叠部分),顺序不能随意,小的在上,大的在下面
int score=78;if(score==100){System.out.println("满分");}elseif(score>=80){System.out.println("优秀");}elseif(score>=60){System.out.println("及格");}else{System.out.println("不及格");}
2):选择结构:

语法格式:

switch(表达式){
    case 常量值1:
        语句块1;
        【break;】
    case 常量值2:
        语句块2;
        【break;】   
    。。。
   【default:
        语句块n+1;
        【break;】
     】
}
执行过程:
(1)入口
①当switch(表达式)的值与case后面的某个常量值匹配,就从这个case进入;
②当switch(表达式)的值与case后面的所有常量值都不匹配,寻找default分支进入;
(2)一旦从“入口”进入switch,就会顺序往下执行,直到遇到“出口”
(3)出口
①自然出口:遇到了switch的结束}
②中断出口:遇到了break等

注意:
(1)switch(表达式)的值的类型,只能是:4种基本数据类型(byte,short,int,char),两种引用数据类型(枚举、String)
(2)case后面必须是常量值,而且不能重复
int month=4;switch(month){case3:case4:case5:System.out.println("春季");break;case6:case7:case8:System.out.println("夏季");break;case9:case10:case11:System.out.println("秋季");break;case12:case1:case2:System.out.println("冬季");break;default:System.out.println("输入有误!");}

3:循环结构:

循环结构,“重复”执行某些代码。

循环结构的分类:

1、for循环 。2、while循环。3、do…while循环

1): for循环

语法格式

for(;;){
    循环体语句块;
    if(条件表达式){
    	break;
    }
}
for(初始化表达式; 循环条件; 迭代表达式){
    循环体语句块;(需要重复执行的代码)
}


执行过程:
(1)初始化表达式;
(2)判断循环条件;
(3)如果循环条件成立,先执行循环体语句块;然后执行迭代表达式,再回到(2)…
(4)如果循环条件不成立,会结束for;

 或者在当前循环中遇到break语句,也会结束当前for循环;

注意:
(1)for(;;)中的两个;是不能多也不能少
(2)循环条件必须是boolean类型
//遍历1-100之间的偶数for(int i=1; i<=100; i++){//每次循环的步幅是1if(i%2==0){System.out.println(i);}}//遍历1-100之间的偶数for(int i=2; i<=100; i+=2){//每次循环的步幅是2System.out.println(i);}
2): while循环

语法格式:

while(循环条件){
    循环体语句块;
}

经典的形式:
while(true){
	循环体语句块;
    if(条件表达式){
    	break;
    }
}
执行过程:
(1)先判断循环条件
(2)如果循环条件成立,就执行循环体语句块;然后回到(1)
(3)如果循环条件不成立,就结束while循环;
 如果在循环体语句块中,遇到break,也会结束while循环;

注意:
(1)while(循环条件)中循环条件必须是boolean类型
//遍历1-100之间的偶数int num=2;while(num<=100){System.out.println(num);
    num+=2;}
3):do…while循环

语法规则:

do{
    循环体语句块;
}while(循环条件);


执行过程:
(1)先执行一次循环体语句块;
(2)判断循环条件
(3)如果循环条件成立,再次执行循环体语句块;然后回到(2)…
(4)如果循环条件不成立,就结束do…while循环;

 如果在循环体语句块中,遇到break,也会结束do…while循环;

注意:
(1)while(循环条件)中循环条件必须是boolean类型
(2)do{}while();最后有一个分号
(3)do…while结构的循环体语句是至少会执行一次,这个和for和while是不一样的</
  • 作者:卞显路
  • 原文链接:https://blog.csdn.net/bxl1998720/article/details/120986059
    更新时间:2022-10-11 12:18:32