JAVA笔记239.docx
《JAVA笔记239.docx》由会员分享,可在线阅读,更多相关《JAVA笔记239.docx(66页珍藏版)》请在冰豆网上搜索。
JAVA笔记239
运行以上程序后显示结果如下:
(只是一部分)
java.runtime.name:
:
:
:
Java(TM)SERuntimeEnvironment
sun.boot.library.path:
:
:
:
E:
\Java\jdk1.6.0_10\jre\bin
java.vm.version:
:
:
:
11.0-b15
java.vm.vendor:
:
:
:
SunMicrosystemsInc.
java.vendor.url:
:
:
:
path.separator:
:
:
:
;
java.vm.name:
:
:
:
JavaHotSpot(TM)ClientVM
file.encoding.pkg:
:
:
:
sun.io
sun.java.launcher:
:
:
:
SUN_STANDARD
user.country:
:
:
:
CN
sun.os.patch.level:
:
:
:
java.vm.specification.name:
:
:
:
JavaVirtualMachineSpecification
user.dir:
:
:
:
D:
\ceshi
java.runtime.version:
:
:
:
1.6.0_10-rc2-b32
java.awt.graphicsenv:
:
:
:
sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs:
:
:
:
E:
\Java\jdk1.6.0_10\jre\lib\endorsed
os.arch:
:
:
:
x86
java.io.tmpdir:
:
:
:
C:
\Users\ADMINI~1\AppData\Local\Temp\
想要让虚拟机启动时动态加载属性信息?
启动虚拟机用java命令,首先显示该命令的相关参数,在cmd中输入java>c:
\2.txt,会将参数信息存入c:
\2.txt文件中如下图(部分)
从上图中可以看出-D=setasystemproperty设置一条属性信息。
/*System:
类中的方法和属性都是静态的。
上机演示程序一******************************
out:
标准输出,默认是控制台。
in:
标准输入,默认是键盘。
描述系统一些信息。
获取系统属性信息:
PropertiesgetProperties();
//虚拟机在启动时所加载的默认的属性信息。
*/
importjava.util.*;
classSystemDemo
{publicstaticvoidmain(String[]args)
{Propertiesprop=System.getProperties();
//因为Properties是Hashtable的子类,也就是Map集合的一个子类对象。
//那么可以通过map的方法取出该集合中的元素。
//该集合中存储都是字符串。
没有泛型定义。
//如何在系统中自定义一些特有信息呢?
System.setProperty("mykey","myvalue");
//获取指定属性信息。
Stringvalue=System.getProperty("os.name");
System.out.println("value="+value);
//可不可以在jvm启动时,动态加载一些属性信息呢?
Stringv=System.getProperty("haha");
//如果在cmd中输入:
javaSystemDemo回车,显示v=null
//如果在cmd中输入:
java–Dhaha=qqqqqSystemDemo回车,显示qqqqq,因为动态设定。
(java-D=//setasystemproperty
System.out.println("v="+v);
/*//获取所有属性信息。
for(Objectobj:
prop.keySet())
{Stringvalue=(String)prop.get(obj);
System.out.println(obj+":
:
"+value);
}*/
}
}******************************************************************************
/*Runtime对象。
该类并没有提供构造函数。
说明不可以new对象。
那么会直接想到该类中的方法都是静态的。
发现该类中还有非静态方法。
说明该类肯定会提供了方法获取本类对象。
而且该方法是静态的,并返回值类型是本类类型。
由这个特点可以看出该类使用了单例设计模式完成。
该方式是staticRuntimegetRuntime();*/
classRuntimeDemo上机演示程序二**********************************************
{publicstaticvoidmain(String[]args)throwsException
{Runtimer=Runtime.getRuntime();
Processp=r.exec("winmine.exe");//启动扫雷游戏
Processp=r.exec("notepad.exeSystemDemo.java");
//启动记事本后,并在记事本中将“SystemDemo.java”文件打开。
//Thread.sleep(4000);//让进程运行4秒钟
//p.destroy();//杀掉进程
}
}******************************************************************************
importjava.util.*;importjava.text.*;//因为日期最终格式化后变成文本,所以要导入文本包。
classDateDemo上机演示程序三***************************************************
{publicstaticvoidmain(String[]args)
{Dated=newDate();
System.out.println(d);//打印的时间看不懂,希望有些格式。
//将模式封装到SimpleDateformat对象中。
SimpleDateFormatsdf=newSimpleDateFormat("yyyy年MM月dd日Ehh:
mm:
ss");
//调用format方法让模式格式化指定Date对象。
Stringtime=sdf.format(d);
System.out.println("time="+time);
longl=System.currentTimeMillis();
Dated1=newDate(l);
System.out.println("d1:
"+d1);
}
}******************************************************************************
importjava.util.*;importjava.text.*;上机演示程序四***********************************
classCalendarDemo
{publicstaticvoidmain(String[]args)
{Calendarc=Calendar.getInstance();
String[]mons={"一月","二月","三月","四月"
"五月","六月","七月","八月"
"九月","十月","十一月","十二月"};
String[]weeks={
"","星期日","星期一","星期二","星期三","星期四","星期五","星期六",
};
intindex=c.get(Calendar.MONTH);
intindex1=c.get(Calendar.DAY_OF_WEEK);
sop(c.get(Calendar.YEAR)+"年");
//sop((c.get(Calendar.MONTH)+1)+"月");
sop(mons[index]);
sop(c.get(Calendar.DAY_OF_MONTH)+"日");
//sop("星期"+c.get(Calendar.DAY_OF_WEEK));
sop(weeks[index1]);
/*Dated=newDate();
SimpleDateFormatsdf=newSimpleDateFormat("yyyy");
Stringyear=sdf.format(d);//获得一个日期的年份,但是返回的是字符串,如果变成数字处理
//可以调用Integer.parseInt(d)但是比较麻烦,可找Calendar类帮助实现。
System.out.println(year);*/
}
publicstaticvoidsop(Objectobj)
{
System.out.println(obj);
}
}******************************************************************************
两个练习:
1,获取任意年的二月有多少天。
思路:
根据指定年设置一个时间就是
c.set(year,2,1)//某一年的3月1日。
c.add(Calenar.DAY_OF_MONTH,-1);//3月1日,往前推一天,就是2月最后一天。
2,获取昨天的现在这个时刻。
c.add(Calenar.DAY_OF_MONTH,-1);*/
classCalendarDemo2上机演示程序五*********************************************
{publicstaticvoidmain(String[]args)
{Calendarc=Calendar.getInstance();
//c.set(2012,2,23);//设置日期
c.add(Calendar.DAY_OF_MONTH,-18);//时间向前或者向后推迟。
c.add(Calendar.YEAR,4);printCalendar(c);}
publicstaticvoidprintCalendar(Calendarc)
{String[]mons={"一月","二月","三月","四月"
"五月","六月","七月","八月"
"九月","十月","十一月","十二月"};
String[]weeks={
"","星期日","星期一","星期二","星期三","星期四","星期五","星期六",};
intindex=c.get(Calendar.MONTH);
intindex1=c.get(Calendar.DAY_OF_WEEK);
sop(c.get(Calendar.YEAR)+"年");
//sop((c.get(Calendar.MONTH)+1)+"月");
sop(mons[index]);
sop(c.get(Calendar.DAY_OF_MONTH)+"日");
//sop("星期"+c.get(Calendar.DAY_OF_WEEK));
sop(weeks[index1]);
}
publicstaticvoidsop(Objectobj)
{System.out.println(obj);}
}******************************************************************************
/*练习。
给定一个小数。
保留该小数的后两位。
选作。
可以考虑,保留时进行四舍五入。
*/
importjava.util.*;上机演示程序五*************************************************
classMathDemo
{publicstaticvoidmain(String[]args)
{/*Randomr=newRandom();
for(intx=0;x<10;x++)
{//intd=(int)(Math.random()*10+1);
intd=r.nextInt(10)+1;
sop(d);
}*/
saveTwo(12.3456,3,true);//12.34
}
publicstaticvoidsaveTwo(doubled,intscale,booleanisRound)
{doublebase=Math.pow(10,scale);
doublenum=isRound?
Math.round(d*base)/base:
((int)(d*base))/base;
sop("num="+num);
/*doubled1=d*100;
sop("d1="+d1);
d1=d1+0.5;
doubled2=(int)d1;
sop("d2="+d2);
doubled3=d2/100;
sop("d3="+d3);*/
}
publicstaticvoidshow()
{doubled=Math.ceil(16.34);//ceil返回大于指定数据的最小整数。
doubled1=Math.floor(12.34);//floor返回小于指定数据的最大整数。
longl=Math.round(12.54);//四舍五入
sop("d="+d);sop("d1="+d1);sop("l="+l);
doubled2=Math.pow(2,3);sop("d2="+d2);
}
publicstaticvoidsop(Objectobj)
{System.out.println(obj);}
}******************************************************************************
IO技术************************************************************************
/*字符流和字节流:
字节流两个基类:
InputStreamOutputStream
字符流两个基类:
ReaderWriter
先学习一下字符流的特点。
IO流是用于操作数据的,数据的最常见体现形式是:
文件。
先以操作文件为主来演示。
需求:
在硬盘上,创建一个文件并写入一些文字数据。
找到一个专门用于操作文件的Writer子类对象。
FileWriter。
后缀名是父类名。
前缀名是该流对象的功能。
*/
classFileWriterDemo上机演示程序六*********************************************
{publicstaticvoidmain(String[]args)throwsIOException//因为NewFileWriter()所给出的绝对路径可能不存在如"K:
\\demo.txt",所以就可能抛出IOException异常
{//创建一个FileWriter对象。
该对象一被初始化就必须要明确被操作的文件。
//而且该文件会被创建到指定目录下。
如果该目录下已有同名文件,将被覆盖。
//其实该步就是在明确数据要存放的目的地。
FileWriterfw=newFileWriter("demo.txt");
//调用write方法,将字符串写入到流中。
此时打开deom文件发现为空。
fw.write("abcde");
//刷新流对象中的缓冲中的数据。
将数据刷到目的地中。
//fw.flush();
//关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。
//将数据刷到目的地中。
//和flush区别:
flush刷新后,流可以继续使用,close刷新后,会将流关闭。
fw.close();
}
}******************************************************************************
/*IO异常的处理方式。
*/
classFileWriterDemo2上机演示程序七********************************************
{publicstaticvoidmain(String[]args)
{FileWriterfw=null;//在try外面建立引用,try内部初始化
try
{//FileWriterfw=newFileWriter("demo.txt");编译失败,因为在try代码块中定义的fw,在finally代码块中无法访问。
fw=newFileWriter("demo.txt");
fw.write("abcdefg");
}
catch(IOExceptione)
{System.out.println("catch:
"+e.toString());}
finally
{
//fw.close();编译失败,因为三句话都会引发IOException,但是只针对性处理了两句,所以必须对fw.close()也做出相应的处理方式
try
{
if(fw!
=null)
fw.close();
//直接写:
fw.close();
//如果在FileWriterfw=newFileWriter("k:
\\demo.txt");
编译通过,但运行时报两个异常(一、FileNotFoundException(系统找不到制定路径)二、NullPointerException(空指针异常,因为对象没有建立成功,fw=null;))空的变量名时不能调用方法的
}
catch(IOExceptione)
{
System.out.println(e.toString());
}}}}******************************************************
/*演示对已有文件的数据续写。
*/上机演示程序八************************************
classFileWriterDemo3
{publicstaticvoidmain(String[]args)throwsIOException
{//传递一个true参数,代表不覆盖已有的文件。
并在已有文件的末尾处进行数据续写。
FileWriterfw=newFileWriter("demo.txt",true);
fw.write("nihao\r\nxiexie");//\n和\r\n的区别
fw.close();
}
}******************************************************************************
classFileReaderDemo上机演示程序九(文本文件读取方式一)*************************
{publicstaticvoidmain(String[]args)throwsIOException
{//创建一个文件读取流对象,和指定名称的文件相关联。
//要保证该文件是已经存在的,如果不存在,会发生异常FileNotFoundException
FileReaderfr=newFileReader("demo.txt");
//调用读取流对象的read方法。
//read():
一次读一个字符。
而且会自动往下读。
/*intch1=fr.read();
System.out.println("ch1="+(char)ch1);
intch2=fr.read();
System.out.println("ch2="+(char)ch2);
intch3=fr.read();
System.out.println("ch3="+(char)ch3);
intch4=fr.read();
System.out.println("ch4="+ch4);//加入已知文件中只有三个字符,但是读了四个,此时ch4的值为-1,返回-1;//-1说明已经到达流的末尾,这样就有了循环条件*/
intch=0;
while((ch=fr.read())!
=-1)
{System.out.println("ch="+(char)ch);}
/*while(true)
{intch=fr.read();
if(ch==-1)
break;
System.out.println("ch="+(char)ch);
}*/
fr.close();
}
}******************************************************************************
第二种方式:
通过字符数组进行读取。
上机演示程序十*******************************
classFileReaderDemo2
{publicstaticvoidmain(String[]args)throwsIOException
{FileReaderfr=newFileReader("demo.txt");
//定义一个字符数组。
用于存储读到字符。
//该read(char[])返回的是读到字符个数。
假设文件中共10个字符
/*char[]buf=newchar[3];
intnum=