首先是在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以后,如果不配置环境变量,我们就只能在JDKbin目录下去使用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 Java语言中的数据类型转换分为自动类型转换和强制类型转换,其中自动类型转换是把小的数据(数值)放到大的数据类型(变量)里去;强制类型转换是把大的数据(数值)强行放到小的数据类型(变量)里去。 例:强制类型转换 i=(int)13.14 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的值赋给变量。 在这里补充几点其他内容: 一、键盘录入:三步 导包: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循环结构 if分支语句分为三种: if(判断语句){ 语句体; } if(判断语句){ 语句体1; }else{ 语句体2; } if(判断语句1){ 语句体1; }else if(判断语句2){ 语句体2; }else if(判断语句3){ 语句体3; }……else if(判断语句n){ 语句体n; }else{ 语句体n+1; } 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 for(初始化值;条件判断;条件控制){ 循环语句体; } 例:对0-100求和 int sum=0; for(int i=0;i<=100;i++){ sum+=i; } System.out.println(“sum:”+sum); 当你明确循环次数的时候 我们就使用for循环 初始化语句; while(条件判断语句){ 循环语句体; 条件控制语句; } 例:对0-100求和: int sum=0,i=0; while(i<=100){ sum+=i; i++; } System.out.println(“sum:”+sum); 一般是在不明确循环的次数的是 我们使用 while循环 初始化语句; do{ 循环语句体; 条件控制语句; }while(条件判断语句); 例:对0-100求和: int i=0; int sum =0; do{ sum+=i; i++; }while(i<=100); 注意:do……while循环语句不管条件判断是不是true,都会先执行循环体语句一次。在书写格式上,while()后有; 死循环:for( ; ; ){} while(true){} do{}while(true); 注意:continue只能在循环体里使用。 循环结构里套着循环结构;先执行一次外部循环,内部循环全部走完一遍,再执行外部循环一次,又完全执行内部循环。总的循环次数:外部循环次数*内部循环次数。 先建工程项目;接着建模块;再建包;再建class; 数组是用来存储多个相同类型的数据容器(注意只能存储同一类型的数据)。数组的索引是从0开始,依次加1。 数组定义格式: 数据类型 [] 变量名 例:int [] arr1 --------------推荐使用这一种 数组的动态初始化:只知道数组的容量,对于数组的具体值不清楚,使用数组的动态初始化 动态初始化格式:数据类型 []变量名 =new 数据类型[长度/容量] 例:int []arr1=new int[5]; new代表去JVM堆内存中申请内存空间,new是一个关键字,凡是创建对象都必须要使用的关键字。 定义完数组后,我们是通过索引来访问数组内部的数据的。数组名[i]; 其中i代表索引;例如:arr1[0],arr1[1]…… 我们要想知道数组长度时:数组名.length,这样我们访问数组最后一个元素时就成了:数组名[数组名.length-1]。 使用数组常见的两个问题是什么? 索引越界 空指针异常 是何种原因导致出现的? 索引越界: 访问了不存在的索引值, 索引值的范围:0~容量-1 空指针异常: 一个变量没有记录任何对象的内存地址,然后访问了对象的属性或者方法。 我们创建数组时,我们知道了数组元素的具体值,直接对数组赋予具体值。例:int []arr={1,3,5,7,9}; 格式:数据类型 [] 变量名=new 数据类型[]{值1,值2,值3……} -----注意尽管我们知道了长度,但是也不能写 简写格式:数据类型 []变量名={值1,值2,值3……} -------------------推荐这种形式 栈内存:方法执行完毕,内存释放,栈内存存放的是局部变量。 堆内存:数据使用完毕后,等待垃圾回收器回收,堆内存存放的是new出来的数据, 数组,对象。 数组的默认初始化值: 整数类型:0 浮点类型:0.0 布尔类型:false 引用类型:null 单个数组在内存中的存储:栈中存放方法的参数和变量;new出来的部分存放在堆内存中,包括对象和数组,两者通过同一地址相联系。 多个数组在内存中的存储:栈中存放方法的参数和变量;new出来的部分存放在堆内存中,包括对象和数组,两者通过同一地址相联系。但是,多个数组间没有联系,他们各自在栈内存中开辟空间,也各自在堆内存中开辟空间,两者地址不一样,没有联系。 多个数组变量指向同一数组对象:多个对象指向同一个内存地址的时候,那么修改元素会互相影响 方法的定义格式一 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)。 什么时候需要带参数:当一些变量经常变化,我们就可以把它定义为参 数,在调用方法的时候我们再来给他赋值,这样可以做到灵活多变。 我们在定义方法的时候不给参数赋值,只有在调用方法的时候才给其赋值,其中在参数列表中多个参数用逗号隔开, 同一个类中有多个不同同名的方法 判别重载的条件:在同一类中多个同名的方法,他们的参数列表不同,参数列表不同体现在参数数量和对应位置上的参数类型不同 方法重载与修饰符无关,与返回值无关,JVM会根据我们调用方法传递的参数来调用对应的方法。 方法参数是基本数据类型的时候,形参的改变不会造成实参的变化,每个方法在被调用执行的时候,都会进入栈内存,并且拥有自己的独立内存空间,当方法内部代码调用完毕之后,会从栈内存中弹栈消失; 方法参数是引用数据类型的时候,形参的改变会造成实参的变化,应为两者指向堆内存里的同一个地址。 Debug断点调试工具是为了让程序员更加清楚地查看程序的执行流程,可以用来追踪程序运行过程来调试程序。 小白自学java ing,纯属个人分享,会持续更新分享自己的笔记,有错误希望大佬指正int a=3,b=5;
int getMax = a>b?a:b;
for while do……while 特点 先执行判断语句再决定是否要执行循环体 先执行判断语句再决定是否要执行循环体 先执行一次循环体的内容,再判断 初始化变量 初始值不能在for循环外面使用 初始值可以在while循环外面使用 初始值可以在dowhile循环外面使用 适用场景 明确循环次数的时候 在不明确循环次数的时候(一般使用都是写死循环的时候) 至少需要执行一遍的时候 跳转控制语句 作用 continue 跳过某次循环,执行下一次的循环 break 终止循环 //打印乘法表:
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开发软件
数据类型 变量名 [] 例:int arr2[] -------------了解即可区域名称 作用 栈内存(Stack) 方法运行时使用的内存,存放方法中的变量和参数。 堆内存(Heap) 存储对象或数组,new出来的数据,都存储在堆内存。 方法区 存储已加载的class文件信息。 寄存器 给CPU使用,和我们开发无关。 本地方法栈 JVM在使用操作系统功能的时候使用,和我们开发无关。 字符类型:空字符 ''



