目录
一、IDE(集成开发环境,是所有开发工具的总称)
VS, idea, VSCode
Java常用开发工具:idea(收费)、eclipse
二、注释(对代码功能进行说明)
①以某种特定的符号作为标记,对程序功能的说明,程序在运行过程中不会执行注释
②java语言有三种注释方式:
//用于单行注释,快捷键ctrl+/
/* */用于多行注释,快捷键ctrl+shift+/,ctrl+shift+\取消注释
/** */文档注释,用于为类,方法,变量进行注释,鼠标放上去会有提示
三、关键字
语言中被赋予特定含义的单词,用来修饰某些内容(类,方法,变量)
特点:
关键字都是小写字母
保留字:
java中未正式定义为关键字的,还不能在java中正式使用的单词,在后期版本中可能会被定义为关键字,不能用(const,goto)
四、标识符
1.标识符的含义
Java中为类,方法,变量等命名时,使用的字符序列称为标识符
(凡是自己可以起名字的名称都可以叫标识符)
2.标识符的命名规则
①语法强制规范
- 由26个英文字母大小写,0-9,或$组成
- 数字不可以开头
- 不可以使用关键字和保留字,但能包含关键字和保留字
- Java中严格区分大小写
- 长度无限制
- 标识符不能包含空格
②约定俗成(参考阿里巴巴要求)
• 见名知意
• 包名:全部小写
• 类名:首字母大写,多单词组成时,所有单词首字母大写 XxxYyyZzz(为了区分类名和变量名)
• 变量名和方法名:首字母小写,多单词组成时,首字母小写,其余首字母大写 xxxYyyZzz
• 常量:全部大写,多单词之间用_连接 MAX_VALUE PI
五、java变量
①程序运行中值可以改变的,是一个存储空间
②变量是内存中的一小块区域,使用变量名来访问这块区域,因此,每一个变量使用前必须先申请(声明),然后申请内存空间,最后在使用前必须进行赋值(填充内容),赋值必须与类型一致才能使用
- 变量是通过使用变量名来访问这块区域的
- 其要素包括变量名,变量类型
- Java程序中每一个变量都属于特定的数据类型,在使用前必须对其声明
声明格式为:声明语法,数据类型,变量名1,变量名2
例如:int x,y,z
x=10
y=20
z=30
六、java数据类型
1.数据类型的分类
①基本数据类型
8个关键字声明的,使用简单
整数:
byte,short,int,long(Java各整数类型有固定的表数范围和字段长度)
byte a=127占用储存空间1字节
short b=32767占用储存空间2字节
int c=100000占用储存空间4字节
long d=2222222222L占用储存空间8字节
Java语言的整书字面量默认为int型,声明long型常量可以在后加’l’或’L’)
浮点:
float , double(也可以表示整数)
float e=1022.222f(浮点数字面量默认是double类型,声明float类型时,需要在字面量后面加上f/F)4字节
double f=100.3333 占用储存空间8字节
字符:
char(只能表示一个字符,大小是2字节,可以表示世界上任意的字符,如果想表示一个字符串请用String)计算机只认识二进制不认识字符,每个字符在底层的编码表中有一个对应的整数编码
char g=’a’;
布尔型:
boolean
boolean j=true;
boolean j1=false;
②引用数据类型
用系统中的类(字符串)作为类型,例如String
String s=”abcd”;
String是java语言中提供的一个类,用String来表示一种类型
运算规则:
①任意八种基本数据类型的数据与String类型只能进行连接“+”运算,且结果一定也是String类型
②String类型不能转为其他基本类型
例如:String s=”abcd”;底层存储与c语言一致,都是采用数组存储多个字符【‘a’,’b’,’c’,’d’】
备注:编码表
ASCII包含英文字母,其他符号
Unicode后来国际上发明了一种编码,可以包含全球任何国家的语言符号,兼容了ASCLL码的部分
Java中采用的是Unicode编码表
char类型,可以进行算术运算,在运算时,实际上用的是此字符在编码表中的十进制编号运算的
2.基本数据类型转换
除boolean之外的7种类型之间的转换
!!!备注
8种基本数据类型:
整数:byte short int long
浮点:float double
字符:char(一个字符底层编码对应一个整数编号)
逻辑值:boolean(true,false)
①默认转换
小容量类型大容量类型(可自动进行转换)
注意!!!
四个字节的float类型容量大于八个字节的long(小数和整数在底层的二进制存储计算方式不同)
②强制转换
大容量转为小容量,可能会出现问题
!!!可能出现的问题
【溢出了】:大容量大于小容量的最大值,多余的部分会被删掉
【精度降低了】:比如浮点类型转为整数类型时只会保留整数部分,小数部分会被删掉
七、运算符
1.算术运算符
+:①加法运算(数值+数值)②连接(数值+字符串 字符串+字符串)③正号
注:整数不能和逻辑值进行运算
— :①减法②负号
*
/
%
++:自增1
-- :自减1
!!!自增自减的具体运算
前置自增:先进行自身加1,后运算
后置自增:先运算,在进行自身加1
自增运算大致分为三大类:
①自增表达式单独出现
自增表达式单独出现时,两者结果一致
②自增表达式赋值给其他变量
③自增表达赋值给自身
2.比较运算符
==,!=:用于数值和数值之间的比较,还可以用于布尔型和布尔型,还可以用于引用类型和引用类型
> , < , >= , <= :只能比较数值与数值(char)大小
3.逻辑运算符
逻辑运算:逻辑值(true,fasle)与逻辑值之间的运算
!!!错误写法
15>a结果是布尔值true,而true>3不能进行比较
① &:逻辑与
左右两边都是true结果为true,有一个为fasle,结果为false
当遇到false后,还会执行后边的表达式
输出结果:b=6
即int b = 5,自增之后等于6
② &&:逻辑与(短路与)
左右两边都是true结果为true,有一个为fasle,结果为false
当遇到false后,不会执行后边的表达式
输出结果:b=6
可知后边的表达式根本没有执行,即当第一个表达式false后,后边的表达式不会再运行,效率更高
③ |:逻辑或
当遇到true后,仍然会执行后面的表达式
输出结果:y=6
即int y = 5,自增之后等于6
④ ||:逻辑或(短路或)
左右两边如果有一个是true,结果为true
当遇到true后,不会再继续执行后面的表达式
输出结果:y=6
可知后边的表达式根本没有执行,即当第一个表达式true后,后边的表达式不会再运行,效率更高
⑤ !:逻辑非(取反)
输出false
⑥ ^ :逻辑异或(相同为假,不同为真)
4.赋值运算符
= :赋值时,注意左右两边的数据类型要一致,不同时,要遵循数据类型转换规则
注意:==和=之间的区别
+ =:
!!!注
当数据类型不一样时,会自动进行隐式类型转换
比如:s+=2(2属于int类型,自动转为short类型short=(short)int),所以s=s+2最好写成s+=2不容易出错
5.条件运算符
6.位运算符
日常开发中运算时也相对较少,但是巧妙的使用位运算可以大量减少运行开销,优化算法
<<:左移(左移一位相当于乘以2)
>>:右移(右移一位相当于除以2,带符号的位移:高位移动后,正数补0负数补1)
>>>:无符号右移(右移一位相当于除以2,不带符号的位移:高位移动后,默认补0)
&:与(只有1&1结果为1,否则是0)
|:或(只有0|0结果是0,否则是1)
^:异或(相同为0,不同为1)
~:非(取反)
& | ^ :
可以进行逻辑运算(左右两边是逻辑值),也可以进行位运算(数值)
八、控制台输入
Java提供Scanner类来实现从控制台向程序输入信息功能
具体步骤:
①导入使用的类:import java.util.Scanner;
②创建Scanner类型的对象:Scanner scanner = new Scanner(System.in);
③调用Scanner类的相关方法,来获取指定类型的变量
next()用以取得用户输入的字符串;
nextInt()将取得的输入字符串转换为整数类型;
nextFloat()转换成浮点型;
nextBoolean()转 换成布尔型;
例如:
System.out.print("请输入姓名");
Scanner scanner = new Scanner(System.in);
String name= scanner.next ();
System.out.println("姓名:"+name);
九、控制语句
1.条件语句
根据不同条件执行不同语句
①if条件结构
if条件结构是根据条件判断之后再做处理
if(条件表达式,最终返回一个布尔值){
}
if(条件表达式,最终返回一个布尔值){
}else{
}
if(条件表达式,最终返回一个布尔值){
}else
if (条件表达式,最终返回一个布尔值){
}
if(条件表达式,最终返回一个布尔值){
}else
if(条件表达式,最终返回一个布尔值){
}else{
}
!!!注意
if/else/for…语句后面即使只有一行代码最好也添加{ } 避免歧义
②switch语句
多分支选择语句,根据表达式的值,来执行多个操作中的一个
switch (表达式){
case value1: 语句序列1;
[break];
…………
case valueN: 语句序列N;
[break];
[default : 缺省语句;]
}
!!!需要注意的几点
①表达式的值可以是byte,short,int,char,枚举类型,String类型;
②case语句后面只能使用常量(字面量)表达式;(如果使用变量可能会导致值一样)
③case后的值不能重复;
④某个case分支如果没有提供break语句,则继续执行下一个case后的语句;(穿透性)
⑤当表达式的值与任一case子句中的值都不匹配时,将执行default后面的语句;
⑥如果没有default子句,则程序直接跳出switch语句
③if语句和switch语句的比较
● if-else语句与switch-case语句比较
结论:凡是使用switch-case的结构都可以转换为if-else结构。反之,不成立。
开发经验:如果既可以使用switch-case,又可以使用if-else,建议使用switch-case。因为效率稍高。
● if-else语句优势
if语句的条件是一个布尔类型值,if条件表达式为true则进入分支,可以用于范围的判断,也可以用于等值的判断,使用范围更广。
switch语句的条件是一个常量值(byte,short,int,char,枚举,String),只能判断某个变量或表 达式的结果是否等于某个常量值,使用场景较狭窄。
● switch语句优势
当条件是判断某个变量或表达式是否等于某个固定的常量值时,使用if和switch都可以,习惯上使用switch更多,因为效率稍高。当条件是区间范围的判断时,只能使用if语句
2.循环语句(重复执行某些动作)
2.1三类语句
①while 语句
初始化部分
while(逻辑表达式){
循环体
迭代部分
}
输出结果:
②do-while 语句
do { 语句; … ; }
while(逻辑表达式);
③for循环语句
for(表达式1; 表达式2; 表达式3){
语句;
… ;
}
初始变量,条件,迭代,空着可以陷入死循环
④三种循环结构对比
从循环次数角度分析:
do-while循环至少执行一次循环体语句。
for和while循环先判断循环条件语句是否成立,然后决定是否执行循环体。
如何选择:
遍历有明显的循环次数(范围)的需求,选择for循环
遍历没有明显的循环次数(范围)的需求,选择while循环
如果循环体语句块至少执行一次,可以考虑使用do-while循环
本质上:三种循环之间完全可以互相转换,都能实现循环的功能
2.2循环中使用的break & continue
①break 语句
用于终止某个语句块的执行。用在循环语句体中,可以强行退出循环
!!例如:
②continue 语句
用在循环语句体中,用于终止某次循环过程,跳过循环体中 continue语句下面未执行的循环,开始下一次循环过程
例如:
2.3循环嵌套
将一个循环放在另一个循环体内,就形成了嵌套循环。其中, for ,while ,do…while均可以作为外层循环和内层循环。
备注:println()会自动换行
Print()不会自动换行
换行符号“\n”
• 结束内层循环
实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。
break只能结束所在那一层循环,不能结束外层循环
• 结束外层循环
在内层循环中结束外层循环,则需要使用标签,定义一个标签,如out,然后在需要跳出的地方,用break out就行了
十、方法
Java中的方法类似于其它语言的函数,将完成某个功能的代码进行封装,为它命名将功能封装为方法的目的是,可以实现代码重用,减少冗余
方法必须写在类中(.java文件中)
Java方法固定格式:
[访问权限修饰符 修饰符…] [返回值类型] 方法名(形式参数类型 参数名){
Java语句;… … …
[return 返回值;]
}
public:公共访问权限(任何地方可以调用)
static:静态的(可以直接使用类名调用)
void:此函数或方法没有返回值
menu:方法名
( ):参数列表
{ }:方法体
1.方法定义
比如定义一个家庭收支菜单,如下所示:
在main方法中调用menu方法如下图所示:
①无参数的方法(指定一个固定的操作)
②有参数的方法
输出结果:
③有参数有返回值
• 修饰符:这是可选的,告诉编译器如何调用该方法,定义了该方法的访问类型。
• 形式参数: 在方法被调用时用于接收外界输入的数据。
• 返回值类型:事先约定的返回值的数据类型,如无返回值,必须给出返回值类型void。
• 方法体:方法体必须有{}括起来,在{}中编写完成方法功能的代码
• 返回值:方法在执行完毕后返还给调用它的环境的数据。
• 实参:调用方法时实际传给方法的数据。
2.java中调用方法的形式
类名/对象名.方法名(实参列表)
实参的数目、数据类型和次序必须和所调用方法声明的形参列表匹配, return 语句终止方法的运行并指定要返回的数据。
return语句:
return语句用于从当前执行的方法中退出, 返回到调用该方法的语句处继续执行。
有两种格式:
①return 值; //将值返回,方法必须声明有返回值
②return; //不返回任何值,表示终止方法执行,可以在声明为void的方法中使用
return也可以在没有返回值的方法中使用,表示终止方法运行,但是return后边不能有任何表达式