匿名内部类 Math方法 Object Arrays

本文深入探讨Java中的引用数据类型、内部类、Math类、System类和Object类的使用技巧,包括接口和抽象类的参数传递、成员内部类与局部内部类的特点,以及匿名内部类的快速对象创建方法。
1.引用数据作为参数和返回值的问题
类,接口,抽象类其实都是引用数据类型,当他们作为参数和返回值的时候一定传入或返回地址值,再直白一点,就是new一个对象返回,但是接口和抽象类不能直接new,需要创建其子类或者实现类对象才可以.
2.内部类: 定义一个类中的类,我们称之为内部类.
成员内部类:讲一个类定义在另外一个类的成员位置.特点:成员内部类可以使用外部类的东西,甚至私有东西.
class Outer{
				private int number = 10;
				class Inner{
					public void method(){
						sout(number); //可以直接使用外部类的东西,甚至私有的
					}
				}
			}
技巧:成员内部类也是一个类,想要使用其中的东西,就要先构造初始化.
局部内部类:将类定义在另外一个类中的方法.
匿名内部类(重点)
作用:快速创建一个类或者一个接口的子类对象.不用在额外定义一个类了.
格式: new 类|接口(){ 对方法进行重写 }
interface A {   
		void method();
}
//传统方式 重新定义一个类来实现这个接口
publi class AImpl implements(){
		public void methond(){
			sout("!!!!!!!")
		}
}
//创建实现类对象来使用
AImol a = new AImpl();
a.methond();
//匿名内部类方式:
A a = new A (){
		public void methond(){
			sout("=-=");
	}
}

内部类可以使用外部类的所有东西,甚至是私有的东西

3.Math()
1.static double ceil(double number);(向上取整)
2.static double floor(double number);(向下取整)
3.static double pow(double a,double b);(a的b次方)
4.static double abs(double number);(求一个数的绝对值)
4.System
1.static long currentTimeMillis();(获取从1970年1月1日8点整至今过了多少毫秒)
2.static void exit(int status);(为0代表正常终止,非零代表异常终止)
5.object
万类的祖宗,任何类都直接或间接继承object,任何类都可以使用object提供的方法.
6.Arrays
toString(int[] arr);将数组变成字符串打印在控制台上.
sort(int[] arr);对数组进行排序.
### Java匿名函数的使用及示例 #### 匿名函数的概念 Java 中的匿名函数通常指的是通过 Lambda 表达式实现的功能。自 Java 8 起,引入了 Lambda 表达式来简化代码结构并支持函数式编程风格[^3]。 #### 基本语法 Lambda 表达式的通用形式如下: ```java (parameters) -> expression ``` 或者对于多条语句的情况: ```java (parameters) -> { statements; } ``` 其中 `(parameters)` 是输入参数列表,`expression` 或 `{statements}` 是执行的操作部分。 --- #### 方法引用作为特殊形式 除了普通的 Lambda 表达式外,Java 还提供了方法引用的方式,允许更简洁地调用已有的方法。例如,在处理集合时可以直接引用现有类的方法[^1]。 以下是几种常见的方法引用形式及其对应的 Lambda 表达式: | **方法引用** | **等价于 Lambda 表达式** | |-----------------------------|----------------------------------| | `ClassName::staticMethod` | `(args) -> ClassName.staticMethod(args)` | | `object::instanceMethod` | `(args) -> object.instanceMethod(args)` | 这种方法不仅提高了可读性,还减少了冗余代码。 --- #### 示例代码展示 ##### 示例 1:简单的 Lambda 表达式计算平方根 下面是一个基于接口 `Calculator` 的简单实例,演示如何利用 Lambda 表达式替代传统的匿名内部类写法。 ```java public class LambdaDemo { public static void main(String[] args) { // 使用传统方式创建对象 Calculator traditional = new Calculator() { @Override public double sqrt(double d) { return Math.sqrt(d); } }; // 使用 Lambda 表达式代替匿名类 Calculator lambdaVersion = (double d) -> Math.sqrt(d); // 更进一步优化为方法引用 Calculator methodReference = Math::sqrt; System.out.println(traditional.sqrt(9)); // 输出: 3.0 System.out.println(lambdaVersion.sqrt(16)); // 输出: 4.0 System.out.println(methodReference.sqrt(25)); // 输出: 5.0 } } interface Calculator { double sqrt(double d); } ``` 此代码片段展示了三种不同的实现方式:传统匿名类、Lambda 表达式以及方法引用[^2]。 --- ##### 示例 2:对集合进行排序 在实际开发中,经常需要对数据集按特定条件排序。以下是如何借助 Lambda 表达式完成这一任务的例子。 ```java import java.util.Arrays; import java.util.Collections; import java.util.List; public class SortExample { public static void main(String[] args) { List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); // 使用匿名类的传统做法 Collections.sort(names, new java.util.Comparator<String>() { @Override public int compare(String o1, String o2) { return Integer.compare(o1.length(), o2.length()); } }); // 改用 Lambda 表达式 Collections.sort(names, (s1, s2) -> Integer.compare(s1.length(), s2.length())); System.out.println(names); // 按字符串长度升序排列后的结果 } } ``` 上述代码实现了按照字符串长度从小到大重新安排顺序的过程[^4]。 --- #### 总结 通过对以上两个案例的学习可以看出,相比早期版本繁琐复杂的匿名类声明机制而言,采用 Lambda 表达式能够显著提升程序效率与清晰度;而当目标操作恰好匹配某个现成方法签名时,则应优先考虑运用更为精炼优雅的方法引用来达成目的。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值