Java基础:其他对象

本章节主要介绍高级for循环、可变参数、静态导入、System系统类、Runtime运行时类、Date与Calendar类以及Math类。

第一部分:高级for循环(JDK1.5版本新特性)

一、格式

        集合框架中有一个接口:Iterable<T>(可迭代的),该接口是Collection集合的父类,实现这个接口允许对象成为 "foreach" 语句的目标。具体格式如下:

for(数据类型 变量名:被遍历的Collection集合或数组)

{

操作语句;

}

二、与迭代器及普通for循环的区别

1、高级for循环与迭代器的区别

高级for循环只能将集合中的元素取出,不能做添加、删除元素等其他操作;

迭代器除了能遍历集合,还可以进行remove操作,如果是ListIterator,还可以在遍历过程中进行增删操作。

2、高级for与传统for的区别

高级for必须要有遍历的目标;

传统for可以没有遍历的目标。在操作数据时建议使用传统for,因为可以定义、处理角标。

三、示例

示例1:

package demo;
import java.util.ArrayList;
/*
 * 需求:使用foreach语句对集合进行遍历
 */
public class CollectionsDemo{
	public static void main(String[] args){
		//定义List集合并添加元素
		ArrayList<String> list = new ArrayList<String>();
		int[] arr = {2,3,5};
	
		list.add("java01");
		list.add("java02");
		list.add("java03");
		//使用高级for循环对集合进行遍历
		for(String l:list){
			System.out.println(l);
		}
		
		//对数组进行遍历
		for(int a:arr){
			System.out.print(a+" ");
		}
	}	
}
运行结果:


示例2:

package demo;
import java.util.ArrayList;
/*
 * 需求:遍历过程中改变变量的指向
 */
public class CollectionsDemo{
	public static void main(String[] args){
		//定义List集合并添加元素
		ArrayList<String> list = new ArrayList<String>();
		int[] arr = {2,3,5};
	
		list.add("java01");
		list.add("java02");
		list.add("java03");
		
		print(list);
		
		//使用高级for循环对集合进行遍历
		for(String l:list){
			l = "kk";//l指向新的字符串
		}
		
		print(list);
	}
	public static void print(Object obj){
		System.out.println(obj);
	}
}
运行结果:


由结果可以看出:即使在遍历过程中改变了foreach语句中变量的指向,集合中的元素仍未被改变。


第二部分:可变参数(JDK1.5版本新特性)

 1、概念

示例代码:

package demo;
/*
 * 需求:可变参数演示
 */
public class Test{
	public static void main(String[] args){
		//定义数组,长度固定
		int[] arr = {1,2,3};
		
		//奖数组作为参数传递
		show(arr);
		//数量不定的参数
		method(1,2,3,4);
		method(4,6,7,6,8,1);
	}
	//数组
	public static void show(int[] arr){
		System.out.println("arr.length="+arr.length);
	}
	//可变参数
	public static void method(int...arr){
		System.out.println("arr.length="+arr.length);
	}
}
运行结果:



          可变参数:其实就是参数为数组的简写形式,不用每一次都建立数组对象。只要将要操作的元素作为参数传递即可,可变参数会隐式将这些参数封装成数组。

2、注意事项

方法的可变参数在使用时,可变参数一定要定义在参数列表的最后面。如:

void show(String str,int...arr)


第三部分:静态导入

1、概述

静态导入也是为了简写书写而出现的,导入该类后,在使用该类中的静态方法时不用再写类名。

import java.util.*;    导入util包中的所有类

import static java.util.Arrays.*;    导入Arrays类中的所有静态成员

2、注意事项

当类名重复时,需要指定具体的包名;

当方法重名时,需要制定所属的对象或者类。


第四部分:System系统类(java.lang.System)

1、概述

        在 System 类提供的设施中,有标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。

该类中的成员都是静态的,其常用成员有:

字段:

public static InputStream in    “标准”输入流。 

public static PrintStream out    “标准”输出流。 

方法:

public static void setIn(InputStream in)    重新分配“标准”输入流

public static void setOut(PrintStream out)    重新分配“标准”输出流

属性信息:

public static Properties getProperties()    确定当前的系统属性

public static String getProperty(String key)    获取指定键指示的系统属性
public static String setProperty(String key, String value)    设置指定键指示的系统属性

2、示例

        Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串,键与值采用”=“连接。

Properties时HashTable的子类,也就是Map集合的一员。因此,可以通过Map集合的方法取出该集合中的元素。

示例代码1:(加载系统属性)

package demo;

import java.util.Properties;
import java.util.Set;
/*
 * 需求:获取系统属性、设置系统属性
 */
public class Test{
	public static void main(String[] args){
		//获取系统属性信息
		Properties prop = System.getProperties();
		//获取prop中键的Set集合
		Set keys = prop.keySet();
		//对prop集合进行遍历
		for(Object obj:keys){
			//由于prop中没有泛型定义,因此要强转
			String key = (String)obj;
			//采用prop的get方法获取键上对应的value
			String value = (String)prop.get(key);
			System.out.println(key+"="+value);
		}
	}
}
部分结果如下:


示例代码2:(设置属性)

package demo;
import java.util.Properties;
import java.util.Set;
/*
 * 需求:获取系统属性、设置系统属性
 */
public class Test{
	public static void main(String[] args){
		//获取系统属性信息
		Properties prop = System.getProperties();
		
		//获取操作系统的信息
		String value = prop.getProperty("os.name");
		System.out.println("os.name="+value);
		
		//设置自定义属性信息
		prop.setProperty("mykey", "myvalue");
		System.out.println("mykey="+prop.getProperty("mykey"));
	}
}
运行结果:


示例代码3:(启动时设置属性信息)

import java.util.Properties;
/*
 * 需求:获取系统属性、设置系统属性
 */
public class Test{
	public static void main(String[] args){
		//获取指定键上的值(键不存在返回null)
		String value = System.getProperty("haha");
		System.out.println(value);
		
	}
}
直接运行时,结果为:null

启动时时设置属性,格式为:java -Dhaha=abcd Test(运行时设定键与值)


运行结果:



第五部分:Runtime运行时类型(java.lang.Runtime)

一、概述

        每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime 方法获取当前运行时。应用程序不能创建自己的 Runtime 类实例。

二、方法

由于Runtime没有构造函数,且有非静态方法,那么就有一个静态方法,返回该类对象。

Runtime类中常用方法:

public static Runtime getRuntime()    返回与当前 Java 应用程序相关的运行时对象

public Process exec(String command)    

        在单独的进程中执行指定的字符串命令(command中.exe程序与文件用” “隔开)(会抛IOException)
public Process exec(String[] cmdarray)    在单独的进程中执行指定命令和变量(包含所调用命令及其参数的数组)

Process接口(本机进程)中有以下方法:

abstract void destroy()    杀掉子进程

示例代码:

import java.io.*;
/*
 * 需求:Runtime示例 
 */
public class RuntimeDemo {
	public static void main(String[] args){
		runtime();
	}
	
	public static void runtime(){
		//获取该应用程序的Runtime示例对象
		Runtime r = Runtime.getRuntime();
		try{
			//创建一个本机进程(使用potplayer打开视频文件)
			Process p = r.exec("D:\\Program Files (x86)\\PotPlayer\\PotPlayerMini.exe F:\\Media\\盗梦空间.rmvb");
			//让当前线程睡4秒
			Thread.sleep(4000);
			//杀掉子进程。强制终止此 Process 对象表示的子进程
			p.destroy();
		}catch(IOException e){
			e.printStackTrace();
		}catch(InterruptedException e){
			e.printStackTrace();
		}
	}
}


第六部分:Date与Calendar类

一、Date(java.util.Data)

1、定义

类 Date 表示特定的瞬间,精确到毫秒。

示例代码:

package demo;
import java.util.Date;
public class TimeDemo {
	public static void main(String[] args) {
		//创建时间
		Date date = new Date();
		//输出
		System.out.println(date);
	}
}
运行结果:


2、格式化时间

由于获取到的Date对象的格式比较混乱,Java中提供了格式化时间的方法。

1)DateFormat(java.text.DateFormat)

该类是一个抽象类,其中有以下方法:

String format(Date date)    将一个 Date 格式化为日期/时间字符串

2)SimpleDateFormat(java.text.SimpleDateFormat)

该类是DateFormat的子类,可以在创建对象时按指定格式格式化时间:

SimpleDateFormat(String pattern)    用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat


pattern - 描述日期和时间格式的模式,如下图:


示例代码:

package demo;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TimeDemo {
	public static void main(String[] args) {
		//获取时间
		Date date = new Date();
		
		//对时间按指定模式格式化
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss E");
		String time = sdf.format(date);
		System.out.println(time);
	}
}
运行结果:


二、Calendar(java.util.Calendar)

1、概述

        Date获取的时间是字符串,若要对时间进行数字化操作比较麻烦,且不能跳转时间,Calendar类的出现解决了类似问题。

        Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

2、方法

由于该类是抽象类,故不可以new对象,该类中提供了一个静态方法返回本类对象

static Calendar getInstance()    使用默认时区和语言环境获得一个日历

Calendar类中常用方法:

void set(int field, int value)    将给定的日历字段设置为给定值
void set(int year, int month, int date)    设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值
void set(int year, int month, int date, int hourOfDay, int minute) 
        设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值
void set(int year, int month, int date, int hourOfDay, int minute, int second) 
        设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值
 
int get(int field)    返回给定日历字段的值
abstract void add(int field, int amount)    根据日历的规则,为给定的日历字段添加或减去指定的时间量(负数表示减少)

Calendar类中的常用字段:


示例代码:

package demo;
import java.text.*;
import java.util.*;
/*
	演示Calendar类
*/
public class CalendarDemo {

	public static void main(String[] args) {
		calenderDemo();
		
	}
	
	public static void calenderDemo(){
		//获取Calendar(日历)对象
		Calendar c = Calendar.getInstance();

		//将日历设定到 2012年12月24日
		c.set(2012,11,24);
		//将年份增加1年
		c.add(Calendar.YEAR,1);

		//获取指定的字段(int)类型
		int year = c.get(Calendar.YEAR);//年
		int monthIndex = c.get(Calendar.MONTH);//获取的数组中的索引(月-1)
		int day = c.get(Calendar.DAY_OF_MONTH);//日
		int weekIndex= c.get(Calendar.DAY_OF_WEEK);//获取的数组中的索引(星期)
		int hour = c.get(Calendar.HOUR_OF_DAY);//时
		int minute = c.get(Calendar.MINUTE);//分
		int second = c.get(Calendar.SECOND);//秒
		
		
		print(year+"年"+"第"+monthIndex+"月"+day+"日"+"星期中的第"+weekIndex+"天");
		
		/*
		由于Calendar中:
			月份是从0开始的
			星期日是一周中的第一天
		因此,定义相应的表格,方便对时间进行格式化。
		*/
		//定义月份的“表格”
		String[] month = {"1月","2月","3月","4月",
						  "5月","6月","7月","8月",
						  "9月","10月","11月","12月"};
		
		//定义星期的“表格”
		String[] week = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
		
		print(year+"年"+month[monthIndex]+day+"日"+week[weekIndex]+hour+":"+minute+":"+second);
	}

	public static void print(Object obj){
		System.out.println(obj);
	}

}
运行结果:


3、注意

在Calendar类中:

        月份从0开始计算,如11表示12月;

        星期日是一周中的第一天,如一周中的第2天是星期一。


第七部分:Math工具类(java.lang.Math)

一、概述

Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。 

二、常用方法

public static double ceil(double a)    返回大于指定数的最小整数
public static double floor(double a)    返回小于指定数的最大整数
public static long round(double a)    四舍五入
public static int round(float a)    四舍五入
public static double pow(double a, double b)    返回a的b次幂的值
public static double random()    返回大于等于0.0且小于1.0的随机数

三、Random类(java.util.Random)

此类的实例用于生成伪随机数流。常用方法:

int nextInt(int n)    返回一个伪随机数,它是取自此随机数生成器序列的、大于等于0小于n的数

四、示例代码

package demo;
import java.util.*;
/*
 * 需求:演示Math 工具类的常用方法
 */
public class MathDemo {
	public static void main(String[] args) {
		mathTest();
		//骰子
		random();
	}
	public static void mathTest(){
		
		double d1 = Math.ceil(12.34);//大于该数的最小整数
		double d2 = Math.floor(12.34);//小于该数的最大整数
		System.out.println("ceil = "+d1+" floor = "+d2);
		
		//四舍五入
		long l = Math.round(7.34);
		double d = Math.round(3.14f);
		System.out.println("l="+l+" d="+d);
		
		//3的4次方
		double pow = Math.pow(3, 4);
		System.out.println(pow);
		
	}
	
	//实现骰子的随机算法
	public static void random(){
		//创建一个随机数生成器
		Random r = new Random();
		System.out.println("骰子:");
		for(int x=0;x<10;x++){
			//该随机数在[0,5]+1=[1-6]
			int num = r.nextInt(6)+1;//骰子
			System.out.print(num+" ");
		}
	}
}
运行结果:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值