黑马程序员--- 学习笔记(第十八天)

 —————————— ASP.Net+Android+IOS开发.Net培训、期待与您交流!——————————
System系统类


in:标准输入流  默认键盘
out:标准输出流 默认控制台
arrayCopy();复制数组
exit();结束程序
currentTimeMills();获取当前毫秒值
gc();运行java垃圾回收器
getProperties();获取全部系统属性信息
getProperty();获取指定键的值
setProperty();设置键值对
clearProperty();移除指定键系统信息

/*
System系统类  Properties系统信息类


*/
import java.util.*;
class Demo1 
{
	public static void main(String[] args) 
	{
		method1();
	}
	public static void method1(){
	Properties p=System.getProperties();
	sop(p.getProperty("控制台输入键"));
		/*
		//第一种遍历方法
		for (Object o : p.keySet())
		{
			//因为里面全是字符串 不调用子类方法,不强转也行
			//String s =(String)o;
			System.out.println(o+":::"+p.get(o));
		}*/
		/*第二种
		 Set<String> stringPropertyNames() 
 返回此属性列表中的键集,其中该键及其对应值是字符串,
 如果在主属性列表中未找到同名的键,则还包括默认属性列表中不同的键。 
		
		Set<String> set=p.stringPropertyNames();
		Iterator<String> it=set.iterator();
		for (;it.hasNext() ; )
		{
			String k=it.next();
			String v=(String)p.get(k);
			System.out.println(k+"键------------值"+v);
		}
		*/
		//第三种方法
		//static Map<String,String> getenv() 
       //   返回一个不能修改的当前系统环境的字符串映射视图。
	  
	   Map<String,String> m=System.getenv();
		for (Map.Entry<String,String> me : m.entrySet())
		{
			sop(me.getKey()+"-----------"+me.getValue());
		}


	}
	public static void method2(){

//		static String setProperty(String key, String value) 
//          设置指定键指示的系统属性。
		System.setProperty("我是键","我是值");
//		static String getProperty(String key) 
//          获取指定键指示的系统属性。
		 sop(System.getProperty("我是键"));
//		static String clearProperty(String key) 
//          移除指定键指示的系统属性。
		 System.clearProperty("我是键");
//		static void exit(int status) 
//          终止当前正在运行的 Java 虚拟机。
		System.exit(0);
	}
	public static void method3(){
	//	static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 
     //    从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。 
		int [] arr={5,6,8,9,18};
		int [] copy=new int[2];
		System.arraycopy(arr,0,copy,0,copy.length);
		for (int i : copy )
		{
			sop(i);
		}
	}

	public static void sop(Object o){
		System.out.println(o);
	}
}



ProPerties:HashMap的子类,也就是Map集合的一个子类对象,可以通过Map
的方法取出该集合中的元素.
get(k);
keySet();
entrySet();
getProperty();
setProperty();


//可不可以在jvm启动时,动态的加载一些属性呢?
java -D key=value 类名


Runtime类
    该类中并没有提供构造函数,说明不可以new对象,那么看到该类
    方法除了静态的,还有非静态的,说明该类会提供方法获取本类对象
    而且该方法是静态的,并返回值是本类类型
       static Runtime getRuntime() 
          返回与当前 Java 应用程序相关的运行时对象。 
       Process exec(String command) 
          在单独的进程中执行指定的字符串命令。 
 由这个类特点,,可以看出该类使用了单利设计模式


Process进程类
abstract  void destroy() 
          杀掉子进程。 


/*
Runtime and Process

记事本打开 Demo1.java  10秒后关闭
*/
import java.io.*;
class Demo2 
{
	public static void main(String[] args) 
	{
		/*获取当前运行对象*/
		Runtime rt=Runtime.getRuntime();
		

		try
		{
			/*给java文件绑定 记事本程序打开*/
			Process p=rt.exec("notepad Demo1.java");
			Thread.sleep(1000*10); //延时10s
			p.destroy();  //关掉进程
		}
		catch(IOException o)
		{
		   throw new RuntimeException("IO异常"+o.getMessage());
		}
		catch (InterruptedException i)
		{
			throw new RuntimeException("关闭进程异常"+i.getMessage());
		}
	}
}



下面是Runtime和Process类演示(打开记事本,10秒后关掉进程):




Date日期类


DateFormat抽象类,可实现该子类SimpleDateFormat
Date d=new Date();
//pattern(格式化模式): yyyy年MM月mm日 hh时:mm分:ss秒
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 hh时:mm分:ss秒");
sdf.format(d);


/*
Date 日期类

SimpleDateFormat日期格式化类
*/
import java.util.*;
import java.text.SimpleDateFormat;
class Demo3 
{
	public static void main(String[] args) 
	{
		 //实例化一个日期类
		 Date d=new Date();
		 //实例化一个格式化日期列
		 SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 hh时:mm分:ss秒");
		 //格式化后返回一个字符串
		 String s=sdf.format(d);
				  System.out.println(s);
	}
}



Calendar日历类
 staic getInstance();获取本类类型
 get();//根据字段获取值
 set();//根据字符设置值
 setTime();//传递Date设置时间
 setTimeMills();//传递毫秒值设置时间
 add();//加或减字符值
 setFirstDayOfWeek(int value);设置一星期的第一天是哪天
 getActualMaximum(int field)  给定此 Calendar 的时间值,返回指定日历字段可能拥有的最大值。


/*
Calender 日历类
*/
import java.util.*; 
class Demo4 
{
	public static void main(String[] args) 
	{
		//获取一个日历类对象
		Calendar  c=Calendar.getInstance();
		//打印全部信息
		//System.out.println(c);

		// method(c);
		// method1(c);
		 method2(c);
	}
	public static void method(Calendar c){
       // 设置一星期的第一天是哪一天
	//  c.setFirstDayOfWeek(0);
	  //打印星期的第一天
	 // sop(c.getFirstDayOfWeek());

	   //根据字段设置时间
	  //  void set(int year, int month, int date, int hourOfDay, int minute, int second) 
      //    设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。 
	  c.set(2014,(5-1),4,11,20,50);
	   /*查表输出现在时间*/
		String []m={"一月","二月","三月","四月"
		,"五月","六月","七月","八月"
		,"九月","十月","十一月","十二月"}; 
		String []w={"星期天","星期一","星期二","星期三","星期四"
		,"星期五","星期六"};
		int year=c.get(Calendar.YEAR); //年
		int month=c.get(Calendar.MONTH); //月
		int day=c.get(Calendar.DAY_OF_MONTH);//日
		int hh=	c.get(Calendar.HOUR_OF_DAY); //时
		int minute=	c.get(Calendar.MINUTE);		 //分
		int second=	c.get(Calendar.SECOND);			 //秒
	   sop(year+"年"+m[month]+day+"日"+w[c.get(Calendar.DAY_OF_WEEK)-1]);
		sop(hh+"时:"+minute+"分:"+second+"秒");
	}
	/*获取昨天现在的时间*/
	public static void method1(Calendar c){
	  c.add(Calendar.DAY_OF_MONTH,-1);
	  	String []m={"一月","二月","三月","四月"
		,"五月","六月","七月","八月"
		,"九月","十月","十一月","十二月"}; 
		String []w={"星期天","星期一","星期二","星期三","星期四"
		,"星期五","星期六"};
		int year=c.get(Calendar.YEAR); //年
		int month=c.get(Calendar.MONTH); //月
		int day=c.get(Calendar.DAY_OF_MONTH);//日
		int hh=	c.get(Calendar.HOUR_OF_DAY); //时
		int minute=	c.get(Calendar.MINUTE);		 //分
		int second=	c.get(Calendar.SECOND);			 //秒
	   sop(year+"年"+m[month]+day+"日"+w[c.get(Calendar.DAY_OF_WEEK)-1]);
		sop(hh+"时:"+minute+"分:"+second+"秒");
	}
	/*获取任意年的二月有多少天*/
	public static void method2(Calendar c){
		int year=2012; //设置年份
		c.set(year,2,1);   //设置年月日	  月份从0开始
		c.add(Calendar.MONTH,-1);	  //-1就是2月
		//abstract  int getMaximum(int field) 
         // 返回此 Calendar 实例给定日历字段的最大值。
		 String []m={"一月","二月","三月","四月"
		,"五月","六月","七月","八月"
		,"九月","十月","十一月","十二月"}; 
		 sop(m[c.get(Calendar.MONTH)]);	//输出月份
		 sop(c.getActualMaximum(Calendar.DAY_OF_MONTH)); //输出二月有多少天

	}
	public static void sop(Object o){
		System.out.println(o);
	}
}



 Math类
 abs();绝对值
 ceil();向上取整
 floor();向下取整
 round();四舍五入
 pow();求某数的几次方
 random();返回随机数
 max();取最大值
 min();取最小值

/*
Math类 
和Random类

常用方法演示
*/
import java.util.*;
import static java.lang.Math.*;
class Demo5 
{
	public static void main(String[] args) 
	{
		sop(abs(-2)); //绝对值

		sop(ceil(12.01)); 
		sop(ceil(-12.01)); //负数就向下取整
		sop(floor(12.01));
		sop(floor(-12.01));	//负数就向上取整

		sop(pow(2,3));  //2的3次方是8
		sop(round(12.45)); //四舍五入
		sop(max(-2,5));   //最大值
		sop(min(-2,5));    //最小值
		 /*打印10个随机数 1-10*/
		for(int i=0;i<10;i++){
			int r=(int)(random()*10+1);
			sop(r);
		}
		 System.out.println("-----------------------");
		Random ran=new Random();
		for (int i=0;i<5 ;i++ )
		{
			sop(ran.nextInt(10)+1);
		}
	}
	public static void sop(Object o){
		System.out.println(o);
	}
}




 Random随机类
 nextInt(int v);  //随机返回整数
 nextLong(); //返回0-1(不包括1)的随机数

/*
保留小数后面两位
*/
class Demo6 
{
	public static void main(String[] args) 
	{
		double b=12.35456*100;

		System.out.println((int)b/100.0);
	}
}



IO流:是用来处理设备之间的数据结构
按操作数据分两种:字节流 字符流
按流向分两种:输入流 输出流


字节流两大抽象基类
InputStream OutputStream
字符流两大抽象基类
Reader Writer


/*
字符输出流
Writer 
  |--OutputStreamWriter 字符输出流
	|--FileWriter 文件输出流
	 专门用于操作文件的Writer子类对象

   void close() 
          关闭此流,但要先刷新它。 
abstract  void flush() 
          刷新该流的缓冲。 
 void write(char[] cbuf) 
          写入字符数组。 
abstract  void write(char[] cbuf, int off, int len) 
          写入字符数组的某一部分。 
 void write(int c) 
          写入单个字符。 
 void write(String str) 
          写入字符串。 
 void write(String str, int off, int len) 
          写入字符串的某一部分。 

*/
import java.io.*;
class Demo7 
{
	public static void main(String[] args) 
	{
//	FileWriter(String fileName, boolean append) 
//根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
	
		FileWriter fw=null;
		try
		{
				//设置为true则支持续写, 否则反之.
			fw=new FileWriter("file.txt",true);
			fw.write("String");
			//fr.flush();//加不加都行 close关闭前都会flush一次 把数据刷到目的地
			fw.write("Saaaaaaaaaaa");

		}
		catch (FileNotFoundException e )
		{
			throw new RuntimeException("文件找不到");
		}catch(IOException e)
		{
			throw new RuntimeException("IO异常");
		}
		finally
		{
			try
			{
				if(fw!=null)
					fw.close();
			}
			catch (IOException e)
			{
				throw new RuntimeException("关闭流异常");
			}
		}

	}
}



字符流都是采用默认编码


文件读取


/*
用两种方法实现文件数据的读取

Reader
	|--InputStreamReader
		|--FileReader



*/
import java.io.*;
class Demo8 
{
	public static void main(String[] args) 
	{
		// method();
		function();
	}
	/*第一种方法: 单个字符读取*/
	public static void method(){
		FileReader fr=null;
		
		try
		{  
			//FileReader(String fileName) 
       //   在给定从中读取数据的文件名的情况下创建一个新 FileReader。
			fr=new FileReader("Demo1.java");

//			    int read()  
//          读取单个字符。 	返回-1表示已是文件末尾处
			int ch=0;
			 for (;(ch=fr.read())!=-1 ; )
			 {
				System.out.print((char)ch);
			 }

		}
		catch (IOException o)
		{
			System.out.println("io异常");
		}
		finally
		{
			try
			{
				if(fr!=null)
					fr.close();
			}
			catch (IOException o)
			{
				System.out.println("io异常");
			}
		}
	}
	/*第二种方法:  字符数组读取方式*/
	public static void function(){
		 FileReader fr=null;
		 try
		 {
			 fr=new FileReader("Demo2.java");
		 //int read(char[] cbuf) 
         // 将字符读入数组。 返回的读取的个数
		 
			char []cbuf=new char[1024];
			int ch=0;
			for (;(ch=fr.read(cbuf))!=-1 ; )
			{
				/*每次输出读取到的个数*/
				System.out.print(new String(cbuf,0,ch));
			}
			 
		 }
		 catch (IOException e)
		 {
			 System.out.println("io异常");
		 }
		 finally
		 {
			try
			{
				if(fr!=null)
					fr.close();
			}
			catch (IOException o)
			{
				System.out.println("关闭流异常");
			}
		 }
	}
}





文件复制


/*
复制Demo2.java到Demo2_copy.txt

思路:
先读取文件 
在写出文件
*/
import java.io.*;
class Demo9 
{
	public static void main(String[] args) 
	{
		FileReader fr=null;
		FileWriter fw=null;
		try
		{
			fr=new FileReader("Demo2.java");//源
			fw=new FileWriter("Demo2_copy.txt");  //目的地

			char []chs=new char[1024];
			int ch=0;

			for (;(ch=fr.read(chs))!=-1; )
			{
				fw.write(new String(chs,0,ch));
			}
		}
		catch (IOException e)
		{
			System.out.println("IO异常");
		}
		finally
		{
			try
			{
				if(fr!=null)
					fr.close();
			}
			catch (IOException e)
			{
				System.out.println("关闭读取流失败");
			}
			try
			{
				if(fw!=null)
					fw.close();
			}
			catch (IOException e)
			{
				System.out.println("关闭输出流失败");
			}
		}
	}
}


 —————————— ASP.Net+Android+IOS开发.Net培训、期待与您交流!——————————

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值