一、注释
1.1关于注释
简介
在Java编程世界中,注释是一道不可或缺的明灯,为开发者提供了代码背后的灯塔。它们是代码的解释者,为我们提供了更深层次的理解,从而提高了可读性、可维护性和团队协作效率。这里探讨Java代码中的三大注释类型:单行注释、多行注释和文档注释,同时分享关于注释的最佳实践,助你写出更加清晰优雅的代码。
注释的价值
价值/优点 | 描述 |
---|---|
增强代码可读性 | 解释了代码的意图,使得其他人可以迅速理解代码的逻辑。 |
提高代码可维护性 | 记录了代码的设计和目的,有助于日后维护和更新。 |
促进团队协作 | 为团队成员之间的交流提供了桥梁,减少了解释和猜测的需要。 |
生成API文档 | 文档注释可以生成清晰的API文档,使其他开发者更容易使用你的代码。 |
注释的最佳实践
我们在为代码写注释的时候,是有一定的规范的,同时也可保留自己的风格,但有一个良好的写注释的习惯是非常好的。我们在写代码的时候,尽量和养成一下的习惯,尽量保证 言简意赅。
- 清晰明了:
注释应简洁、清晰,用简单的语言表达代码的意图,避免晦涩难懂的描述。
- 适量使用:
不应过度注释,代码本身应是最好的解释。注释应在必要的地方添加,避免无谓的注释。
- 及时更新:
当代码发生变化时,相关注释也应更新以保持一致性。
- 文档注释养成:
对于公共方法和类,养成良好的文档注释习惯,以便生成准确的API文档。
1.2注释分类
单行注释
定义: 单行注释以双斜线(//)开头,用于在一行代码旁边添加解释说明。
示例:
String name = "张三";//String类型的变量name
public class annotation {
public static void main(String[] args) {
// 控制台输入“java单行注释”字符串
System.out.println("java单行注释");
}
}
注意事项:
- 单行注释适用于短小的解释,通常用于解释该行代码的作用或特殊情况。
- 注释应言简意赅,避免附加无关信息。
多行注释
定义: 多行注释以斜线加星号(/ )开头,以星号加斜线( /)结尾,用于解释多行代码块。
示例:
public class MutilineComment {
public static void main(String[] args) {
/*
* 这是一个多行注释
* 在控制台中显示"多行注释"字符串
* 巴拉巴拉
* // 多行注释中可以嵌套单行注释哦
*/
System.out.println("多行注释");
}
}
注意事项:
- 多行注释适用于需要注释掉一大段代码、临时调试等情况。
- 不要长期保留不使用的代码,应使用版本控制工具管理。
文档注释(JavaDoc注释)
定义: 文档注释以斜线加星号加两个星号(/**)开头,以星号加斜线(*/)结尾,用于生成程序文档。注释后,鼠标放在类和变量上面会自动显示出我们注释的内容
示例:
/**
* 这是一个用于计算两数和的方法示例。
* @param a 第一个加数
* @param b 第二个加数
* @return 两数之和
*/
public int add(int a, int b) {
return a + b;
}
/** */
的情况,这是可以被javadoc所识别的注释,即这种注释可以被JDK中的文档工具所感知,从而实现注释的抽取等操作。
注意事项:
- 文档注释应详细描述方法、参数和返回值,遵循JavaDoc规范。
- 通过生成的API文档,其他开发者可以更方便地了解如何使用你的代码。
当谈到文档注释时,我们实际上是在谈论一种特殊的注释类型,它不仅仅是为了帮助开发者理解代码,还能够生成更加详细的程序文档,以便其他开发者可以更轻松地了解和使用你的代码。文档注释在Java中通常被称为JavaDoc注释,因为JavaDoc是一种工具,它可以根据这些注释生成API文档。
注释格式
文档注释以两个星号(**)开始,位于类、方法、字段等代码元素之前。注释内容应该在星号后面紧接着,可以包含多行文字。
/**
* 这是一个示例的文档注释。
* 文档注释通常用于描述类、方法、字段的功能和用法。
*/
public class Example {
// ...
}
标签
JavaDoc注释不仅包含文本描述,还可以包含特定的标签,用于生成结构化的文档。以下是一些常见的JavaDoc标签:
标签 | 描述 |
---|---|
@param | 用于描述方法参数的用途和含义 |
@return | 用于描述方法的返回值。 |
@throws | 用于描述方法可能抛出的异常。 |
@see | 用于引用其他相关的类、方法等。 |
@deprecated | 用于标记已经不推荐使用的元素。 |
javadoc标签使用的代码示例
/**
* 这是一个计算两数和的方法示例。
* @param a 第一个加数
* @param b 第二个加数
* @return 两数之和
* @throws IllegalArgumentException 如果参数为负数
*/
public int add(int a, int b) throws IllegalArgumentException {
if (a < 0 || b < 0) {
throw new IllegalArgumentException("参数不能为负数");
}
return a + b;
}
生成API文档
JavaDoc工具可以从代码中提取文档注释,并根据这些注释生成详细的API文档。为了生成文档,你可以使用命令行工具或集成开发环境(IDEA)提供的工具。生成的API文档将包含类、方法、字段的描述、参数、返回值、异常等信息,使其他开发者能够更容易地理解和使用你的代码。
假设我们有以下代码:
/**
* 这是一个表示矩形的类。
*/
public class Rectangle {
private int width;
private int height;
/**
* 构造一个矩形对象。
* @param width 矩形的宽度
* @param height 矩形的高度
*/
public Rectangle(int width, int height) {
this.width = width;
this.height = height;
}
/**
* 计算矩形的面积。
* @return 矩形的面积
*/
public int calculateArea() {
return width * height;
}
}
通过JavaDoc注释,我们可以清楚地了解这个类的功能、构造方法的参数、方法的用途,以及如何使用它。当使用JavaDoc工具生成API文档时,其他开发者可以轻松地查看和理解这些信息,从而更快地集成你的代码。
idea中,点击 Tools --> Generate JavaDoc,选择需要生成文档的包或者类,即可在指定目录下生成文件,其中有一个index.html,打开即可看到。
二、关键字和保留字
2.1关键字
定义:被java语言赋予了特殊含义,用作专门用途的字符串。
特点:关键字中所有字母都为小写。关键字不能用作变量名,方法名,类名,包名和参数。
- private 私有的
private 关键字是访问控制修饰符,可以应用于类、方法或字段(在类中声明的变量)。 只能在声明 private(内部)类、方法或字段的类中引用这些类、方法或字段。在类的外部或者对于子类而言,它们是不可见的。 所有类成员的默认访问范围都是 package 访问,也就是说,除非存在特定的访问控制修饰符,否则,可以从同一个包中的任何类访问类成员。
- protected 受保护的
protected 关键字是可以应用于类、方法或字段(在类中声明的变量)的访问控制修饰符。可以在声明 protected 类、方法或字段的类、同一个包中的其他任何类以及任何子类(无论子类是在哪个包中声明的)中引用这些类、方法或字段。所有类成员的默认访问范围都是 package 访问,也就是说,除非存在特定的访问控制修饰符,否则,可以从同一个包中的任何类访问类成员。
- public 公共的
public 关键字是可以应用于类、方法或字段(在类中声明的变量)的访问控制修饰符。 可能只会在其他任何类或包中引用 public 类、方法或字段。所有类成员的默认访问范围都是 package 访问,也就是说,除非存在特定的访问控制修饰符,否则,可以从同一个包中的任何类访问类成员。
- 类、方法和变量修饰符
- abstract 声明抽象
abstract关键字可以修改类或方法。abstract类可以扩展(增加子类),但不能直接实例化。abstract方法不在声明它的类中实现,但必须在某个子类中重写。采用 abstract方法的类本来就是抽象类,并且必须声明为abstract。
- class类
class 关键字用来声明新的 Java 类,该类是相关变量和/或方法的集合。类是面向对象的程序设计方法的基本构造单位。类通常代表某种实际实体,如几何形状或人。类是对象的模板。每个对象都是类的一个实例。要使用类,通常使用 new 操作符将类的对象实例化,然后调用类的方法来访问类的功能。
- extends 继承、扩展
extends 关键字用在 class 或 interface 声明中,用于指示所声明的类或接口是其名称后跟有 extends 关键字的类或接口的子类。子类继承父类的所有 public 和 protected 变量和方法。 子类可以重写父类的任何非 final 方法。一个类只能扩展一个其他类。
- final 最终、不可改变
final 关键字可以应用于类,以指示不能扩展该类(不能有子类)。final 关键字可以应用于方法,以指示在子类中不能重写此方法。一个类不能同时是 abstract 又是 final。abstract 意味着必须扩展类,final 意味着不能扩展类。一个方法不能同时是 abstract 又是 final。abstract 意味着必须重写方法,final 意味着不能重写方法。
- implements实现
implements 关键字在 class 声明中使用,以指示所声明的类提供了在 implements 关键字后面的名称所指定的接口中所声明的所有方法的实现。类必须提供在接口中所声明的所有方法的实现。一个类可以实现多个接口。
- interface 接口
interface 关键字用来声明新的 Java 接口,接口是方法的集合。
接口是 Java 语言的一项强大功能。任何类都可声明它实现一个或多个接口,这意味着它实现了在这些接口中所定义的所有方法。
实现了接口的任何类都必须提供在该接口中的所有方法的实现。一个类可以实现多个接口。
- native 本地
native 关键字可以应用于方法,以指示该方法是用 Java 以外的语言实现的。
- new 新,创建
new 关键字用于创建类的新实例。
new 关键字后面的参数必须是类名,并且类名的后面必须是一组构造方法参数(必须带括号)。
参数集合必须与类的构造方法的签名匹配。
= 左侧的变量的类型必须与要实例化的类或接口具有赋值兼容关系。
- static 静态
static 关键字可以应用于内部类(在另一个类中定义的类)、方法或字段(类的成员变量)。
通常,static 关键字意味着应用它的实体在声明该实体的类的任何特定实例外部可用。
static(内部)类可以被其他类实例化和引用(即使它是顶级类)。在上面的示例中,另一个类中的代码可以实例化 MyStaticClass 类,方法是用包含它的类名来限定其名称,如 MyClass.MyStaticClass。
static 字段(类的成员变量)在类的所有实例中只存在一次。
可以从类的外部调用 static 方法,而不用首先实例化该类。这样的引用始终包括类名作为方法调用的限定符。
模式:public final static varName = ; 通常用于声明可以在类的外部使用的类常量。在引用这样的类常量时需要用类名加以限定。在上面的示例中,另一个类可以用 MyClass.MAX_OBJECTS 形式来引用 MAX_OBJECTS 常量。
super
2.2保留字
定义:现在java尚未使用,但以后版本可能会作为关键字使用。自己命名时避免使用这些保留字
byValue, cast, future, generic, inner, operator, outer, rest, var, goto, const
三、标识符
标识符
凡是可以自己命名的地方都叫标识符。例如:包名,类名,方法等。
定义合法标识符规则
1.有26个英文字母大小写,0-9,_或$组成。
2.不能以数字开头。
3.不可以使用关键字和保留字,但能包含关键字和保留字。
4.严格区分大小写。
5.标识符不能包含空格。
java中的名称命名规范
1.包名:多单词组成时所有字母都小写:xxxyyyzzz
2.类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
3.变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
4.常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
四、变量和常量
4.1变量
变量的概念
1.内存中的一个储存区域。
2.该区域的数据可以在同一类型范围内不断变化。
3.变量是程序中最基本的存储单元。包含变量类型、变量名和存储的值
变量的作用
用于内存中保存数据。
变量的声明
语法:<数据类型> <变量名称>
int a;
变量的赋值
语法:<变量名称> = <值>
a = 10;
注意:java中每个变量必须要先声明,后使用。
变量的声明和赋值
语法:<数据类型> <变量名> = <初始化值>
int a = 10;
在方法体外,类体内声明的变量称为成员变量。
在方法体内部声明的变量称为局部变量。
二者在初始化方面的异同
同:都有生命周期。异:局部变量除形参外,需要初始化。
4.2常量
简介
常量是指在程序的整个运行过程中值保持不变的量。
常量就是在程序中固定不变的值,是不能改变的数据。例如数字1、字符“a”、浮点数3.2等。在Java中,常量包括整型常量、浮点数常量、布尔常量、字符常量等。
定义常量
常量不同于常量值,它可以在程序中用符号来代替常量值使用,因此在使用前必须先定义。常量与变量(在《Java变量的声明和初始化》一节中讲解)类似也需要初始化,即在声明常量的同时要赋予一个初始值。常量一旦初始化就不可以被修改。它的声明格式为:
Java 语言使用 final 关键字来定义一个常量,其语法如下所示:
final dataType variableName = value
其中,final 是定义常量的关键字,dataType 指明常量的数据类型,variableName 是变量的名称,value 是初始值。
final 关键字表示最终的,它可以修改很多元素,修饰变量就变成了常量。例如,以下语句使用 final 关键字声明常量。
public class HelloWorld {
// 静态常量
public static final double PI = 3.14;
// 声明成员常量
final int y = 10;
public static void main(String[] args) {
// 声明局部常量
final double x = 3.3;
}
}
常量有三种类型:静态常量、成员常量和局部常量。
代码第 3 行的是声明静态常量,使用在 final 之前 public static 修饰。public static 修饰的常量作用域是全局的,不需要创建对象就可以访问它,在类外部访问形式为 HelloWorld. PI。这种常量在编程中使用很多。
代码第 5 行声明成员常量,作用域类似于成员变量,但不能修改。代码第 9 行声明局部常量,作用域类似于局部变量,但不能修改。
在定义常量时,需要注意如下内容:
- 在定义常量时就需要对该常量进行初始化。
- final 关键字不仅可以用来修饰基本数据类型的常量,还可以用来修饰对象的引用或者方法。
- 为了与变量区别,常量取名一般都用大写字符。
类常量:在类中定义常量
public class AuthConstant {
public static final String CLAIM_USER_ACCOUNT="userAccount";
}
在接口中定义
变量默认是static final特性
public interface ConstantInterface {
String SUNDAY = "SUNDAY";
String MONDAY = "MONDAY";
String TUESDAY = "TUESDAY";
String WEDNESDAY = "WEDNESDAY";
String THURSDAY = "THURSDAY";
String FRIDAY = "FRIDAY";
String SATURDAY = "SATURDAY";
}
枚举常量
自定义枚举类型,其中包括有限个命名的值。
enum Size {SAMLL, MEDIUM, LAEGE};
五、数据类型
5.1基本数据类型
5.1.1整型
5.1.2浮点型(小数)
float:2位小数
double:精度更高
float
保留2位小数
Float size1 = Float.valueOf(file.getSize())/1024/1024;
BigDecimal b = new BigDecimal(size1);
Float size=b.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
后面为0会省略
5.1.3字符型-char
简介
char型(字符型)数据在内存中占用2个字节。char型数据用来表示通常意义上的字符,每个字符占2个字节,Java字符采用Unicode编码,它的前128字节编码与ASCII兼容字符的存储范围在\u0000~\uFFFF,在定义字符型的数据时候要注意加’ ',比如 '1’表示字符’1’而不是数值1
字符是指计算机中使用的字母、数字、字和符号,包括:1、2、3、A、B、C、~!·#¥%……—*()——+等等。
汉字\字母\符号(属于字符)----字节----位-----比特
- 1个汉字 = 1个字 = 1个字符
- 1个字符 = 1个字节 = 8bit(ACSII码下)
- 1个字符 = 2个字节 = 16bit(Unicode码下)
自我认识:在处理汉字时,会默认将 编码方式调整为Unicode码,因为这样 数据容纳范围更大,不易出现乱码。
不同编码格式一个字符对应不同的字节(中英文符号与字母或汉字都作为字符,占用字节数都一一对应):
1:ASCII 码中,一个英文字母(不分大小写)为一个字节,一个中文汉字为两个字节。
2:GBK编码中,英文字母一个字节,一个中文汉字两个字节。
3:UTF-8 编码中,一个英文字母为一个字节,一个中文为三个字节。
4:Unicode 编码中,一个英文为一个字节,一个中文为两个字节。
5:UTF-16 编码中,一个英文字母字符或一个汉字字符存储都需要 2 个字节。
6:UTF-32 编码中,世界上任何字符的存储都需要 4 个字节。
字符本质对应的是数字
char c1=‘a’;
char c2=‘3’;
char c3=100;
编码
Unicode编码转换 - 站长工具 https://tool.chinaz.com/tools/Unicode.aspx
5.1.4布尔类型
5.2引用数据类型
在Java中,引用数据类型是一种用于定义对象和类的数据类型。Java中的引用数据类型包括以下几种:
- 类(Class): 类是定义对象的模板,包括字段(属性)和方法。在Java中,所有的类都是引用数据类型。你可以使用类来创建对象,并调用对象的方法或访问对象的属性。
- 接口(Interface): 接口定义了一组方法的规范,而不包含具体的实现。它提供了一种定义方法签名的方式,供其他类去实现。接口在Java中也是引用数据类型,你可以通过实现接口来定义类。
- 数组(Array): 数组是一种可以存储多个相同类型元素的容器。在Java中,数组是引用数据类型。你可以创建一个数组对象,然后使用索引来访问其中的元素。
- 枚举(Enum): 枚举是一种特殊的数据类型,用于定义一组常量。枚举类型在Java中也是引用数据类型。你可以创建一个枚举类型,并定义其中的常量,然后使用这些常量作为变量的取值。
- 包装类(Wrapper Class): 包装类是用于封装基本数据类型的类,使其能够作为引用数据类型使用。Java提供了一系列包装类,如Integer、Double、Boolean等。使用包装类可以使基本数据类型具有对象的特性,比如调用方法。
除了上述的常见引用数据类型外,还可以使用类和接口定义自己的引用数据类型。
5.2.1类
Sting类
-简介
1、String表示字符串类型,属于 **引用数据类型
**,不属于基本数据类型。
2、在java中随便使用 **双引号括起来
** 的都是String对象。
例如:“abc”,“def”,“hello world!”,这是3个String对象。
String类是Java中的一个引用数据类型,用于表示字符串。它是Java中最常用的类之一,用于处理文本数据和字符序列。
String类的特点如下:
- 不可变性:String对象一旦被创建,其内容就不能被更改。任何对String对象的修改操作实际上都是创建了一个新的String对象。
- 字符串池:String类使用了字符串池(String Pool)的概念,即相同内容的字符串在内存中只会存在一份,以节省内存空间。
- 提供了丰富的方法:String类提供了许多方法来操作和处理字符串,包括字符串连接、字符串查找、子串提取、大小写转换、字符替换等等。
-方法
以下是String类常用的方法:
- length():返回字符串的长度。
- charAt(int index):返回指定位置的字符。
- concat(String str):将指定的字符串连接到当前字符串的末尾。
- equals(Object obj):判断当前字符串与指定对象是否相等。
- indexOf(String str):返回指定字符串在当前字符串中第一次出现的位置。
- substring(int beginIndex, int endIndex):返回一个新的字符串,包含当前字符串中指定范围的字符。
- toLowerCase():将当前字符串中的字母字符转换为小写。
- toUpperCase():将当前字符串中的字母字符转换为大写。
- replace(char oldChar, char newChar):将当前字符串中的旧字符替换为新字符。
示例代码:
String str = "Hello, World!";
System.out.println(str.length()); // 输出:13
System.out.println(str.charAt(0)); // 输出:H
System.out.println(str.concat(" Welcome!")); // 输出:Hello, World! Welcome!
System.out.println(str.equals("Hello, World!")); // 输出:true
System.out.println(str.indexOf("World")); // 输出:7
System.out.println(str.substring(7, 12)); // 输出:World
System.out.println(str.toLowerCase()); // 输出:hello, world!
System.out.println(str.toUpperCase()); // 输出:HELLO, WORLD!
System.out.println(str.replace('l', 'L')); // 输出:HeLLo, WorLd!
BigDecimal
-简介
BigDecimal
是Java中的一个类,位于java.math
包中。它提供了任意精度的有符号十进制数字的表示,以及对这些数字进行算术运算的方法。由于BigDecimal
能够精确表示和计算浮点数,因此它在金融、科学计算等领域得到了广泛应用。
BigDecimal的主要用途包括:
金融计算:金融领域对数值的精度要求非常高,使用BigDecimal可以避免浮点数计算带来的精度损失。
科学计算:在科学计算中,往往需要处理大量的高精度数据,BigDecimal可以满足这种需求。
精确的小数运算:当需要精确控制小数位数和舍入方式时,BigDecimal是一个很好的选择。
1、BigDecimal 属于大数据,精度极高。
总类名:java.math.BigDecimal。
2、不属于基本数据类型,属于引用数据类型。
3、这是SUN公司提供的一个类,专门用在处理财务数据当中。
注意:财务数据方面,用double是远远不够的,会产生极大的误差。
-构造方法
BigDecimal 提供了很多的构造方法,可以使用int ,char[],BigDecimal,String,doble ,long,int来初始化BigDecimal,Bi gDecimal 总共提供了18种构造方法,需要注意的实如果使用double 来初始化BigDecimal或许会再次引入精度的问 题,下面提供了一个例子
(1)BigDecimal bd1 = new BigDecimal(“2.0”);
参数是一个数字的String形式。
(2)BigDecimal bd2 = BigDecimal.valueOf(2.0);
参数是一个double型数字。
注意:不要使用BigDecimal bd3 = new BigDecimal(2.0);
这种方式反而不准确。
首先,我们需要了解如何创建BigDecimal对象。BigDecimal通常通过字符串来构造,以避免浮点数的不精确表示。
import java.math.BigDecimal;
public class BigDecimalExample {
public static void main(String[] args) {
// 通过字符串构造BigDecimal
BigDecimal bd1 = new BigDecimal("123.456");
BigDecimal bd2 = new BigDecimal("789.123");
// 打印BigDecimal的值
System.out.println("bd1: " + bd1);
System.out.println("bd2: " + bd2);
}
}
-常用方法
BigDecimal类提供了丰富的方法来进行各种数值运算和格式转换。以下是一些常用的方法:
add(BigDecimal augend):加法运算
subtract(BigDecimal subtrahend):减法运算
multiply(BigDecimal multiplicand):乘法运算
divide(BigDecimal divisor, int scale, RoundingMode roundingMode):除法运算,可以指定小数位数和舍入方式
setScale(int newScale, RoundingMode roundingMode):设置小数位数和舍入方式
compareTo(BigDecimal val):比较两个BigDecimal的大小
toString():将BigDecimal转换为字符串
算术运算
import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalArithmetic {
public static void main(String[] args) {
BigDecimal bd1 = new BigDecimal("10.00");
BigDecimal bd2 = new BigDecimal("3.00");
BigDecimal bd3;
// 加法
bd3 = bd1.add(bd2);
System.out.println("加法结果: " + bd3); // 输出: 13.00
// 减法
bd3 = bd1.subtract(bd2);
System.out.println("减法结果: " + bd3); // 输出: 7.00
// 乘法
bd3 = bd1.multiply(bd2);
System.out.println("乘法结果: " + bd3); // 输出: 30.00
// 除法,指定小数位数和舍入方式
bd3 = bd1.divide(bd2, 2, RoundingMode.HALF_UP); // 四舍五入
System.out.println("除法结果: " + bd3); // 输出: 3.33 (因为结果是3.3333,舍入后变成3.33)
}
}
比较BigDecimal
import java.math.BigDecimal;
public class BigDecimalComparison {
public static void main(String[] args) {
BigDecimal bd1 = new BigDecimal("10.0");
BigDecimal bd2 = new BigDecimal("20.0");
BigDecimal bd3 = new BigDecimal("10.0");
// 使用compareTo方法比较
int result1 = bd1.compareTo(bd2);
int result2 = bd1.compareTo(bd3);
if (result1 < 0) {
System.out.println("bd1小于bd2");
} else if (result1 > 0) {
System.out.println("bd1大于bd2");
} else {
System.out.println("bd1等于bd2");
}
if (result2 == 0) {
System.out.println("bd1等于bd3");
}
}
}
在这个例子中,compareTo
方法返回-1、0或1,分别表示第一个BigDecimal
小于、等于或大于第二个BigDecimal
。
设置小数位数和舍入
BigDecimal允许你设置小数位数并指定舍入模式。
import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalRounding {
public static void main(String[] args) {
BigDecimal bd = new BigDecimal("123.456789");
// 设置小数位数为2,四舍五入
BigDecimal rounded = bd.setScale(2, RoundingMode.HALF_UP);
System.out.println("四舍五入结果: " + rounded); // 输出: 123.46
// 设置小数位数为0,向下取整
rounded = bd.setScale(0, RoundingMode.DOWN);
System.out.println("向下取整结果: " + rounded); // 输出: 123
}
}
在这个例子中,setScale
方法用于设置BigDecimal
的小数位数,而RoundingMode
枚举则用于指定舍入方式。
5.2.2接口
接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
public interface Electronic {
// 常量
String LED = "LED";
// 抽象方法
int getElectricityUse();
// 静态方法
static boolean isEnergyEfficient(String electtronicType) {
return electtronicType.equals(LED);
}
// 默认方法
default void printDescription() {
System.out.println("电子");
}
}
在Java中,有许多常用的接口,其中一些包括:
- List 接口: List 是最常用的接口之一,它表示一个有序的集合,允许重复元素。常见的实现类包括 ArrayList 和 LinkedList。
- Set 接口: Set 表示不允许重复元素的集合,常见的实现类有 HashSet 和 TreeSet。
- Map 接口: Map 表示键值对的集合,每个键最多与一个值相关联。常见的实现类包括 HashMap 和 TreeMap。
- Collection 接口: Collection 是所有集合类的根接口,定义了集合类的基本行为。
- Iterator 接口: Iterator 用于遍历集合中的元素,提供了统一的访问方式,让我们能够在不知道集合具体实现的情况下遍历集合。
- Comparable 接口: Comparable 接口用于实现对象的自然排序,类需要实现 compareTo 方法来定义对象之间的比较规则。
- Comparator 接口: Comparator 接口用于额外定义对象之间的比较规则,可以用于对已有的类进行排序操作。
- Runnable 接口: Runnable 接口用于表示可以由线程执行的任务,通常通过实现 run 方法来定义任务的内容。
5.2.3数组
数组是一种用于存储多个相同类型元素的数据结构。它是一个固定长度的容器,可以通过索引来访问和修改其中的元素。
以下是关于Java数组的一些重要信息:
-
声明和初始化: 声明数组时需要指定数组的类型和名称,例如
int[] numbers;
。初始化数组可以通过以下几种方式:int[] numbers = new int[5];
:创建一个包含 5 个整数的数组,初始值为默认值 0。int[] numbers = {1, 2, 3, 4, 5};
:创建一个包含指定元素的数组。int[] numbers = new int[]{1, 2, 3, 4, 5};
:创建一个包含指定元素的数组,不指定数组长度。
-
访问数组元素: 数组的元素通过索引访问,索引从 0 开始,例如
int firstElement = numbers[0];
。可以使用索引修改数组的元素值。 -
数组长度: 可以使用
array.length
获取数组的长度,例如int length = numbers.length;
。 -
多维数组: Java 中支持多维数组,例如二维数组
int[][] matrix = new int[3][3];
。多维数组可以通过多个索引进行访问,例如int element = matrix[0][0];
。 -
数组遍历: 可以使用循环结构(如 for 循环)遍历数组中的所有元素,例如:
for (int i = 0; i < numbers.length; i++) { System.out.println(numbers[i]); }
-
数组的特性:
- 数组的长度是固定的,一旦创建后无法改变。
- 数组可以存储基本数据类型和对象类型。
- 数组可以作为方法的参数和返回值。
- 数组可以进行排序、搜索等操作。
Java数组是一种常用的数据结构,可以方便地存储和操作多个相同类型的元素。它在各种应用场景中都有广泛的应用。
5.2.4枚举
枚举(Enumeration)是一种特殊的数据类型,用于定义包含固定常量集合的数据类型。枚举类型在Java中由关键字 “enum” 来定义,并且可以包含构造函数、方法和字段。
-
定义枚举: 枚举类型使用 enum 关键字进行定义,例如:
public enum Weekday { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
-
访问枚举常量: 枚举类型中的常量可以通过枚举类型名称直接访问,例如
Weekday.MONDAY
。
5.2.5包装类
Java中的包装类是用于封装基本数据类型的类,使其能够作为引用数据类型使用。Java提供了一系列的包装类,如下所示:
- Boolean:用于封装boolean类型的值,它包含两个常量值TRUE和FALSE。
- Byte:用于封装byte类型的值。
- Short:用于封装short类型的值。
- Integer:用于封装int类型的值。
- Long:用于封装long类型的值。
- Float:用于封装float类型的值。
- Double:用于封装double类型的值。
- Character:用于封装char类型的值。
这些包装类提供了许多方法,以便于对基本数据类型进行操作。例如,Integer类提供了将字符串转换成整数的方法parseInt(),Double类提供了将字符串转换成浮点数的方法parseDouble()等。
六、运算符
6.1算术运算符
自增(自减)运算符:++,–
例:a++:先赋值后运算
int a = 1;
int b = a++;
System.out.print(a);//a=2
System.out.print(b);//b=1
例:++a:先运算后赋值
int a = 1;
int b = ++a;
System.out.print(a);//a=2
System.out.print(b);//b=2
6.2赋值运算符
6.3比较运算符(关系运算符)
注意:
1.>、 < 、 >= 、 <= 只支持左右两边操作数是数值类型
2.== 、 != 两边的操作数既可以是数值类型,也可以是引用类型
3.== 比较基本数据类型时,比较的是值。比较引用数据类型时比较的是地址。
6.4逻辑运算符
“&”和“&&”的区别
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,||表示:当左边为真,右边不参与运算。
6.5位运算符
位运算是直接对整数的二进制进行的运算
示例
移位运算符
左移:"a<<b; "将二进制形式的a逐位左移b位,低位空出的b位补0
带符号右移:"a>>b; "将二进制形式的a逐位右移b位,高位空出的b位补原来的符号位
无符号右移:"a>>>b;"将二进制形式的a逐位右移b位,高位空出的b位补0
技巧
a % b = a & (b-1),b是2的n次幂
10 % 8 = 10 & 7
public static void main(String[] args) {
System.out.println(113 % 8);
System.out.println(113 & 7); }
6.6三元运算符
语法形式:布尔表达式 ? 表达式1:表达式2
布尔表达式为true,运算结果为表达式1。反之,结果为表达式2。
int a = (10>3) ? 5 : 10;//10>3为true,a=5
int a = (10<3) ? 5 : 10;//10<3为false,a=10
6.7扩展-运算符优先级