4.1核心库(泛型)

本文介绍了Java泛型的概念,包括泛型的概述、使用方法、泛型接口以及堆内存的理解。泛型提高了代码复用率并确保类型安全,其在编译后会被擦除。堆内存主要用于存储通过new创建的对象,对象的生命周期由垃圾回收机制管理。同时,文章提到了String、StringBuffer和StringBuilder的区别,以及JDK1.8中永久代变为元空间的变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

泛型 概述

  1. 泛型,即“参数化类型”。就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。

使用

泛型类

定义一个泛型类:
public class ClassName<T>{
	private T data;
	public T getData() {
		return data;
	}
	public void setData(T data) {
	this.data = data;
	}
}

泛型接口

public interface IntercaceName<T>{
	T getData();
}
实现接口时,可以选择指定泛型类型,也可以选择不指定, 如下:
指定类型:
public class Interface1 implements IntercaceName<String> {
		private String text;
	@Override
	public String getData() {
	return text;
	}
}
不指定类型:
public class Interface1<T> implements IntercaceName<T> {
private T data;
@Override
public T getData() {
return data;
}
}

## 泛型方法
private static <T> T 方法名(T a, T b) {}

泛型限制类型

1. 在使用泛型时, 可以指定泛型的限定区域 ,
- 例如: 必须是某某类的子类或 某某接口的实现类,格式:
   <T extends 类或接口1 & 接口2>

泛型中的通配符 ?

类型通配符是使用?代替方法具体的类型实参。
1 <? extends Parent> 指定了泛型类型的上届
2 <? super Child> 指定了泛型类型的下届
3 <?> 指定了没有限制的泛型类型

作用
1、 提高代码复用率
2、 泛型中的类型在使用时指定,不需要强制类型转换(类型安全,编译器会检查类型)

在编译之后程序会采取去泛型化的措施。
也就是说Java中的泛型,只在编译阶段有效。
在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦出,并且在对象进入和离开方法的边界处添加
类型检查和类型转换的方法。也就是说,泛型信息不会进入到运行时阶段。

Java内存空间理解
堆:堆主要存放Java在运行过程中new出来的对象,凡是通过new生成的对象都存放在堆中,对于堆中的对象生命周期的管理由Java虚拟机的垃圾回收机制GC进行回收和统一管理。类的非静态成员变量也放在堆区,其中基本数据类型是直接保存值,而复杂类型是保存指向对象的引用,非静态成员变量在类的实例化时开辟空间并且初始化。所以你要知道类的几个时机,加载-连接-初始化-实例化。

jdk1.8 永久代被改为 元空间

String不可变的字符序列 StringBuffer StringBuilder可变的字符序列,都是用来解决拼接字符串的

StringBuffer:是线程同步安全的–一般多线程用

StringBuilder:是线程不同步的,不安全,jdk5才出–一般单线程用(多线程可以自己加锁)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值