Java--基础类库

StringBuffer类

面试题:请解释String、StringBuffer、 StringBuilder 的区别?
引出StringBuffer就不得不提String和StringBuilder,首先String不能够修改内容所以有StingBuffer和StringBuilder去修改String数据类型的内容, 而StingBuffer和StringBuilder的功能相同但前者是一个线程安全的,后者是非线程安全的
StringBuffer的使用需要产生一个该类的实例化对象,然后在调用里面的方法去实现String类型数据的修改:

  • 构造方法:public StringBuffer([String str]);
  • 数据追加:public StringBuffer append(数据类型 变量),相当于字符串中的“+”操作
  • 插入数据: public StringBuffer insert(int offset, 数据类型 b)
  • 删除指定范围的数据: public StringBuffer delete(int start, int end)
  • 字符串内容反转: public StringBuffer reverse()
public class JavaAPIDemo {
	public static void main(String[] args) {
		StringBuffer buf = new StringBuffer() ;
		buf.append("Hello World !").delete(6, 12).insert(6,"csdn");//程序先添加了“Hello World !”删除了“World”然后在插入了“csdn”
		System.out.println(buf.reverse());//字符串翻转
	}
}输出结果为:“! ndcs olleH”

CharSequence接口

字符串在Java中描述的公共类型就是CharSequence,上面的StingBuffer和StringBuilder的构造方法都可以接收该接口,它们的方法也可以接收该接口,只要有字符串就可以为该接口实例化
这个接口也提供有几个方法:

  • 获取指定索引字符: public char charAt(int index);。
  • 获取字符串的长度: public int length();
  • 截取部分字符串: public CharSequence subSequence(int start, int end);
public class JavaAPIDemo {
	public static void main(String[] args) {
		CharSequence str = "wWw.csdn.cn" ; // 子类实例向父接口转型
		CharSequence sub = str.subSequence(4, 8) ;
		System. out. println(sub);
	}   输出为“csdn”
}

AutoCloseable接口

该接口主要是用于资源开发的处理上以实现资源的自动关闭,它的使用要与异常处理配合使用

public class JavaAPIDemo {
	public static void main(String[] args) throws Exception {
		try (IMessage nm = new NetMessage( "Www . mldn.cn")) {
			nm.send();//会自动调用close方法
		} catch (Exception e) {}
	}
}
interface IMessage implements AutoCloseable{
	public void send() ; // 消息发送
}
class NetMessage implements IMessage{ // 实现消息的处理机制
	private String msg ;
	public NetMessage(String msg) {
		this.msg = msg ;
	}
	public boolean open() { //获取资源连接
		System. out. println(" [OPEN]获取消息发送连接资源。");
		return true ;
	}
	@Override
	public void send() {
		if (this.open()) {
			System. out . println("[***发送消息***]" + this.msg);
		}
	}
	public boolean close() throws Exception{ //获取资源连接
		System. out. println(" [CLOSE]关闭消息发送通道。");
	}

Runtime类

描述的运行时的状态,由于在最每一个JVM进程里面只允许提供有一个Runtime类的对象所以这个类的构造方法被私有化了,使用的单例设计模式,提供了一个static方法去调用构造方法
在这里插入图片描述

  • 获取实例化对象: public static Runtime getRuntime();
  • 通过这个类中的==availableProcessors()==方法可以获取本机的CPU内核数
    在Runtime类中提供有四个重要方法
  • 获取最大可用内存空间: public long maxMemory();默认的配置为本机系统内存的1/4;.
  • 获取可用内存空间: public long totalMemory();默认的配置为本机系统内存的1/64;
  • 获取空闲内存空间: public long freeMemory();。
  • 手工进行GC处理: public void gc()
public class JavaAPIDemo {
	public static void main(String[] args) throws Exception {
		Runtime run = Runtime . getRuntime() ; // 获取实例化对象
		System. out . println(" [1] MAX_ _MEMORY: " + run. maxMemory());
		System. out . println(" [1] TOTAL_ MEMORY: "+ run. totalMemory());
		System. out . println(" [1] FREE_ MEMORY: " + run. freeMemory());
		String str = ""
		for (int x =0; x<30000 ; x ++) {
			str += X ; //产生大量的垃圾空间
		}
		System. out . println(" [2] MAX_ _MEMORY: "+ run. maxMemory());
		System. out . println(" [2] TOTAL_ MEMORY: "+ run. totalMemory());
		System. out . println(" [2] FREE_ MEMORY: " + run. freeMemory());
		Thread.sleep(2000);
		run.gc();
		System. out . println(" [3] MAX_ _MEMORY: "+ run. maxMemory());
		System. out . println(" [3] TOTAL_ MEMORY: "+ run. totalMemory());
		System. out . println(" [3] FREE_ MEMORY: " + run. freeMemory());
}

面试题:请问什么是GC?如何处理?
GC (Garbage Collector) 垃圾收集器,是可以由系统自动调用的垃圾释放功能,或者使用Runtime类中的gc()手工调用

System类

该类除了定义的输出方法外,还有其它的方法:

  • 数组拷贝: public static void arraycopy(Object src, int srcPos, Object dest,int destPos, int length)
  • 获取当前的日期时间数值: public static long current TimeMillis( ); .
  • 进行垃圾回收: public static void gc();其实是runtime里面的gc方法
public class JavaAPIDemo {
	public static void main(String[] args) throws Exception {
		long start = System. currentTimeMillis() ;
		Runtime run = Runtime . getRuntime() ; //获取实例化对象
		String str ="";
		for(int x=0;x<30000;x++){
			str += x ; //产生大量的垃圾空间
		}
		long end = System. currentTimeMillis() ;
		System. out. println( "操作耗时:+ (end - start));
	}
}

Cleaner类

这是一个对象清理的操作,其主要的功能是进行finialize()方法的替代
finialize()方法在JDK1.9之前可以使用,在之后就不再建议使用

class Member {
	public Member() {
		System. out . println(" [构造]在-个雷电交加的日子里面,csdn诞生了。");
	}
	@Override
	protected void finalize() throws Throwable {
		System. out . println(" [回收]最终你定要死的。");
		throw new Exception( "我还要再活500年...") ;
	}
}
public class JavaAPIDemo {
	public static void main(String[] args) throws Exceptiδn {
		Member mem = new Member() ; // 诞生
		mem = null ; //成为垃圾
		System.gc();
}

在JDK1.9之后使用java. lang. ref.Cleaner 类进行回收处理( Cleaner类也支持有AutoCloseable处理)

class Member implements Runnable {
	public Member() {
		System. out. println(" [构造]在一一个雷电交加的日子里面,csdn诞生了。");
	}
	@Override
	public void run() { // 执行清除的时候执行的是此操作
		System. out. println(" [回收]最终你定要死的。");
	}
}
class MemberCleaning implements AutoCloseable { //实现清除的处理
	private static final Cleaner cleaner = Cleaner.create() ; //创建一个清除处理
	private Member member ;
	private Cleaner.Cleanable cleanable
	public MemberCleaning() {
		this. member = new Member() ; // 创建新对象
		this.cleanable = this.cleaner.register(this, this.member);//注册使用的对象
	}
	@Override
	public void close() throws Exception {
		this. cleanable.clean(); //启动一个单独的线程去启动清除
	}
}
public class JavaAPIDemo {
	public static void main(String[] args) throws Exception {
		try (MemberCleaning mc = new MemberCleaning()){
			//中间可以执行-些相关的代码
		} catch (Exception e) {}
	}
}

对象克隆

所谓的对象克隆指的就是对象的复制,而且属于全新的复制。即:使用已有对象内容创建一个新的对象,如果要想进行对象克隆需要使用到Object类中提供的==clone()==方法: protected Object clone() throws CloneNotSupportedException;
所有的类都会继承Object父类,所以所有的类都一定会有clone()方法,但是并不是所有的类都希望被克隆。所以如果要想实现对象克隆,那么对象所在的类需要实现一个Cloneable接口,此接口并没有任何的方法提供,是因为它描述的是一 种能力。

public class JavaAPIDemo {
	public static void main(String[] args) throws Exception {
		Member memberA = new Member("csdn" ,30) ;
 		Member memberB = (Member) memberA.clone() ;
		System.out.println(memberA) ;
		System.out.println(memberB) ;
	}
}
class Member implements Cloneable {
	private String name ;
	private int age ;
	public Member(String name,int age) {
		this.name = name ;
		this.age = age ;
	}
	@Override
	public String toString() {
		return "[" + super. toString() + "]name = " + this.name + "、age = " + this.age ;
	}
	@Override
	protected object clone() throws CloneNotSupportedException {
		return super.clone(); // 调用父类中提供的clone()方法
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
此工具我不再更新,里面大多数方法我迁移到了hutool工具包中,而其中一些不常用的功能被遗弃,项目暂留做为以后参考。 common-tools 一、数据工具类 1、com.baijob.commonTools.db.ds C3p0Ds 和 DruidDs分别是两种连接池的实现,依赖于数据配置文件,配置文件的样例参考config/db-example.setting 使用时将db-example.setting复制于${classpath}/config/db.setting,按照配置文件中的说明替换相应值 如果使用Druid,则需参考druid-example.setting创建${classpath}/config/druid.setting文件,详情请参考官方文档 使用C3P0则需要参考c3p0-config-example.xml创建${classpath}/c3p0-config.xml来调节C3P0参数 此时即可调用C3p0Ds.getDataSource()或DruidDs.getDataSource()方法获得默认的数据源 如果要自定义数据配置文件的参数,请调用相应的init(),传入相关参数 注:Setting对象请参考与之对应的章节 2、com.baijob.commonTools.db.DbUtil 数据工具类,提供了关闭方法:关闭可以传入多个参数,关闭的顺序是按照参数的顺序来的,用于一次性关闭Connnection、Statement、ResultSet等 newSqlRunner方法用于快速新建一个SqlRunner(此类介绍参考下问) 3、com.baijob.commonTools.db.DsSetting,用于读取db.setting文件辅助类,内部使用 4、com.baijob.commonTools.db.SqlRunner类参考Apache的DbUtils工具包,封装了常用的增删改查方法,与com.baijob.commonTools.db.RsHandler配合使用 com.baijob.commonTools.db.RsHandler接口与Apache的DbUtils的ResultSetHandler等价,抽象结果集处理。 二、邮件工具类 1、com.baijob.commonTools.mail.MailAccount 邮件账户类。 可以调用MailAccount(String accountSettingFileBaseClassLoader)读取相对路径的Setting文件,配置参考mailAccount-example.setting 2、com.baijob.commonTools.mail.MailUtil邮件发送工具类,方法请参考注释 此工具类依赖javax.mail,请参考pom.xml添加依赖或手动下载 三、网络相关工具类 1、com.baijob.commonTools.net.AccessControl访问控制,基于配置文件,可以设定IP白名单或黑名单,可以通过配置文件实现简单的账户验证。 配置文件请参考access-example.xml 2、com.baijob.commonTools.net.Connector 连接对象实体类,有host、端口、用户名、密码等属性 3、com.baijob.commonTools.net.HtmlUtil HTML工具类,暂时只提供特殊字符转义 4、com.baijob.commonTools.net.SocketUtil socket工具类。 isUsableLocalPort() 检测本地某个端口是否可用(可用是指没有被其他程序占用) isValidPort()是否是符合规范的端口号 longToIpv4()将long转换为ipv4地址,反方法是ipv4ToLong() netCat()简易的数据发送方法 5、com.baijob.commonTools.net.SSHUtil SSH相关工具类 getSession()获得一个SSH会话 bindPort()将远程主机的端口映射到本地某个端口 6、com.baijob.commonTools.net.URLUtil 将相对、绝对路径转换为URL对象,用于网络或文件流的读写,Setting的配置依赖此工具包 四、线程相关工具类 1、com.baijob.commonTools.thread.BaseRunnable 此类实现了Runnable接口,扩展了功能。 增加名称、ID,调用次数和时间统计、线程停止接口等,并且在线程运行时,不允许此线程第二次启动。 2、com.baijob.commonTools.thread.Executor 线程池工具类 调用静态方法execute()启动线程,此线程在公共的线程池中执行 若想自定义线程池大小或独立控制,可调用newExecutor()实例化一个线程池 excAsync()执行一个异步方法 3、com.baijob.commonTools.thread.SyncQueue 阻塞队列,简化了JDK的BlockingQueue

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值