目录
一,方法
在Java中,方法是执行特定任务的一组相关语句的集合。它允许将代码组织成模块化的块,每个块执行一个具体的任务。方法是面向对象编程中的重要概念,它们是类的一部分,可以被对象调用来执行操作或获取数据。
Java方法的基本组成部分:
- 修饰符:指定方法的访问级别,例如public、private、protected或default(没有明确声明修饰符时,默认为包私有)。
- 返回类型:方法执行后返回给调用者的数据类型。如果方法不返回任何值,则使用void。
- 方法名:遵循Java命名规则,通常首字母小写,后续单词首字母大写(camelCase)。
- 参数列表:括号内的列表,其中包含传递给方法的值的类型和名称。多个参数之间用逗号分隔。
- 方法体:大括号内的代码块,包含了方法要执行的操作。
修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...
return 返回值;
}
方法定义示例:
public int addNumbers(int a, int b) {
return a + b;
}
public是修饰符,表示方法可以被任何其他类访问。
int是返回类型,意味着方法将返回一个整数值。
addNumbers是方法名。
(int a, int b)是参数列表,表示方法接受两个整数作为输入。
方法体包含了一个return语句,它返回a和b的和。
方法的调用:
一旦方法被定义,就可以在程序的其他部分通过其名称和适当的参数来调用它:
int result = addNumbers(5, 3);
System.out.println(result); // 输出 8
方法的分类:
根据访问修饰符分类:
- Public - 公共方法,可以从任何地方访问。
- Private - 私有方法,只能在定义它的类内部访问。
- Protected - 受保护方法,可以在同一包内或者子类中访问。
- Default (没有显式修饰符) - 默认访问级别,仅在同一包内可见。
根据是否需要对象分类:
- Instance Methods - 实例方法,需要对象实例才能调用。
- Static Methods - 静态方法,不需要对象实例即可调用,直接通过类名调用。
根据是否有返回值分类:
- Methods with Return Type - 有返回值的方法,如int, String, double等。
- Void Methods - 无返回值的方法,使用void关键字声明。
根据参数传递方式分类:
- Value Passing - 值传递,传入的是变量的值的副本。
- Reference Passing - 引用传递,传入的是对象的引用,因此方法内部对对象的修改会影响到原始对象。
根据是否实现接口方法分类:
- Implemented Methods - 实现了接口中声明的方法。
- Abstract Methods - 抽象方法,只在抽象类中声明,没有具体实现,必须在子类中实现。
根据方法重载和重写分类:
- Overloaded Methods - 重载方法,在同一个类中有相同的名字但参数列表不同。
- Overridden Methods - 重写方法,子类中重新实现父类的方法。
根据是否可变分类:
- Immutable Methods - 不可变方法,不会改变对象状态。
- Mutable Methods - 可变方法,可能改变对象状态。
根据是否同步分类:
- Synchronized Methods - 同步方法,确保线程安全,一次只有一个线程可以执行。
- Non-synchronized Methods - 非同步方法,允许多个线程同时执行。
方法的重载:
定义:一个类的两个方法拥有相同的名字,但是有不同的参数列表。
- Java编译器根据方法签名判断哪个方法应该被调用。
- 方法重载可以让程序更清晰易读。执行密切相关任务的方法应该使用相同的名字。
- 重载的方法必须拥有不同的参数列表。
- 你不能仅仅依据修饰符或者返回类型的不同来重载方法。
作用:减轻调用者的负担
示例:
public class Calculator { /** * 计算两个整数的和。 * * @param a 第一个整数。 * @param b 第二个整数。 * @return 返回两个整数的和。 */ public int add(int a, int b) { return a + b; } /** * 计算三个整数的和。 * * @param a 第一个整数。 * @param b 第二个整数。 * @param c 第三个整数。 * @return 返回三个整数的和。 */ public int add(int a, int b, int c) { return a + b + c; } /** * 计算两个浮点数的和。 * * @param a 第一个浮点数。 * @param b 第二个浮点数。 * @return 返回两个浮点数的和。 */ public double add(double a, double b) { return a + b; } }
调用:
public class Main { public static void main(String[] args) { Calculator calculator = new Calculator(); int sum1 = calculator.add(10, 20); // 调用第一个add方法 int sum2 = calculator.add(10, 20, 30); // 调用第二个add方法 double sum3 = calculator.add(10.5, 20.3); // 调用第三个add方法 System.out.println("Sum of two integers: " + sum1); System.out.println("Sum of three integers: " + sum2); System.out.println("Sum of two doubles: " + sum3); } }
*补充理解主要介绍四种方法:
无参数无返回值的方法:
格式:
格式: public static void 方法名(){ 方法体; } 调用: 方法名();
示例:
public void sayHello() { System.out.println("Hello!"); }
调用:
myObject.sayHello(); // 输出 "Hello!"
有参数无返回值方法:
适用场景:有参数但无返回值的方法通常用于执行某些操作,比如打印信息、更新对象的状态等
格式:
格式: public static void 方法名(参数列表){ 方法体; } 调用: 方法名(参数);
示例:
public class PersonInfoPrinter { /** * 打印一个人的名字和年龄。 * @param name 人的名字。 * @param age 人的年龄。 */ public void printPersonInfo(String name, int age) { System.out.println("Name: " + name); System.out.println("Age: " + age); } }
调用:
public class Main { public static void main(String[] args) { PersonInfoPrinter printer = new PersonInfoPrinter(); printer.printPersonInfo("Alice", 30); } }
无参数有返回值方法:
适用场景:无参数且有返回值的方法可以用于执行某些计算或操作,并返回一个结果。
格式:
public class ClassName { public ReturnType methodName() { // 方法体:执行的逻辑和计算 // ... // 返回计算结果 return result; } }
示例:
import java.util.Random; public class RandomNumberGenerator { /** * 生成并返回一个1到10之间的随机整数。 * @return 返回一个随机整数。 */ public int generateRandomNumber() { Random random = new Random(); return random.nextInt(10) + 1; // 生成1到10的随机数 } }
调用:
public class Main { public static void main(String[] args) { RandomNumberGenerator generator = new RandomNumberGenerator(); int randomNumber = generator.generateRandomNumber(); System.out.println("生成的随机数为: " + randomNumber); } }
有参数有返回值方法:
适用场景:有参数且有返回值的方法可以接收输入并基于这些输入执行某些操作,最终返回一个结果。
格式:
public class ClassName { public ReturnType methodName() { // 方法体:执行的逻辑和计算 // ... // 返回计算结果 return result; } }
示例:
public class Calculator { /** * 计算两个整数的乘积。 * * @param a 第一个整数。 * @param b 第二个整数。 * @return 返回两个整数的乘积。 */ public int multiply(int a, int b) { return a * b; } }
调用:
public class Main { public static void main(String[] args) { Calculator calculator = new Calculator(); int product = calculator.multiply(10, 5); System.out.println("结果为: " + product); } }
二,Stream,File,IO
Java中的流(Stream)、文件(File)和输入输出(IO)操作是进行文件读写、网络通信、数据处理等任务的基础。这些功能提供了丰富的API,用于处理数据的读取、写入以及流式处理。
文件(File)
java.io.File类用于封装文件和目录路径名的抽象表示形式。它可以用来创建、删除文件,获取文件属性,列出目录下的文件等。
示例:如何使用java.io.File类来检查文件是否存在,如果不存在,则尝试创建一个新的文件。
import java.io.File;
public class FileDemo {
public static void main(String[] args) {
//创建File对象:
File file = new File("example.txt");
//检查文件是否存在:
if (file.exists()) {
System.out.println("File exists.");
}
//创建新文件:
else {
try {
if (file.createNewFile()) {
System.out.println("File created.");
} else {
System.out.println("Failed to create file.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
输入输出流(IO)
Java IO主要分为两大类:字节流和字符流。
字节流适用于所有类型的数据,而字符流适用于文本数据。
字节流
- InputStream和OutputStream是所有字节流的基类。
- FileInputStream和FileOutputStream用于读写文件。
- BufferedInputStream和BufferedOutputStream增加了缓冲区,提高读写效率。
- PipedInputStream和PipedOutputStream用于线程间通信。
字符流
- Reader和Writer是所有字符流的基类。
- FileReader和FileWriter用于读写文本文件。
- BufferedReader和BufferedWriter提供了带缓冲的字符流。
Java 8 Stream API
Java 8引入了Stream API,它提供了一种更高效、更易于理解的方式来处理集合数据。Stream API支持函数式编程风格,可以进行过滤、映射、归约等操作。
示例:
import java.util.Arrays; import java.util.List; public class StreamExample { public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); long count = numbers.stream() .filter(n -> n % 2 == 0) .mapToInt(Integer::intValue) .average() .orElse(0); System.out.println("平均值为: " + count); } }
三,异常处理
异常处理是Java中一个关键的概念,用于处理程序执行过程中可能出现的错误或异常情况。Java的异常处理机制主要包括以下几个核心组成部分:
异常继承体系:
Throwable(类):
Error(类): 严重的错误(程序员无法通过修改代码解决)
xxxError:
xxxError:
...
Exception(类): 因为程序员代码书写的问题,导致异常的出现
xxxException:
xxxException:
...
1.异常类(Exception Class):Java中的异常通常是由Throwable类及其子类表示的。Throwable有两个主要的子类:Error和Exception。Error表示程序无法处理的情况,如虚拟机错误或系统错误,通常不建议捕获。Exception表示程序可以处理的异常,进一步分为RuntimeException(运行时异常)和Checked Exception(编译异常)。
2.try-catch-finally:这是Java中处理异常的基本结构。
- try:包含可能抛出异常的代码块。
- catch:用于捕获并处理try块中抛出的异常。
- finally:无论是否发生异常,finally块中的代码都会被执行,常用于释放资源。
try
{
// 程序代码
}catch(ExceptionName e1)
{
//Catch 块
}
3.throws:当一个方法无法处理异常时,可以通过在其签名中声明throws来抛出异常,强制调用者处理这些异常。
4.throw:在方法中手动抛出异常。
四,正则表达式
Java中的正则表达式是通过java.util.regex包提供的工具类实现的,主要包括Pattern和Matcher类。
作用:正则表达式是一种强大的文本处理工具,能够帮助你在字符串中查找、替换或验证复杂的文本模式。
基本概念
- Pattern:编译后的正则表达式模式对象,它是不可变的。
- Matcher:用于执行正则表达式的匹配操作的对象,它是可变的,可以多次重用。
常用方法
- Pattern.compile(regex):将正则表达式字符串编译为Pattern对象。
- Pattern.matcher(input):为给定的输入字符串创建一个Matcher对象。
- Matcher.find():查找输入字符串中下一个匹配的子串。
- Matcher.group():返回上一次匹配的子串。
- Matcher.replaceAll(replacement):替换所有匹配的子串。
- Matcher.replaceFirst(replacement):替换第一个匹配的子串。
首要了解:
在其他语言中,\\ 表示:如果在正则表达式中插入一个普通的(字面上的)反斜杠,请不要给它任何特殊的意义。
在 Java 中,\\ 表示:我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。
所以,在其他的语言中,一个反斜杠 \ 就足以具有转义的作用,而在 Java 中正则表达式中则需要有两个反斜杠才能被解析为其他语言中的转义作用。
System.out.print("\\"); // 输出为 \
System.out.print("\\\\"); // 输出为 \\
正则表达式语法(部分):
- .:匹配任意单个字符(除了换行符)。
- ^:匹配输入字符串的开始位置。
- $:匹配输入字符串的结束位置。
- *:匹配前面的子表达式零次或多次。
- +:匹配前面的子表达式一次或多次。
- ?:匹配前面的子表达式零次或一次。
- {m,n}:匹配前面的子表达式至少m次,至多n次。
- []:字符集,匹配所包含的任意一个字符。
- ():分组,可以将多个字符视为一个整体。
- |:选择,匹配左边或右边的表达式。
- \b:单词边界。
- \d:数字字符。
- \D:非数字字符。
- \w:字母或数字字符。
- \W:非字母或数字字符。
- \s:空白字符。
- \S:非空白字符。
注意事项
- 正则表达式可以变得非常复杂,使用时要确保它们正确无误.
- 在使用正则表达式时,考虑使用预编译的对象,以提高性能,尤其是在循环中重复使用相同的正则表达式时。