嵌套类型与实用工具类解析
嵌套类型概念
定义:在某个类的作用域内完整定义的类结构
package com.object.demo01;
public class Body {
private String name;
class Header{
//嵌套类会生成独立字节码文件
//为外部类提供功能模块支持
public void display() {
System.out.println(name); //可直接访问外部类私有成员,保持封装特性
}
}
}
实例嵌套类
package com.object.demo02;
//外围类
public class Outer {
//对象属性
private String name = "张三";
private int age = 18;
//实例级嵌套类
class Inner {
private String address = "北京";
private String phone = "110";
private String name = "李四";
//允许定义静态常量
private static final int scores = 86;
public void display() {
//访问外围类属性
System.out.println(name); //同名属性优先访问内部成员
System.out.println(Outer.this.name);
System.out.println(age);
//访问内部属性
System.out.println(this.address);
System.out.println(this.phone);
}
}
}
package com.object.demo02;
public class TestOuter {
public static void main(String[] args) {
//实例嵌套类需依赖外围类实例
Outer.Inner inner = new Outer().new Inner();
inner.display();
}
}
静态嵌套类
不依赖外围类实例,可直接实例化,支持静态成员
package com.object.demo03;
//外围类
public class Outer {
private String name = "xxx";
private int age = 18;
//静态嵌套类
static class Inner {
private String address = "上海";
private String phone = "110";
//静态成员
private static int count = 10000;
public void display() {
//访问外围类属性需实例化
Outer outer = new Outer();
System.out.println(outer.name);
System.out.println(outer.age);
//访问内部属性
System.out.println(this.address);
System.out.println(this.phone);
//访问静态属性
System.out.println(Inner.count);
}
}
}
package com.object.demo03;
public class Test {
public static void main(String[] args) {
//直接实例化静态嵌套类
Outer.Inner inner = new Outer.Inner();
inner.display();
}
}
方法局部嵌套类
定义在方法作用域内,仅限当前方法使用
package com.object.demo04;
public class Outer {
private String name = "张三";
private int age = 18;
public void show() {
//方法局部常量
final String address = "深圳";
//方法内部类
class Inner {
private String phone = "110";
private String email = "111@qq.com";
public void showInner() {
//访问外围类属性
System.out.println(Outer.this.name);
System.out.println(Outer.this.age);
//访问内部属性
System.out.println(this.phone);
System.out.println(this.email);
//访问局部常量
System.out.println(address);
}
}
//实例化局部类
Inner inner = new Inner();
inner.showInner();
}
}
匿名嵌套类
- 无显式类名的局部类
- 需继承父类或实现接口
- 优点:代码简洁
- 缺点:可读性降低
package com.object.demo05;
//USB接口规范
public interface USB {
void service();
}
package com.object.demo05;
public class Test {
public static void main(String[] args) {
//匿名类实现
USB device = new USB() {
@Override
public void service() {
System.out.println("USB设备已连接");
}
};
device.service();
}
}
核心工具类
Object基类
位于java.lang包,所有类的超类
类型检查方法
返回运行时类信息
Student s1 = new Student("Tom", 20);
Student s2 = new Student("Jerry", 22);
Class cls1 = s1.getClass();
Class cls2 = s2.getClass();
System.out.println(cls1 == cls2); // true
哈希编码方法
基于对象地址生成唯一标识
Student s1 = new Student("Tom", 20);
Student s2 = new Student("Jerry", 22);
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
Student s3 = s1;
System.out.println(s3.hashCode()); // 与s1相同
字符串表示方法
可重写实现定制输出
@Override
public String toString() {
return "Student{name=" + name + ", age=" + age + "}";
}
对象等价判断
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (obj instanceof Student) {
Student s = (Student) obj;
return this.name.equals(s.name) && this.age == s.age;
}
return false;
}
资源回收机制
@Override
protected void finalize() {
System.out.println(name + "对象被回收");
}
数值包装类
基本类型 | 包装类型 |
---|---|
boolean | Boolean |
byte | Byte |
char | Character |
int | Integer |
long | Long |
float | Float |
double | Double |
#### 类型转换示例 |
// 装箱操作
Integer numObj = Integer.valueOf(100);
// 拆箱操作
int primitiveNum = numObj.intValue();
// 字符串转换
String numStr = "123";
int parsedNum = Integer.parseInt(numStr);
整数缓存机制
Integer a = 127;
Integer b = 127;
System.out.println(a == b); // true
Integer c = 200;
Integer d = 200;
System.out.println(c == d); // false
字符串处理
不可变特性
String str = "hello";
str = str.concat(" world"); // 创建新对象
常用操作方法
// 长度与字符获取
"Java".length(); // 4
"Java".charAt(0); // 'J'
// 子串查找
"Hello Java".indexOf("Java"); // 6
// 大小写转换
"Java".toUpperCase(); // "JAVA"
// 分割处理
String[] words = "a,b,c".split(",");
可变字符串工具
StringBuilder builder = new StringBuilder();
builder.append("Java");
builder.insert(0, "Hello ");
builder.reverse();
System.out.println(builder); // avaJ olleH
精确数值计算
BigDecimal d1 = new BigDecimal("1.0");
BigDecimal d2 = new BigDecimal("0.9");
System.out.println(d1.subtract(d2)); // 0.1
日期时间处理
// 日期格式化
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date now = new Date();
String formatted = sdf.format(now);
// 日历操作
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, 1);
系统工具方法
// 数组复制
System.arraycopy(src, 0, dest, 0, length);
// 时间戳
long timestamp = System.currentTimeMillis();
// 资源回收
System.gc();
相关文章
暂无评论...