Java 编程基础概览:函数
在Java编程中,函数(也称为方法)是代码的基本构建块,用于封装一段特定的逻辑或任务。通过定义和使用函数,可以使代码更加模块化、易于阅读和维护。
Java函数可以分为两大类:内置函数(或称为库函数、API函数)和自定义函数。
本文将带你了解Java中函数的基本概念和用法。
主函数
在Java编程语言中,main函数具有一种特殊而明确的地位,它并不简单地被归类为内置函数或自定义函数。它是Java程序的入口点,当运行一个Java程序时,Java虚拟机(JVM)会主动寻找并调用这个程序中的main方法。因此,main方法承担着启动程序的重任。main方法的签名是固定且不可更改的。它必须被定义为public static void main(String[] args)。
其定义格式为:
public static void main(String[] args)
说明:
- public:表示该函数可以被任何其他类调用。
- static:表示主函数属于类而不是类的实例,因此可以在没有创建对象的情况下调用。
- void:表示主函数没有返回值。
- main:是Java规定的主函数名称,用于标识程序的入口点。
- String[] args:是一个字符串数组,用于接收命令行参数。
以下是一个简单的Java主函数示例,该函数计算两个整数的和并返回结果:
public class Main {
public static void main(String[] args) {
// 调用add函数并输出结果
int result = 5 + 3;
System.out.println("The sum is: " + result);
}
}
1. 内置函数
Java内置函数丰富多样,涵盖了数学计算、字符串处理、数组操作、系统相关功能、对象操作、文件处理、日期和时间处理等多个方面。以下是一些常见的Java内置函数及其所属类:
1.1 Math类
在Java中,Math
类是一个包含用于执行基本数学运算的静态方法的类。这个类位于java.lang
包中,因此在使用时无需显式导入。Math
类提供了广泛的数学常数和函数,可以满足大多数编程需求。
以下是一些Math
类中常用方法的示例和解释:
1.1.1 基本数学运算
Math.abs(int a)
: 返回参数的绝对值。Math.ceil(double a)
: 返回大于或等于参数的最小整数(向上取整)。Math.floor(double a)
: 返回小于或等于参数的最大整数(向下取整)。Math.round(double a)
: 返回最接近参数的整数(四舍五入)。Math.max(int a, int b)
: 返回两个参数中的最大值。Math.min(int a, int b)
: 返回两个参数中的最小值。
1.1.2 三角函数
Math.sin(double a)
: 返回参数(以弧度为单位)的正弦值。Math.cos(double a)
: 返回参数(以弧度为单位)的余弦值。Math.tan(double a)
: 返回参数(以弧度为单位)的正切值。Math.asin(double a)
: 返回参数的反正弦值(结果以弧度表示)。Math.acos(double a)
: 返回参数的反余弦值(结果以弧度表示)。Math.atan(double a)
: 返回参数的反正切值(结果以弧度表示)。
1.1.3 指数和对数函数
Math.exp(double a)
: 返回e的a次幂。Math.log(double a)
: 返回参数的自然对数。Math.log10(double a)
: 返回参数的以10为底的对数。Math.sqrt(double a)
: 返回参数的平方根。
1.1.4. 幂运算
Math.pow(double a, double b)
: 返回a的b次幂。
1.1.5 随机数
Math.random()
: 返回0.0到1.0之间的双精度随机数。
1.1.6 数学常数
Math.PI
: 表示圆周率π的常量,其值大约为3.141592653589793。Math.E
: 表示自然对数的底数e的常量,其值大约为2.718281828459045。
1.1.7 Math函数的使用
使用Math
类的方法非常简单,因为它们都是静态的,所以可以直接通过类名调用,而无需创建Math
类的实例。例如:
public class MathExample {
public static void main(String[] args) {
double number = -5.6;
int absValue = Math.abs(number); // 取绝对值
double roundedValue = Math.round(number); // 四舍五入
double maxValue = Math.max(3, 5); // 取最大值
double sinValue = Math.sin(Math.PI / 2); // 计算正弦值,结果为1.0
double randomValue = Math.random(); // 生成随机数
System.out.println("绝对值: " + absValue);
System.out.println("四舍五入: " + roundedValue);
System.out.println("最大值: " + maxValue);
System.out.println("正弦值: " + sinValue);
System.out.println("随机数: " + randomValue);
}
}
1.2 String类
在Java中,String
类位于java.lang
包中,它是Java编程语言中表示字符串的类。String
类是不可变的,这意味着一旦字符串被创建,它的内容就不能被改变(尽管可以通过创建新的字符串对象来模拟内容的变化)。
以下是String
类的一些关键特性和常用方法:
1.2.1 特性
不可变性:String
对象是不可变的,因此字符串可以被安全地共享而不需要担心被其他代码修改。
字符串池:Java为了提高性能和维护字符串的唯一性,提供了一个字符串池(String Pool)。当使用String
字面量创建一个字符串时,JVM会首先检查字符串池中是否已存在相同的字符串。如果存在,则直接返回该字符串的引用;如果不存在,则在池中创建一个新的字符串对象并返回其引用。
不可继承性:String
类被设计为final类,因此不能被其他类继承。
1.2.2 常用方法
-
构造方法:
String()
:创建一个空字符串。String(String original)
:根据原始字符串创建一个新的字符串。String(char[] value)
:根据字符数组创建一个新的字符串。String(char[] value, int offset, int count)
:根据字符数组的一部分创建一个新的字符串。String(byte[] bytes)
:根据字节数组使用平台默认的字符集解码创建一个新的字符串。String(byte[] bytes, int offset, int length)
:根据字节数组的一部分使用平台默认的字符集解码创建一个新的字符串。String(byte[] bytes, String charsetName)
:根据字节数组和指定的字符集解码创建一个新的字符串。
-
字符串操作:
charAt(int index)
:返回指定索引处的字符。codePointAt(int index)
:返回指定索引处的字符(Unicode代码点)。concat(String str)
:将指定字符串连接到此字符串的末尾。contains(CharSequence s)
:判断此字符串是否包含指定的字符序列。endsWith(String suffix)
:判断此字符串是否以指定的后缀结束。equals(Object anObject)
:比较两个字符串的内容是否相同。equalsIgnoreCase(String anotherString)
:比较两个字符串的内容是否相同,忽略大小写。getBytes()
:使用平台的默认字符集将此String
编码为一系列字节,并将结果存储到一个新的字节数组中。hashCode()
:返回字符串的哈希码。indexOf(String str)
:返回指定子字符串在此字符串中第一次出现处的索引。lastIndexOf(String str)
:返回指定子字符串在此字符串中最后一次出现处的索引。length()
:返回此字符串的长度。matches(String regex)
:判断此字符串是否与给定的正则表达式匹配。replace(CharSequence target, CharSequence replacement)
:将目标子字符串替换为新的子字符串。replaceAll(String regex, String replacement)
:使用给定的replacement替换此字符串所有匹配给定的正则表达式的子字符串。replaceFirst(String regex, String replacement)
:使用给定的replacement替换此字符串匹配给定的正则表达式的第一个子字符串。split(String regex)
:根据给定正则表达式的匹配拆分此字符串。startsWith(String prefix)
:判断此字符串是否以指定的前缀开始。substring(int beginIndex)
:返回一个新的字符串,它是此字符串的一个子字符串。substring(int beginIndex, int endIndex)
:返回此字符串中从beginIndex
(包括)到endIndex
(不包括)之间的子字符串。toLowerCase()
:使用默认语言环境的规则将此String
中的所有字符转换为小写。toUpperCase()
:使用默认语言环境的规则将此String
中的所有字符转换为大写。trim()
:返回一个新的字符串,其值为此字符串,并删除前导和尾随空格。
-
其他方法:
format(String format, Object... args)
:这是一个静态方法,用于创建格式化的字符串。join(CharSequence delimiter, CharSequence... elements)
:这也是一个静态方法,用于将多个字符串使用指定的分隔符连接成一个字符串。intern()
:确保当且仅当当调用intern方法时,字符串常量池中有一个等于此String
对象的字符串时,才将此String
对象添加到字符串常量池中。toCharArray()
:将此字符串转换为一个新的字符数组。valueOf(Object obj)
:这是一个静态方法,返回对象的字符串表示形式。
这些方法和特性使得String
类在Java编程中非常强大和灵活。无论是处理文本数据、格式化输出还是进行字符串匹配和替换,String
类都提供了丰富的功能来满足各种需求。
1.3 Arrays类
Java中的Arrays
类提供了一系列静态方法来操作数组,如排序、搜索、比较、填充和复制等。以下是Arrays
类的一些关键方法和它们的用途:
1.3.1 排序方法
sort(int[] a)
:对整型数组进行升序排序。sort(T[] a)
:对实现了Comparable
接口的对象数组进行升序排序。sort(T[] a, Comparator<? super T> c)
:使用指定的比较器对对象数组进行排序。parallelSort(int[] a)
:使用并行的方式对数组进行排序,适合大规模数据的排序。
1.3.2 搜索方法
binarySearch(int[] a, int key)
:使用二分搜索法在排序的整型数组中搜索指定值,返回索引。如果数组中不存在该元素,则返回一个负数,表示应该插入该元素的位置(以维持数组的有序性)。binarySearch(T[] a, T key)
:在已排序的对象数组中使用二分搜索法查找指定对象。binarySearch(T[] a, T key, Comparator<? super T> c)
:使用指定的比较器在已排序的对象数组中查找指定对象。
1.3.3 比较方法
equals(int[] a, int[] a2)
:比较两个整型数组是否相等。equals(Object[] a, Object[] a2)
:比较两个对象数组是否相等。
1.3.4 填充方法
fill(int[] a, int val)
:用指定的值填充整个整型数组。fill(T[] a, T val)
:用指定的对象填充整个对象数组。
1.3.5 复制方法
copyOf(int[] original, int newLength)
:复制一个数组并调整其长度。如果复制的长度比原数组长,则用默认值(对于对象数组是null
,对于基本类型数组则是该类型的默认值,如0
、false
等)填充新的位置。copyOfRange(int[] original, int from, int to)
:复制指定范围内的数组元素并返回一个新的数组。
1.3.6 其他方法
toString(int[] a)
:返回数组内容的字符串表示形式。asList(T... a)
:将一个数组转换为List
。这个List
是由数组支持的,因此对List
的修改会直接反映到数组上。但需要注意的是,通过这种方式创建的List
是固定大小的,不能添加或删除元素。deepToString(Object[] a)
:返回多维数组内容的字符串表示形式。hashCode(int[] a)
:返回数组的哈希码。
这些方法大大简化了数组的操作,提高了代码的可读性和开发效率。例如,使用Arrays.sort()
可以对数组进行排序,而无需手动编写排序算法;使用Arrays.binarySearch()
可以在已排序的数组中快速查找元素;使用Arrays.copyOf()
和Arrays.copyOfRange()
可以方便地复制数组或数组的一部分。
总的来说,Arrays
类是Java中处理数组的一个非常有用的工具类,它提供了许多实用的静态方法来简化数组的操作。
1.4 System类
在Java编程语言中,System
类是一个至关重要的类,它位于java.lang
包中。这个类被设计为不能被实例化,因为它包含了多个静态字段和方法,用于提供与Java虚拟机(JVM)交互的接口。System
类提供的功能主要涵盖了标准输入、输出、错误输出、运行时环境访问、以及加载文件和库等。
以下是System
类的一些核心功能和方法: