第一周Java学习笔记
第一章:开发前言
1.1 java语言概述
什么是Java语言
java语言是美国sun公司在1995年推出的高级编程语言。
编程语言:是计算机的语言,人们可以使用编程语言对计算机下达命令,让计算机完成人们需要的功能。
java语言发展史:
1995年sun公司发布java 1.0版本
1997年发布java 1.1版本
1998年发布java 1.2版本
2000年发布java 1.3版本
2002年发布java 1.4版本
2004年发布java 5版本
2006年发布java 6版本
2009年Oracle甲骨文公司收购sun公司,并于2011发布java7版本
2014年发布java 8版本
2017年9月发布java 9版本
2018年3月发布java 10版本
1.2计算机基础知识
位权:每一位代表多少个数
位权法将二进制转换为十进制:每一位乘以该位的位权
位(bit):一个数字0或者一个数字1,代表一位
字节(byte):计算机中数据存储的最小单位,不可再分
1 byte=8 bit 1kb=1024byte 1TB=1024GB 1PB=1024TB 1EB=1024PB 1ZB=1024EB
命令提示符: cmd
常用的DOS命令:
清屏 cls
启动 win+r
创建目录 md
删除目录 rd
删除文件 del
进入指定目录 cd
进入多级文件夹 cd 文件夹1\文件夹2\文件夹3
退回到上一级目录 cd…
退回到根目录 cd\
退出dos命令行 exit
列出当前目录下的文件以及文件夹 dir
第二章:Java语言开发环境搭建
2.1 Java虚拟机——JVM
JVM(java virtual machine):Java虚拟机,是运行所有Java程序的假想计算机,是Java程序的运行环境,是Java最具有吸引力的特性之一,我们编写的Java代码,都运行在JVM上
跨平台:用Java编写的软件可以运行在任何的操作系统上,这个特性称为Java语言的跨平台性。该特性由jvm实现,编写的程序运行组jvm上,而jvm运行在操作系统上。
注:jvm虚拟机本身不具备跨平台功能,每个操作系统下都有不同版本的虚拟机。
2.2 JRE和JDK
**JRE:**是Java程序运行时的环境,包含jvm和运行时所需要的核心类库(环境信息)
**JDK:**是Java程序开发工具包,包含JRE和开发人员实用工具
第三章:HelloWorld入门程序
3.1 程序开发步骤说明
Java程序开发三步骤:编写、编译、运行
Javac.exe:编译器
Java.exe:解释器
编译:javac 文件名.java
运行:java 文件名
注意:第一行的第三个单词必须和所在的文件名称完全一样、大小写也要一样
public class后面代表定义一个类的名称,类是Java当中所有源代码的基本组织单位
public class HelloWorld
{
public static void main(String[] args)//万年不变的固定写法,代表main方法,代表程序执行的起点
{
System.out.println("Hello world!");//代表打印输出语句(其实就是屏幕显示)
}
}
常见问题:拼写问题:文件名和类名要完全一样、大小写、中英文严格区分
3.2 程序注释
1、//单行注释
2、/* 多行注释*/
3.3 关键字
关键字特点:1.完全小写的字母
2.在增强版的记事本当中有特殊颜色
3.4 标识符
标识符:指在程序中,我们自己定义内容。比如类的名字、方法的名字和变量的名字等都是标识符。(以上案例中类的名字HelloWorld就是标识符)
命名规则(硬性要求):
1、可以包含英文字母(区分大小写)、0-9数字、$(美元符号)和_(下划线)
2、标识符不能以数字开头
3、标识符不能是关键字
命名规范(软性要求):
1、类名规范:首字母大写,后面每个单词首字母大写(大驼峰式)
2、变量名规范:首字母小写,后面每个单词首字母大写(小驼峰式)
3、方法名规范:同变量名
第四章:常量的概念与分类
4.1 概述
常量:在程序运行期间,固定不变的量
4.2 分类
1.字符串常量:凡是用双引号引起来的部分,叫做字符串常量,例如:“abc”、“Hello”
2.整数常量:直接写上的数字,没有小数点,例如:100、200、-1
3.浮点数常量:直接写上的数字,有小数点,例如:2.5、-3.14、0.0
4.字符常量:凡是用单引号引起来的单个字符,就叫做字符常量,例如:‘A’、‘b’
5.布尔常量:只有两种取值:ture、false
6.空常量:null,代表没有任何数据
4.3 常量数据的打印输出
public class Demo01Const
{
public static void main(String[] args)
{
//字符串常量
System.out.println("abc");
System.out.println(""); //字符串两个双引号中间的内容为空
System.out.println("xyz");
//整数常量
System.out.println(20);
System.out.println(-500);
//浮点数常量(小数)
System.out.println(3.14);
System.out.println(-2.5);
//字符常量
System.out.println('A');
System.out.println('6');
/*System.out.println(' ');//两个单引号中间必须有且只有一个字符,没有或者有两个都不行*/
//布尔常量
System.out.println(true);
System.out.println(false);
//空常量,不能直接用来打印输出
//System.out.println(null);
}
}
第五章:变量和数据类型
5.1 基本数据类型
整数型 byte short int long
浮点型 float double
字符型 char
布尔型 boolean
整数类型:
Byte 1字节=8bit -128到127之间
Short 2字节 -2的15次方到2的15次方-1 short s=1
Int 4字节 -2的31次方到2的31次方-1 int i=1
Long 8字节 -2的63次方到2的63次方-1 long l=3l,这个long类型变量赋值时要在值的后面加
浮点类型:Float 单精度 4字节 -2的128次方到2的128次方 7位有效数字 float f=1.22f,float类型的变量在赋值时值后面加上字母f
Double 双精度 8字节 -2的1024次方到2的1024次方 16位有效数字 double d=1.22
字符类型:用英文的单引号括起来的单个的字母、数字、符号 比如 char c1=’a’,char c2=’%’
布尔类型:(boolean)只允许取值true 和 flase Boolean b1=true bollean b2=flase
Bit:位数 例 0100110 7bit
5.2 引用数据类型(今后学习):
字符串、数组、类、接口、Lambda
5.3 字符串:
字符串:由0到多个字母数字符号共同组成的一个串,这个串要用英文的双引号括起来
String str=”hello word”; System.out.println(str);
引用类型,都可以用null作为值,也就是说可以在初始化的时候赋值为null
String是引用类型,也就是说可以使用null作为值
注意:
1.字符串不是基本类型,而是引用类型
2.浮点型可能只是一个近似值,并非精确的值
3.数据范围与字节数不一定相关,例如float数据范围比long更加广泛,但float是4字节,long是8字节
4.浮点数当中默认类型是double,如果一定要使用float类型,需要加上一个后缀F
如果是整数,默认为int类型,如果一定要使用long类型,需要加上一个后缀L,推荐使用大写字母后缀
System.out.println(100L);
变量:
变量:程序运行期间,内容可以发生改变的量
创建一个变量并且使用的格式:
- 数据类型 变量名称;//创建了一个变量
变量名称 =数据值;//赋值,将右边的数据值,赋值交给左边的变量
2.一步到位的格式: 数据类型 变量名称=数据值;//在创建一个变量的同时,立刻放入指定的数据值
public class Demo02Variable
{
public static void main(String[] args)
{
//创建一个变量
//格式:数据类型 变量名称
int num1;
//向变量中存入一个数据
//格式:变量名称=数据值
num1=10;
//当打印输出变量名称的时候,显示出来的是变量的内容
System.out.println(num1);//10
//使用一步到位的格式来定义变量
//格式:数据类型 变量名称 =数据值;
int num2=25;
System.out.println(num2);//25
num2=35;
System.out.println(num2);//35
System.out.println("==================");
byte num3=30;//注:右侧数值的范围不能超过左侧数据类型的取值范围
System.out.println(num3);//30
//byte num4=400;//右侧超出了byte 数据范围
short num5=50;
System.out.println(num5);//50
long num6=3000000000L;//long类型数字后要加L
System.out.println(num6);
float num7=2.5F;//float类型数字后要加F
System.out.println(num7);
double num8=1.2;
System.out.println(num8);
char zf1='a';
System.out.println(zf1);//a
zf1='中';
System.out.println(zf1);//中
boolean var1=true;
System.out.println(var1);
var1=false;
System.out.println(var1);
//将一个变量的数据内容,赋值给另一个变量
//右侧的变量名称var1已经存在,里面装的是flase布尔值
//将右侧变量里面的false值,向左交给var2变量进行储存
boolean var2=var1;
System.out.println(var2);//false
}
}
注意事项:
1.如果创建多个变量,那么变量之间的名称不可以重复
2.对于float和long类型来说,字母后缀F和L不要丢掉
3.如果使用byte或者short类型的变量,那么右侧的数据范围不能超过左侧类型的范围
4.没有进行赋值的变量不能直接使用,一定要赋值之后才能使用
5.变量使用不能超过作用域的范围
【作用域】从定义变量的一行开始,一直作用到直接所属的大括号结束为止
数据类型转换
**自动类型转换:**容量小的类型自动转换为容量大的数据类型。
格式:范围大的类型 范围大的变量名=(范围大的类型)原本范围小的数据;
**数字类型容量从小到大分别为:**byte、short、int、long、float、double
有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算
Byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型
当把任何基本数据类型的值和字符串进行连接运算时(+),基本类型的值将自动转化为字符串类型
强制类型转换:
-
特点:代码需要进行特殊的格式处理,不能自动完成
-
格式:范围小的类型 范围小的变量名=(范围小的类型)原本范围大的数据;
注意事项:
1. 强制类型转换一般不推荐使用,因为有可能发生精度损失、数据溢出。
2. Byte/short/char这三种类型都可以发生数学运算,例如加法“+”;
3. Byte/short/char这三种类型在进行运算时,都会首先被提升为int类型,然后再计算
4. Boolean类型不能发生数据类型转换
ASCII编码表:
ASCII码表:美国信息交换标准代码
常用(需要记忆):
ASCII值 | 控制字符 |
---|---|
48 | 0 |
65 | A |
90 | Z |
97 | a |
122 | z |
public class Demo03DateTypeChar
{
public static void main(String[] args)
{
char zifu1='1';
System.out.println(zifu1+0);//49
char zifu2='A';//其实底层保存的是65数字
char zifu3='c';
System.out.println(zifu3);
//左侧是int 类型,右边是char类型
//char-->int,确实是从小到大
//发生了自动类型转换
int num=zifu3;
System.out.println(num);//99
char zifu4='中';
System.out.println(zifu4+0);//20013
}
}
Unicode码表:万国码,也就是数字和符号的对照关系,开头0-127部分和ASCII完全一样,但是从128开始包含更多字符
第六章:运算符
6.1 运算符
运算符:进行特定操作的符号,例如:+ * /
表达式:用运算符连起来的式子叫做表达式,例如:20+5 a+b
四则运算:加+ 减- 乘* 除/
取(模)余 % :%两边数字都是整数
注意:
一旦运算中有不同类型的数据,那么结果是数据类型范围大的那种
6.2 加法的多种使用
1.对于数值来说,就是加法
2.对于字符char类型来说,在计算之前,char会被提升成为int,然后再计算
3.对于字符串String(首字母大写,并不是关键字)来说,加号代表字符串连接操作
public class Demo05plus
{
public static void main(String[] args)
{
String str1="Hello";
System.out.println(str1);//Hello
System.out.println(str1+"World");
//优先级问题
String str2="JAVA";
System.out.println(20+30+str2);//50JAVA
System.out.println(str2+20+30);//JAVA2030
System.out.println(str2+(20+30));//JAVA50
}
}
6.3 自增和自减
自增运算:++
自减运算:–
含义:让一个变量加一个数字1,或者让一个变量降一个数字1
使用格式:写在变量名之前,或者写在变量名之后
使用方式:
1.单独使用,不和其他操作混合,自己独立成一个步骤。这样前++和后++没有区别
2.混合使用:和其他操作混合,例如与复制混合,或者与打印混合。在混合使用时候,两者有很大区别
A.前++:变量立刻+1,然后拿着结果进行使用 【先加后用】
B.后++:先使用变量本来的数值,然后变量再+1 【先用后加】
注意:只有变量才能使用自增、自减运算符,常量不可发生改变,所以不能使用
6.4 赋值运算符
**基本赋值运算符:**就是一个等号"=",代表将右侧的数据交给左侧的变量
int a=30;
复合赋值运算符:
+= a+=3 a=a+3;
-= b-=4 b=b-4;
*= c *=5 c=c *5;
/= d/=6 d=d/6;
%= e%=7 e=e%7;
注意:
1.变量才能使用赋值运算符,常量不能进行赋值
2.复合赋值运算符其中隐含了一个强制类型转换
byte num=30;
num+=5;
//num=num+5
//num+5=byte+int
//num=int +int
//num=int
//num=(byte)int
6.5 比较运算符
== < > <= >= !=
比较运算符,是两个数据之间进行比较的运算,运算结果都是布尔值true或者false
注意:
1.比较运算符的结果一定是一个boolean值,成立就是true,不成立就是false
2.如果进行多次判断,不能连着写
6.6 逻辑运算符
与(并且) && 全都是true,才是ture,否则就是false
或(或者) || 至少一个是true,就是true;全都是false才是false
非(取反) ! 本来是true,变成false;本来是false,变成true
短路现象:"&&",或"||",具有短路效果,如果根据左边已经可以判断得到最终结果,那么右边的代码将不再执行,从而节省一定的性能。
int a=10;
System.out.println(3>4&&++a<100);//false
System.out.println(a);//10
int b=20;
System.out.println(3<4||++b<100);//true
System.out.println(b);//20
注意:
1.逻辑运算符只能用于boolean值
2.与、或需要左右各有一个boolean值,但是取反只要有唯一的一个boolean值即可
3.与、或两种运算符,如果有多种条件,可以连续写
两个条件:条件A&&条件B
多个条件:条件A&&条件B&&条件C
TIPS:1<x<3;应该为 1<x&&x<3;
6.7 三元运算符
一元运算符:只需要一个数据就可以进行操作的运算符,例如:取反!、自增++、自减–
二元运算符:需要两个数据才可以进行操作的运算符,例如:加法+、赋值=
三元运算符:需要三个数据才可以进行操作的运算符
格式:数据类型 变量名称=条件判断?表达式A:表达式B;
流程:
首先判断条件是否成立;
如果成立为true,那么将表达式A的值赋给左侧变量;
如果不成立为false,那么将表达式B的值赋给左侧变量;
注意事项:
1.必须同时保证表达式A和表达式B都符合左侧数据类型的要求
int result=3>4?2.5:10;//错误写法
2.三元运算符的运算结果必须被使用
a>b?a:b;//错误写法
第七章:方法入门
7.1 概念引入
分方法,一目了然,使程序更加清晰
7.2 方法的定义与调用
定义一个方法的格式:
public static void 方法名称()
{
方法体
}
方法名称的命名规则和变量一样,使用小驼峰
方法体:也就是大括号当中可以包含任意条语句
注意事项:
1.方法定义的先后顺序无所谓
2.方法的定义不能产生嵌套包含关系
3.方法定义好之后不会执行,如果想要执行,一定进行方法的“调用”
如何调用方法,格式: 方法名称();
public class Demo11Method
{
public static void main(String[]args)
{
seller();//调用农民的的方法
cook();//调用厨子的方法
me();//调用我的方法
}
//我
public static void me()
{
System.out.println("吃!");
}
//厨子
public static void cook()
{
System.out.println("洗菜");
System.out.println("切菜");
System.out.println("炒菜");
System.out.println("装盘");
}
//小商贩
public static void seller()
{
System.out.println("运输");
System.out.println("吆喝");
}
}
第八章:JShell脚本工具
Jshell脚本工具是JDK9的新特性
当我们编写的代码非常少的时候,而又不愿意编写类,main方法,也不愿意去编译和运行,这个时候可以使用JShell工具
启动JShell工具:直接在dos命令中输入jshell(大小写均可)
退出JShell工具:输入/exit
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rMe42iYz-1604925494913)(D:\学习\Java\图片\4.png)]
编译器的两点优化:
1、对于byte/short/char三种类型来说,如果右侧赋值的数值没有超过范围,那么javac编译器将会自动隐含地为我们补上一个(byte)(short)(char)
A.如果没有超过左侧范围,编译器补上强转
B.如果右侧超过了左侧范围,那么直接编译器报错
byte num1=30; // int–>byte,不是自动转换类型,右侧确实是一个int数字,但是没有超过左侧范围
byte num2=128; //报错,右侧超过了左侧范围
2、在给变量进行赋值的时候,如果右侧的表达式中全部都是常量,没有任何变量,那么编译器javac将会直接将若干个常量表达式计算得到结果,这称为编译器的常量优化
注:一旦表达式中有变量参与,那么就不能进行这种优化了
short result=5+8;// result=13; //等号右边全部都是常量,没有任何变量参与运算,编译之后,得到的.class字节码文件当中相当于【直接就是】:short result=13;
short a=5; short b=8; short result=a+b; //错误写法,左侧需要为int类型 //short+short-->int+int-->int
第九章:流程控制
9.1 概述
在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的,也就是说,程序的流程对运行结果有直接的影响。所以,我们必须清楚每条语句的执行流程,而且,很多时候我们要通过流程控制语句的执行顺序来实现我们要完成的功能
9.2 顺序结构
**执行顺序:**按照箭头,从上到下。流程图:
第十章:判断语句
10.1 判断语句1——单–if语句
if(关系表达式)
{
语句体
}
10.2 判断语句2——标准的if-else语句
if(关系表达式)
{
循环体1;
}
else
{
循环体2;
}
执行流程:
1.判断关系表达式看其结果是ture还是false
2.如果是true就执行语句体1,如果是false就执行语句体2
3.继续执行其他语句
10.3 判断语句3——扩展的if-else语句(if…else if…else)
if(判断条件1)
{
执行语句1;
}
else if(判断条件2)
{
执行语句2;
}
...
else if(判断条件n)
{
执行语句n;
}
else
{
执行语句n+1;
}
10.4 用if语句可以替换三元运算符:(条件表达式?表达式1:表达式2)
第十一章:选择语句
11.1 选择语句1——switch
switch(表达式)
{
case 常量值1:
语句体1;
break;
case 常量值2:
语句体2;
break;
...
dafault:
语句体n+1;
break;//(正常情况下可以省略最后一个break,但强烈建议不要省略)
}
流程:
1.计算出表达式的值
2.和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束
3.如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉
注意:
1.多个case后面的数值不可以重复 编译报错
2.switch后面小括号中只能是下列数据类型:
A、基本数据类型:byte/short/char/int
B、引用数据类型:String字符串、enum枚举
3.switch语句格式可以很灵活,前后顺序可以颠倒,而且break语句还可以省略
匹配哪一个case就从哪一个位置向下执行,直到运行遇到break或者整体结束为止
第十二章:循环语句
12.1 循环概述
循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环体判断条件修改为false,从而结束循环,否则循环将一直执行下去
12.2 循环语句1——for循环
for(初始化表达式1;布尔表达式2/*(条件判断)*/;步进表达式3)
{
循环体4;
}
循环结构的基本组成部分:
1.初始化语句:在循环体开始最初执行,而且只能被执行一次
2.条件判断:如果成立,则循环继续,如果不成立,则循环退出
3.循环体:重复要做的事情内容,若干语句
4.步进语句:每次循环之后都要进行的扫尾工作
12.3 循环语句2——while循环
1. 标准格式
whlie(条件判断(真))
{
循环体
}
2. 扩展格式
初始化语句;
while(条件判断(真))
{
循环体;
步进语句;
}
12.4 循环语句3——do-while循环
1. 标准格式
do
{
循环体;
}
while(条件判断);
2. 扩展格式
初始化语句;
do
{
循环体;
步进语句;
}
while(条件判断);
注意:do-while 条件判断在后面,所以循环至少执行了一次,其他情况下结果与别的循环相同
12.5 三种循环的区别
1.如果条件判断从来没有满足过,那么for循环和while循环将会执行0次,但do-while循环会执行至少一次
2.for循环的变量如果在小括号中定义,只有循环内部才可以使用,while循环和do-while循环初始化语句本来就在外面,所以出来循环之后还可以继续使用
关于循环的选择有一个小建议(不作要求):凡是次数确定的场景多用for循环,否则多用while循环
12.6 条件控制语句(break、continue)
break关键字的用法:
1.用在switch语句中,一旦执行,整个switch语句立刻结束
2.可用在循环语句中,一旦执行,整个循环语句立刻结束,打断整个循环
continue关键字的用法:
1.用在switch语句中,一旦执行,立刻跳过当前case语句,继续执行此case语句以下的case语句
2.可用在循环语句中,一旦执行,立刻跳过当前次循环的剩余内容,马上开始下一次循环
12.7 死循环
**死循环:**永远停不下来的循环
**出现原因:**1、无心之过 2、故意之做
死循环的标准格式:
while(true)
{
循环体;
}
强行停止:CTRL+C
注意:死循环之后的语句会报错,因为死循环结束不了,后面的语句不会执行
12.8 循环嵌套
**循环嵌套:**指一个循环的循环体是另一个循环。比如for循环里面还有一个for循环,叫做嵌套循环。总共的循环次数=外循环次数*内循环次数
格式:
for(初始化表达式1;循环条件2;步进表达式3)
{
for(初始化表达式4;循环条件5;步进表达式6)
{
执行语句7;
}
}
第十三章:
13.1 集成开发环境IDE的概述
**集成开发环境:**一种专门用来提高软件开发效率的软件
13.2 IDEA的项目结构
new package名称用小写英文或者数字或者.组成,.是分级用的
13.3 IDEA中常用快捷键
快捷键 | 功能 |
---|---|
*ALT+ENTER | 导入包,自动修正代码 |
CTRL+Y | 删除光标所在行 |
CTRL+D | 重复当前行 |
CTRL+0 | 复制光标所在行内容,插入光标位置下面 |
*CTRL+ALT+L | 格式化代码(对齐代码) |
CTRL+/ | 单行注释,再按取消注释,也可多行注释 |
CTRL+SHIRT+/ | 选中代码注释,多行注释,再按取消注释 |
ALT+INS | 自动生成代码,toString,get,set等方法 |
ALT+SHIRT+上下箭头 | 移动当前代码行 |
SHIFT+F6 | 所有用到所选位置的都会一起改变 |