11.2 Runtime 类(血干JAVA系列)

R u n t i m e 类 是 J a v a 中 与 运 行 时 环 境 有 关 的 操 作 类 , 1.利 用 此 类 可 以 取 得 系 统 的 内 存 信 息 ,也 可以2.利用此类产生新的操作系统进程对象。下面具体介绍Runtime类的使用.

11.2.1 认识 Runtime 类

在这里插入图片描述
在这里插入图片描述

11.2.2得到JVM的内存空间信息

【例11.10】观察JVM的内存空间

package jiaqi;

public class demo310_1 {

	public static void main(String[] args) 
	{
		Runtime run = Runtime.getRuntime();
		System.out.println("最大:"+run.maxMemory());
		System.out.println("空闲:"+run.freeMemory());
		String str = "{}{}{}";
		for(int i = 0; i<1000;i++)
		{
			str+=i;
		}
		System.out.println("执行后空闲:"+run.freeMemory());
		run.gc();
		System.out.println("gc后:"+run.freeMemory());
	}
}

在这里插入图片描述

11.2.3 Runtime 类与 Process 类

【例11.11】调用本机可执行程序

package jiaqi;

public class demo310_1 {

	public static void main(String[] args) 
	{
		Runtime run = Runtime.getRuntime();
		try
		{
			run.exec("notepad.exe");
		} 
		catch (Exception e) 
		{
			e.printStackTrace();
		}
	}
}

在这里插入图片描述
程序执行后,一个记事本程序会直接弹出来。
当然,也可以对此程序进行进一步的控制。
例如,可以在5s之后让记事本关闭,那么此时就需要观察exec()方法的返回值类。此方法的返回值为Process,表示一个操作系统的进程类。实际上,如果一个记事本程序启动后,肯定会在操作系统中增加一个进程,此过程可以直接通过Windows的任务管理器查看。

也就是说,直接控制Process就可以进行系统进程的控制,如果现在要想通过程序让此进程消失,则可以直接使用Process类中的以下方法。

public void destroy()

【例11.12】让记事本进程运行5s后消失

package jiaqi;

public class demo310_1 {

	public static void main(String[] args) 
	{
		Runtime run = Runtime.getRuntime();
		Process pro = null;
		try
		{
			pro = run.exec("notepad.exe");
		} 
		catch (Exception e) 
		{
			e.printStackTrace();
		}
		
		try 
		{
			Thread.sleep(5000);
		} 
		catch (Exception e)
		{
			e.printStackTrace();
		}
		
		pro.destroy();
		
	}
}
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 11.2题要求我们实现一个简单的Java,该可以将一个字符串中的所有单词首字母大写,并返回处理后的字符串。 我们可以先定义一个名为StringUtils的,其中包含一个名为capitalize的静态方法,该方法接受一个字符串参数,返回处理后的字符串。 在capitalize方法中,我们可以使用Java的正则表达式来匹配字符串中的单词,并将每个单词的首字母转换为大写。具体实现可以参考以下代码: ``` import java.util.regex.Matcher; import java.util.regex.Pattern; public class StringUtils { public static String capitalize(String str) { Pattern pattern = Pattern.compile("\\b\\w"); Matcher matcher = pattern.matcher(str); StringBuffer sb = new StringBuffer(); while (matcher.find()) { matcher.appendReplacement(sb, matcher.group().toUpperCase()); } matcher.appendTail(sb); return sb.toString(); } } ``` 在上述代码中,我们首先使用Pattern.compile方法创建一个正则表达式模式,该模式可以匹配字符串中的单词首字母。然后使用Matcher的find方法来查找字符串中的匹配项,并使用appendReplacement方法将每个匹配项替换为大写字母。最后使用appendTail方法将剩余的字符串添加到结果中,并返回处理后的字符串。 使用该的示例代码如下: ``` public class Main { public static void main(String[] args) { String str = "hello world"; String result = StringUtils.capitalize(str); System.out.println(result); // 输出 "Hello World" } } ``` 在上述示例代码中,我们首先定义一个字符串变量str,然后调用StringUtils的capitalize方法将字符串中的单词首字母大写,并将结果保存到result变量中。最后输出result变量的值,即可看到处理后的字符串。 ### 回答2: 本题主要是要求对Java的网络编程结构和Java提供的网络编程接口进行概述和总结,并且深入探讨Java Socket的使用。 Java的网络编程结构包含两个主要部分:网络协议和Java网络编程API。Java提供了丰富的库和接口,用于实现各种网络协议及传输层协议(TCP/IP),包括Socket、ServerSocket、DatagramSocket等。它们都继承自java.net包中的抽象,实现了一系列的方法和属性,实现了数据传输的功能。 Java提供了Socket来实现客户端和服务器之间的数据传输。Socket是一个封装了传输层的TCP/IP协议的,它提供了Socket的各种操作方法和Socket的各种配置选项。Socket的构造函数有两种方式:一种是提供ip地址和端口号,另一种是提供已经获取该服务器地址的InetAddress对象和端口号。在Socket中,可以通过getInputStream()和getOutputStream()方法获取数据传输的输入和输出流。 Socket不仅可以用于客户端的请求,还可以用于服务端的监听和响应。因此,Java提供了ServerSocket来实现服务端的Socket创建。ServerSocket监听指定端口号上的客户端请求,并且收到请求后会调用accept()方法,创建一个新的Socket连接来处理请求。ServerSocket的accept()方法在没有请求时会一直阻塞等待。这样就可以实现无限循环监听客户端请求。 当Java Socket传输数据时,通常要使用一些协议,比如HTTP协议、SMTP协议和FTP协议等。Java提供了很多和接口来处理这些协议,比如java.net.URLjava.net.URLUpdatejava.net.URLConnection等。这些和接口都可以方便地完成网络通信所需要的各种操作。 总之,Java网络编程是非常重要的,可以实现各种通信方式,并且提供了许多工具和接口可供使用。SocketJava网络编程中最重要的之一,它可以实现客户端和服务器之间的数据传输,而ServerSocket可以实现服务端的Socket创建和连接处理。无论是何种情况,Java网络编程都是非常重要的一部分。 ### 回答3: 本题主要是关于Java线程的控制和同步问题。在11.2题中,我们需要编写一个程序来模拟生产者/消费者模型。其中生产者生产苹果,消费者消费苹果,一共有10个苹果,生产者只有在框案上还有空位可以放苹果的时候才能生产,消费者只有在框案上还有苹果的时候才能消费。 首先,需要定义一个线程安全的框子,其中包含框案的状态(装有多少苹果)和状态的读写接口(取苹果,放苹果)方法。这里可以使用synchronized关键字来解决同步问题,确保每个方法在运行时只能被单个线程访问。 接着,需要定义一个生产者线程和一个消费者线程,分别使用while循环进行苹果的生产和消费,直到达到预定数量为止。在每次生产和消费之后,需要使用wait()方法来将线程挂起,直到框子上有苹果或空位,防止线程死循环或浪费资源。 最后,在main函数中创建框子对象和生产者、消费者线程对象,并启动生产者线程和消费着线程,等待线程结束即可。 总之,Java线程的控制和同步需要仔细考虑,尤其是在多线程环境中,要避免竞态条件和资源冲突等问题,保证线程安全。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿斯卡码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值