java基础笔记(一)

发布于:2023-01-25 ⋅ 阅读:(780) ⋅ 点赞:(0)

1.Java语言基础(一)

1.1 Java基础语法

1.1.1 Java语言的发展史

首先是在1995年Java语言被sun公司推出;在2004年推出5.0版本,这一次更新力度很大,使Java语言得到快速发展;2009年Oracle公司收购了Sun公司;2014年的Java8.0版本是目前公司用的最多的版本;目前JDK最新版本为18

1.1.2 JDK,JRE,JVM三者的联系

JDK:Java 开发工具,包括JRE以及一些开发工具(编译工具:Javac.exe;运行工具:Java.exe等)

JRE:Java运行时环境,其包含了JVM和一些核心类库

JVM:Java虚拟机,用来解析运行Java程序,它支持了java语言的跨平台原理。

1.1.3 DOS命令的介绍和使用

Win+r 输入 cmd进入DOS环境

切换盘符:盘符号:

进入一个目录: cd目录名

进入多层目录: cd目录名\目录名

回退到盘符:cd\

查看当前目录下所有的内容:dir

清屏:cls

退出:exit

输入命令的时候可以按Tab键自动补全;按上下箭头可以选择之前输入过的命令。

1.1.4 Path环境变量的配置

安装了JDK以后,如果不配置环境变量,我们就只能在JDK\bin目录下去使用Java.exe和Java.exe两个命令。配置环境变量之后,可以在任意路径下都能使用Javac.exe和Java.exe两个命令。

1.1.5 第一个代码HelloWorld案例

public class HelloWorld{

   public static void main(String[]args){

			System.out.println(“hello world!);

	}

}

其中要特别注意程序类名要和文件名严格一致。

1.1.6 NotePad++软件的安装和使用

与计算机自带的文本编辑器相比,在Notepad++软件中程序有具体行号

1.1.7 Java中的数据类型

Java是一种强类型语言,给每个数据都分配了数据类型,每种类型的数据对应的所占空间大小也不一样。

Java中的数据类型分为两种:基本数据类型(8种)和引用数据类型

基本数据类型(占用字节数):byte(1)、short(2)、char(2)、int(4)、long(8)、float(4)、double(8)、boolean(1);

Java中的基本数据类型中的整数类型(byte、short、char、int、long)默认为int类型,小数类型(float、double)默认为double类型,

引用数据类型:类、数组、接口等。

1.1.8 常量的使用

在Java程序运行过程中其值不会发生改变的量。

常量分为6种:整数常量、小数常量、字符常量、字符串常量、布尔常量、空常量(null)。

字符常量在中有且仅有一个字符;

空常量不可以直接输出。

1.1.9 变量的定义与使用

在Java程序运行过程中,在一定范围内,其值可以发生改变的量,我们称为变量。我们通常是用变量来保存一个数据。

定义格式:数据类型 变量名 = 值;

修改变量的值:变量名 = 值;

注意事项:不能重复定义名字;未赋值不能直接使用;使用long类型的数据的时候,建议在数值后面加上一个大(小)写的“L(l)”;在使用float类型的数据的时候,在数值后面加上一个大(小)写的“F(f)”。

1.1.10 Java中代码的书写规范

标识符:在Java语言中给变量、方法、类、包取名。
Java代码中标识符的书写规范:
标识符的组成:大小写字母、数字、美元符号、下划线

注意:命名是不能以数字开头、不能是关键字、严格区分大小写、可以是中文,但是不建议。

首先是给变量和方法取名:小驼峰命名法,如果名字只有一个英文单词,则全部小写,如果是两个或者多个单词组成,则第一个单词全部小写,后面单词首字母全部大写。例如:main、getMax、getSum等。

其次是给类取名:先说一下Java语言中的模块结构:Java工程—>Java模块—>Java包—>Java类。我们给类取名是依据大驼峰命名法,不管几个英文单词,其首字母全部大写。例如:Demo、HelloWorld等

给包取名:我们给Java包取名是:com.xxxx.xxxx;xxxx是自己取的名,全部小写。

1.1.11 数据类型之间的转换

byte<short、char<int<long<float<double

Java语言中的数据类型转换分为自动类型转换和强制类型转换,其中自动类型转换是把小的数据(数值)放到大的数据类型(变量)里去;强制类型转换是把大的数据(数值)强行放到小的数据类型(变量)里去。

例:强制类型转换 i=(int)13.14

1.1.12 Java中的各种运算符操作

Java中的表达式:通过运算符把常量或者变量连接起来的式子。

用来连接常量或者变量的符号叫做运算符。例如:int x=1+y;

Java中的运算符包括:算数运算符、赋值运算符、自增自减运算符、关系运算符、逻辑运算符、短路逻辑运算符、三元运算符。

算数运算符:+,-,*,/,%。其中需要注意的是:两个整数相除得到的是整数,要想得到小数,那参与相除操作的两个数必须有一个带小数。如果在表达式中含有多个数据类型,就会出现数据类型自动提升,提升为最大的那一种数据类型。例:byte b=1;int i=b+1;在这里我们就要用int类型的i的变量去接收。Java中存在整数常量优化机制。 例:byte b = 3+4;这种不会报错。

获得一个数个位:数%10;

获得一个数的十位:数/10%10;

获得一个数的百位:数/100%10;以此类推。

赋值运算符:=,+=,-=,*=,/=,%=;例:a+=b等同于a=(数据类型)a+b;

后面这5种赋值运算符包含了强制类型转换。

自增自减运算符:i++(++i),i–(–i);在单独使用的时候,i++(i–)和++i(–i)没有区别。在参与到其他运算中去的时候,看+(-)的位置,例如:++i是先进行自增操作,再参与到其他运算操作中去。而i++则是先进行参与的运算操作再自增。在以后的学习中主要用的还是单独使用的情况。

关系运算符:,!=,>,>=,<,<=;得到的结果是boolean类型的数据,要注意赋值运算符=和关系运算符,别搞混了。

逻辑运算符:&,|,,!;&:有false则false;|:有true则true;:相同为false,不同为true;!:取原来相反的结果。

短路逻辑运算符:&&和||;其中&&的效果和&一样,都是有flase则false,但是&&效率更高,因为当判断表达式左边为false的时候,右边直接不执行;||的效果和|一样,都是有true则true,当判断表达式左边为true的时候,右边直接不执行。

三元运算符:格式:数据类型 变量名=关系表达式?表达式1:表达式2;

当关系表达式结果为true时,把表达式1的值赋给变量;当关系表达式结果为false时,把表达式2的值赋给变量。

int a=3,b=5;
int getMax = a>b?a:b;

在这里补充几点其他内容:

一、键盘录入:三步

​ 导包:import java.util.Scanner;

​ 创建对象:Scanner.sc =new Scanner(System.in);

​ 实现键盘录入:int a=sc.nextInt();还有其他方法对应其他数据类型

二、产生随机数:三步

​ 导包:import java.util.Random;

​ 创建对象:Random r =new Random();

​ 产生随机数:int a =r.nextInt(产生范围);

​ 产生范围为半闭半开区间。先转换成全闭区间,[(大值-小值)+1] + 小值

三、在Java语言中,控制流程语句结构有三种:顺序结构、分支结构、循环结构

​ 顺序结构:按照代码的顺序,程序从上而下执行;

​ 分支结构:if分支结构、if…… else分支结构、if…… else if……else结构、switch结构

​ 循环结构:for循环结构、while循环结构、do……while循环结构

1.1.13 if分支语句

if分支语句分为三种:

if(判断语句){

​ 语句体;

}

if(判断语句){

​ 语句体1;

}else{

​ 语句体2;

}

if(判断语句1){

​ 语句体1;

}else if(判断语句2){

​ 语句体2;

}else if(判断语句3){

​ 语句体3;

}……else if(判断语句n){

​ 语句体n;

}else{

​ 语句体n+1;

}

1.1.14 switch分支语句

switch 分支语句:

switch(表达式/变量){

​ case 值1:

​ 语句体1;

​ break;

​ case 值2:

​ 语句体2;

​ break;

​ ……

​ default:

​ 语句体n+1;

​ break;

}

break可以直接跳出循环;continue可以结束本次循环,直接开始下次循环

总结:如果表示某一个具体的值的时候 那么就优先考虑使用 switch分支语句, 使用if 、else if也是可以的

如果表示一个区间范围的话 95>=x>90 则使用 if else if

1.1.15 for循环结构

for(初始化值;条件判断;条件控制){

​ 循环语句体;

}

例:对0-100求和

int sum=0;

for(int i=0;i<=100;i++){

​ sum+=i;

}

System.out.println(“sum:”+sum);

当你明确循环次数的时候 我们就使用for循环

1.1.16 while循环结构

初始化语句;

while(条件判断语句){

​ 循环语句体;

​ 条件控制语句;

}

例:对0-100求和:

int sum=0,i=0;

while(i<=100){

​ sum+=i;

​ i++;

}

System.out.println(“sum:”+sum);

一般是在不明确循环的次数的是 我们使用 while循环

1.1.17 do…while循环结构

初始化语句;

do{

​ 循环语句体;

​ 条件控制语句;

}while(条件判断语句);

例:对0-100求和:

int i=0;

int sum =0;

do{

​ sum+=i;

​ i++;

}while(i<=100);

注意:do……while循环语句不管条件判断是不是true,都会先执行循环体语句一次。在书写格式上,while()后有;

1.1.18 各种循环语句的区别和应用场景

for while do……while
特点 先执行判断语句再决定是否要执行循环体 先执行判断语句再决定是否要执行循环体 先执行一次循环体的内容,再判断
初始化变量 初始值不能在for循环外面使用 初始值可以在while循环外面使用 初始值可以在dowhile循环外面使用
适用场景 明确循环次数的时候 在不明确循环次数的时候(一般使用都是写死循环的时候) 至少需要执行一遍的时候

死循环:for( ; ; ){}

​ while(true){}

​ do{}while(true);

1.1.19 循环跳转控制语句

跳转控制语句 作用
continue 跳过某次循环,执行下一次的循环
break 终止循环

注意:continue只能在循环体里使用。

1.1.20 嵌套循环的应用

循环结构里套着循环结构;先执行一次外部循环,内部循环全部走完一遍,再执行外部循环一次,又完全执行内部循环。总的循环次数:外部循环次数*内部循环次数。

1.1.21 使用循环嵌套打印9*9乘法表

//打印乘法表:
public class Print{
	public static void main(String[]args){
		for(int i=1;i<=9;i++){
			for(int j=1;j<=9;j++){
				if(i>=j){
					System.out.println(i+"*"+j+"="+(i*j));
				}
			}
		}
	}
}

1.1.22 IDEA开发软件

先建工程项目;接着建模块;再建包;再建class;

1.1.23 数组的动态初始化

数组是用来存储多个相同类型的数据容器(注意只能存储同一类型的数据)。数组的索引是从0开始,依次加1。

数组定义格式:

数据类型 [] 变量名 例:int [] arr1 --------------推荐使用这一种
​数据类型 变量名 [] 例:int arr2[] -------------了解即可

数组的动态初始化:只知道数组的容量,对于数组的具体值不清楚,使用数组的动态初始化

动态初始化格式:数据类型 []变量名 =new 数据类型[长度/容量] 例:int []arr1=new int[5];

new代表去JVM堆内存中申请内存空间,new是一个关键字,凡是创建对象都必须要使用的关键字。

1.1.24 数组的访问格式

定义完数组后,我们是通过索引来访问数组内部的数据的。数组名[i]; 其中i代表索引;例如:arr1[0],arr1[1]……

我们要想知道数组长度时:数组名.length,这样我们访问数组最后一个元素时就成了:数组名[数组名.length-1]。

使用数组常见的两个问题是什么?

索引越界 空指针异常

是何种原因导致出现的?

索引越界: 访问了不存在的索引值, 索引值的范围:0~容量-1

空指针异常: 一个变量没有记录任何对象的内存地址,然后访问了对象的属性或者方法。

1.1.25 数组的静态初始化

我们创建数组时,我们知道了数组元素的具体值,直接对数组赋予具体值。例:int []arr={1,3,5,7,9};

格式:数据类型 [] 变量名=new 数据类型[]{值1,值2,值3……} -----注意尽管我们知道了长度,但是也不能写

简写格式:数据类型 []变量名={值1,值2,值3……} -------------------推荐这种形式

1.1.26 Java的内存划分和作用

区域名称 作用
栈内存(Stack) 方法运行时使用的内存,存放方法中的变量和参数。
堆内存(Heap) 存储对象或数组,new出来的数据,都存储在堆内存。
方法区 存储已加载的class文件信息。
寄存器 给CPU使用,和我们开发无关。
本地方法栈 JVM在使用操作系统功能的时候使用,和我们开发无关。

栈内存:方法执行完毕,内存释放,栈内存存放的是局部变量。

堆内存:数据使用完毕后,等待垃圾回收器回收,堆内存存放的是new出来的数据, 数组,对象。

数组的默认初始化值:

​ 整数类型:0

​ 浮点类型:0.0

   字符类型:空字符  ''

​ 布尔类型:false

​ 引用类型:null

1.1.27 分析数组在内存中的存储

单个数组在内存中的存储:栈中存放方法的参数和变量;new出来的部分存放在堆内存中,包括对象和数组,两者通过同一地址相联系。

多个数组在内存中的存储:栈中存放方法的参数和变量;new出来的部分存放在堆内存中,包括对象和数组,两者通过同一地址相联系。但是,多个数组间没有联系,他们各自在栈内存中开辟空间,也各自在堆内存中开辟空间,两者地址不一样,没有联系。

多个数组变量指向同一数组对象:多个对象指向同一个内存地址的时候,那么修改元素会互相影响

1.1.28 方法的定义和调用

方法的定义格式一

public static void 方法名(){

​ 方法体;

}

调用:方法名();

方法的定义格式二(带参数列表)

public static void 方法名(数据类型 数据变量){

方法体;

}

调用:方法名(常量或变量);

例: public static void getMax(int a){

};

getMax(10);getMax(a)

方法的定义格式三(带返回值):

public static 数据类型 方法名(参数列表){

方法体;

return 数据;

}

常见调用:数据类型 变量名=方法名(参数)

例:public static int getMax(){

方法体;

return;

}

调用:int a = getMax(i)。

1.1.29 方法的参数和返回值问题

​ 什么时候需要带参数:当一些变量经常变化,我们就可以把它定义为参 数,在调用方法的时候我们再来给他赋值,这样可以做到灵活多变。

​ 我们在定义方法的时候不给参数赋值,只有在调用方法的时候才给其赋值,其中在参数列表中多个参数用逗号隔开,

1.1.30 方法的重载(Overload)

​ 同一个类中有多个不同同名的方法

判别重载的条件:在同一类中多个同名的方法,他们的参数列表不同,参数列表不同体现在参数数量和对应位置上的参数类型不同

方法重载与修饰符无关,与返回值无关,JVM会根据我们调用方法传递的参数来调用对应的方法。

1.1.31 参数是基本类型和引用类型的区别

方法参数是基本数据类型的时候,形参的改变不会造成实参的变化,每个方法在被调用执行的时候,都会进入栈内存,并且拥有自己的独立内存空间,当方法内部代码调用完毕之后,会从栈内存中弹栈消失;

方法参数是引用数据类型的时候,形参的改变会造成实参的变化,应为两者指向堆内存里的同一个地址。

1.1.32 Debug断点调试的使用

​ Debug断点调试工具是为了让程序员更加清楚地查看程序的执行流程,可以用来追踪程序运行过程来调试程序。



小白自学java ing,纯属个人分享,会持续更新分享自己的笔记,有错误希望大佬指正



本文含有隐藏内容,请 开通VIP 后查看