社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
3.1 注释
Java代码种注释是不会被执行的,是解释代码用的。写注释是一个非常重要的习惯
注释有三种方法:
单行注释:使用“ // ”开头,之后为的单行内为注释内容
多行注释:使用“/”开头“/”结尾,在“/*“和“ */”之间为注释内容
文档注释:使用”/**”开头“*/”结尾,注释中包含一些说明性的文字及一些JavaDoc标签(后期写项目时,可以生成项目的API)
JavaDoc标签(后期写项目时,可以生成项目的API)
参数信息:
@author 作者名
@version 版本号
@since 指明需要最早使用的jdk版本
@param 参数名
@return 返回值情况
@throws 异常抛出情况
2.2 标识符
标识符是用来给类名、变量名、方法名、类型名、组名、文件名进行命名。
命名规则:
标识符必须由字母、下划线、美元符号$开头;
由字母、数字、下划线、美元符号组成;
Java标识符对字母大小写敏感,不能是java关键字;
使用规范:
表示类名的标识符:每个单词的首字母大写;
表示方法和变量的标识符:第一个单词小写,从第二个单词开始首字母大写(驼峰原则)
!注意!:Java不采用通常语言使用的ASCII字符集,而是采用Unicode这样标准的国际字符集。因此,这里字母的含义不仅仅是英文,还包括汉字等等。但是不建议大家使用汉字来定义标识符!
附录Java的关键词:
3.3 基本数据类型
由于Java是一种强类型语言,每个变量都必须先定义后使用
Java中定义了3类8种基本数据类型如图:
整数型
常变量的四种表现形式:
十进制整数,默认为十进制;eg:int b=15;
八进制整数,要求以o0或0o开头;eg:int b=0o15;//定义为八进制
十六进制整数,要求以0x或0X开头;eg:int b=0x15;//定义为十六进制
二进制,要求以0b或0B开头;eg:int b=0b1010;//定义为二进制
注意:Java语言的整型常数默认为int型,声明long型常量可以后加‘ l ’或‘ L ’eg:long b=8000000000L;
浮点型常变量
float类型又被称作单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求。而double表示这种类型的数值精度约是float类型的两倍,又被称作双精度类型,绝大部分应用程序都采用double类型。浮点型常量默认类型也是double。
有两种表现形式:
十进制:3.14、3140.0、0.314
科学计数法:314e-2、314E1、314e-3
注意:浮点类型的数据不适合用在高精度的数据领域使用;如果需要进行不产生误差的精确数字计算,需要使用BigDecimal类;(BigInteger实现了任意精度的整数运算)
public class double_float {
public static void main(String[] args) {
float a = 0.1f;
double b =0.1;
System.out.println(a==b);
}
}
显示的结果为:false;
使用BigInteger的代码测试:
import java.math.BigDecimal;
public class BigInteger {
public static void main(String[] args) {
BigDecimal a = BigDecimal.valueOf(1.0);
a =a.subtract(BigDecimal.valueOf(0.1));//减0.1
a =a.subtract(BigDecimal.valueOf(0.1));
a =a.subtract(BigDecimal.valueOf(0.1));
a =a.subtract(BigDecimal.valueOf(0.1));
a =a.subtract(BigDecimal.valueOf(0.1));
double d = 1.0;
d=d-0.1-0.1-0.1-0.1-0.1;
System.out.println(a);
System.out.println(d);
}
}
运行结果:
字符类型
所有的字符本质还是数字;在Java中使用单引号来表示字符常量。例如’A’是一个字符,它与”A”是不同的,”A”表示含有一个字符的字符串(使用String类定义,双引号就代表了字符串,字符串, char 类型用来表示在Unicode编码表中的字符,它占2个字节,可允许有65536个字符;
public class char_type {
public static void main(String[] args) {
char a ='u0061';
char b ='a';
System.out.println(a);
System.out.println(b);
}
}
运行结果:
转义字符:
布尔类型
boolean类型有两个常量值,true和false,在内存中占1位,不可以使用 0 或非 0 的整数替代 true 和 false ,这点和C语言不同。 boolean 类型用来判断逻辑条件,一般用于程序流程控制
小技巧:在if语句中if(flag == true),可以写成if(flag);推荐后者写法;
类型的转换
类型转换有两种转换方式:自动类型转换和强制类型转换
自动类型转换
byte,short,char—> int —> long—> float —> double
自动类型转换指的是容量小的数据类型可以自动转换为容量大的数据类型。实线表示无数据丢失的自动类型转换,而虚线表示在转换时可能会有精度的损失。
注意事项:
不能对布尔类型进行类型转换。
不能把对象类型转换成不相关类的对象。
在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
转换过程中可能导致溢出或损失精度,
浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
强制转换
强制类型转换,又被称为造型,用于显式的转换一个数值的类型。在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出;
转换格式:
(type)var
int a= (char) 12;
超出下标的代码示例:
public class type_conversion {
public static void main(String[] args) {
int money = 10_0000_0000;
int year = 20;
int total = money * year;
long total2 = money *year;
System.out.println(total);
System.out.println(total2);
}
}
输出结果:
解决办法:将其中一个变量强制转换为long型:
public class type_conversion {
public static void main(String[] args) {
int money = 10_0000_0000;
int year = 20;
System.out.println((long)money*year);
}
}
3.4 变量
变量本质上就是代表一个”可操作的存储空间”,空间位置是确定的,但是里面放置什么值不确定。可以通过变量名来访问“对应的存储空间”,从而操纵这个“存储空间”存储的值。变量的数据类型决定了变量占据存储空间的大小。
Java是一种强类型语言,每个变量都必须声明其数据类型。变量的数据类型决定了变量占据存储空间的大小
变量的分类:
局部变量
是方法或语句块内部定义的变量;生命周期为声明位置开始到方法或语句块执行完毕为止;局部变量必须先声明、初始化(赋值)再使用
实例变量(成员变量)
是方法外部或类的内部定义的变量;生命周期伴随对象始终。如果不对其初始化,将自动初始化该类型的默认值(布尔值默认是False,除了基本类型其他输出都是null)。
静态变量(类变量)
使用static定义。属于类,生命周期伴随类始终,从类加载到卸载。
代码示例:
public class variable_classification {
static String C = "静态变量";//类变量 static
String d = "成员变量1";//实例变量
String e = "成员变量2";//实例变量
//实例变量:从属与对象,如果不进行初始化,则值为该类型的默认值
public static void main(String[] args) {
String a = "局部变量";//局部变量;必须要声明和初始化值!
System.out.println(a);
System.out.println(C);
variable_classification vc =new variable_clCassification();
System.out.println(vc.d);
System.out.println(vc.e);
}
}
规范建议:不提倡一行声明多个变量,逐一声明每一变量可以提高程序的可读性;见名知意;驼峰原则;
命名规则:
所有变量、方法、类名:见名知意
类成员变量:首字母小写和驼峰原则:monthSalary
局部变量:首字母小写和驼峰原则
常量:大写字母和下划线:MAX_VALUE
类名:首字母小写和驼峰原则
方法名:首字母小写和驼峰原则
3.5 常量
常量通常指的是一个固定的值,在Java语言中,利用关键字final来定义一个常量的常量为符号变量;
规范建议:定义常量使用大写字母和下划线;eg:MAX_VALUE
3.6 运算符
常见的运算符
运算符运算规则:
一元运算
a++:先运算在自加;++a先自加在运算(--同理)
二元运算
整数运算:
如果两个操作数有一个为Long, 则结果也为long
没有long时,结果为int,即使操作数全为short,byte,结果也是int。
浮点运算:
如果两个操作数有一个为double,则结果为double
只有两个操作数都是float,则结果才为float
取模运算符:
其操作数可以为浮点数,一般使用整数,结果是“余数”,“余数”符号和左边操作数相同
注:关于取模运算带有负数时结果为:a%b=a-(a/b)*b
赋值扩展赋值运算符
a+=b 就相当于a=a+b;同理其他;
a*=b+3就相当于a=a*(b+3);
关系运算符
关系运算符用来进行比较运算,关系运算的结果是布尔值:true/false;
!注意!:
=是赋值运算符,而真正的判断两个操作数是否相等的运算符是==
==、!= 是所有(基本和引用)数据类型都可以使用
> 、>=、
逻辑运算符
注意:
短路与和短路或采用短路的方式。
从左到右计算,如果只通过运算符左边的操作数就能够确定该逻辑表达式的值,则不会继续计算运算符右边的操作数,提高效率
位运算
3*2效率比较高的方法是使用3<<1的方法。
&和|既是逻辑运算符,也是位运算符。如果两侧操作数都是boolean类型,就作为逻辑运算符。如果两侧的操作数是整数类型,就是位运算符
不要把“^”当做数学运算“乘方”,是“位的异或”操作
代码示例:
System.out.println(~1);//输出-2
System.out.println(1&2);//输出0
System.out.println(1|2);//输出3
System.out.println(1^2);//输出3
System.out.println(1<<4);//输出16
System.out.println(16>>2);//输出4
字符串连接符
“+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接。
条件运算符
X ? Y : Z
其中 x 为 boolean 类型表达式,先计算 x 的值,若为true,则整个运算的结果为表达式 y 的值,否则整个运算结果为表达式 z 的值
运算符的优先级
3.7 输入语句
java.util.Scanner是Java5的新特性,可以通过Scanner类来获取用户输入。
基本语法
Scanner s = new Scanner(System.in);
使用建议:输出属于IO流的类如果不关闭,则会一直占用资源,要养成用完就关闭的好习惯。
代码示例:
import java.util.Scanner;//使用前要导入相应的类
public class 输入 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("使用next接收:");
if (scanner.hasNext()){
String str1 = scanner.next();
scanner.nextLine();
String str2 = scanner.nextLine();
System.out.println("输出内容为:"+str1);
System.out.println("输出内容为:"+str2);
}
//凡是属于IO流的类如果不关闭,则会一直占用资源,要养成用完就关闭的好习惯。
scanner.close();
}
}
通过Scanner类的next()与nextLine()方法获取输入字符串,在读取前一般使用hasNext()与hasNextLine判断是否还有输入的数据;next()与nextLine方法的不同点在于,对输入有效字符之前遇到的空白时,next()方法会判断为结束符,而nextLine()则是以回车为结束符。
3.8 控制语句
控制语句分为三类:顺序、选择、循环
顺序结构
是Java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句的执行。
选择结构
主要的选择结构有:if选择结构和switch多选择结构
if语句
单选结构
if(布尔表达式){
语句块
}
双选结构
if(布尔表达式){
语句块1;
}else{
语句块2;
}
多选择结构
if(布尔表达式){
语句块1;
}else if(布尔表达式){
语句块2;
}else if(布尔表达式){
语句块3;
}
switch语句
switch语句会根据表达式的值从相匹配的case标签处开始执行,一直执行到break语句处或者是switch语句的末尾。如果表达式的值与任一case值不匹配,则进入default语句(如果存在default语句的情况),switch语句中的变量类型可以是byte、short、int或char;
switch(表达式){
case 值1:
语句序列1;[break] //[break]直接跳出循环
case 值2:
语句序列2;[break]
case 值n:
语句序列n;[break]
default:
默认语句;[break]
}
循环结构
循环结构分两大类,一类是直到型,一类是当型
直到型
先执行某语句, 再判断布尔表达式,如果为true,再执行某语句,如此反复,直到布尔表达式条件为false时才停止循环;
do{
循环体;
}while(布尔表达式)
当型
当布尔表达式条件为true时,反复执行某语句,当布尔表达式的值为false时才停止循环
while循环
while(布尔型表达式){
循环体;
}
for循环
for(初始表达式;布尔表达式;迭代因子){
循环体;
}
可以逗号运算符:
for(初始表达式1,表达式2;布尔表达式;迭代因子1,迭代因子2){
循环体;
}
break用法
在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句,整个循环结束
continue用法
continue 语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定,退出单前循环
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!