疯狂java笔记(五) - 系统交互、System、Runtime、Date类

一、程序与用户交互(Java的入口方法-main方法):

 运行Java程序时,都必须提供一个main方法入口:public static void main(String[] args){}

  public:因为main方法里边可能包含同一包内或其他类的方法,为了保证能够正常执行该方法所以只能用该方法;

  static:调用主方法的时候不会先创建该主类的对象,而是直接通过该类来调用主方法的,所以使用static修饰;

  String[]:谁调用方法谁就为这个形参赋值,默认长度为0的数组

    运行时:java 主类类名 第一个数组元素 第二个数组元素 ......

1 class TestArgs{
2     public static void main(String[] args){
3         System.out.println(args.length);
4         for(String arg : args){
5             System.out.println(arg);
6         }
7     }
8 }

 上面程序编译后,直接运行输出为0,这说明args数组默认长度是为0的。

 而如果改用命令行java TestArgs 11 aa cc / java TestArgs "11 aa"来运行改程序将输出:

  

 运行Java程序时在类名后紧跟一个或多个字符串,多个字符串之间用空格隔开,如果一个参数本身包含空格,则这个参数应该用双引号括起来.

二、使用Scanner获取键盘输入:

 系统里,System.in代表键盘 -- 直接用System.in很麻烦,通常都会进行包装:

 1、传统会包装成BufferedReader - 这个更安全,而且有完善的异常机制,BufferedReader是Java IO流中的一个字符、包装流它必须简历在另一个字符流基础上,标准输入System.in是字节流,程序需要使用InputStreamReader将其包装成字符流:

 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

 2、JDK1.5增加一个Scanner - 更简单:

  ①、hasNextXxx():是否还有下一个输入项,其中Xxx可以是Int、Long等代表基本数据类型的字符串。如果需要判断是否包含下一个字符串,则可以省略Xxx。

  ②、nextXxx():获取下一个输入项。Xxx的含义与前一个方法中的Xxx相同。

  ③、Scanner提供两个简单的方法来进行读取:boolean hasNextLine():返回输入源中是否还有下一行;String nextLine():返回输入源中下一行的字符串.  

 1 import java.util.*;
 2
 3 class TestScanner{
 4     public static void main(String[] args){
 5         Scanner sc = new Scanner(System.in);
 6         System.out.println("请输入: ");
 7
 8         /* 判断是否有下一个字符串并输出整行内容,整行内容无隔断
 9         while(sc.hasNext()){
10             System.out.println("下一行内容是: " + sc.nextLine());
11         }
12
13
14            判断是否有下一个字符串并输出下一个值,每个值以空格隔断
15         while(sc.hasNext()){
16             System.out.println("下一个内容是: " + sc.next());
17         }
18         */
19
20         //输出下一个整数,遇到非整数时退出当前程序,一行多个字符时以空格 隔断
21         while(sc.hasNextInt()){
22             System.out.println("下一整数是:" + sc.nextInt());
23         }
24     }
25 }

三、System类:

 通俗的说:如果你要获取操作平台相关/JVM所在系统的数据,用System类.

 in - 标准输入,通常标准输入就是键盘

 out - 标准输出 通常就是屏幕

 常用方法:

  exit(in status):退出虚拟机,无论你是否还有什么方法、线程都会结束

  getenv() - 获取所有的环境变量

  getenv(String name) - 获取指定环境变量的值

  static Properties getProperties() - 获取所有系统属性

  static String getProperty(String key) - 获取指定的系统属性

 1 import java.util.*;
 2
 3 class TestSystem{
 4     public static void main(String[] args){
 5         //System.getenv(String name) 获取指定环境变量的值
 6         System.out.println(System.getenv("Java_home"));
 7         //System.getenv() 获取系统所有的环境变量
 8         //System.out.println(System.getenv());
 9
10         //getProperty(String key)  获取指定的系统属性
11         System.out.println(System.getProperty("os.name"));
12
13         //获取所有系统属性
14         //System.out.println(System.getProperties());
15     }
16 }

四、Runtime类:

 通俗的说:如果你要获取JVM相关的数据,就需要用Runtime类

 Runtime类是典型的"单例类",它的构造器被隐藏了,因此只能通过getRuntime()方法来获取实例

  rt.maxMemory() -

  rt.totalMemory() -

  rt.freeMomory() -

  还可以运行系统已有的程序:

  rt.exec("F:/application/sina_live.exe");

 1 public class RuntimeTest{
 2     public static void main(String[] args) throws Exception{
 3         //单例类需通过方法来创建实例
 4         Runtime rt = Runtime.getRuntime();
 5         //方法availableProcessors()获取处理器个数并返回
 6         System.out.println("有多少个处理器:" + rt.availableProcessors());
 7
 8         /* 消耗内存
 9         int[] arr = new int[20000];
10         for(int i = 0;i < arr.length;i++){
11             arr[i] = i * 2;
12         }
13         */
14
15         //获取JRE的最大内存
16         System.out.println("最大的内存:" + rt.maxMemory());
17         //获取JVM总内存 java -Xms512m -Xmx1024m
18         System.out.println("最大的内存:" + rt.totalMemory());
19
20         //运行系统的命令
21         //如果没有用绝对路径的话,会到Path环境变量指定的系统路径中搜索
22         rt.exec("F:/application/sina_live.exe");
23     }
24 }

五、Date和Calendar类:

 1、Date类:代表一个日期、时间;

  还没有过时的构造器:

   new Date(long) - long代表从某个时间开始(GMT1970-1-1 00:00:00)到现在过了多少毫秒;

   new Date()

   Date ← → long(GMT1970-1-1 00:00:00到现在可相互转换)

 2、Calendar类 - 代表一个日期、时间(代替Date)

  调用getInstance()方法来获取实例,也可以转换为Date,但Date不能转换为Calendar;

  set(年,月,日,时,分,秒),如:set(Calendar.MONTH,9)  直接设置某个字段的值

  add(int field,int amount)与roll(int field,int amount) 对某个字段进行添加

   add方法有如下规则:当被修改的字段超过它允许的范围时,它会发生“进位”;当roll不会发生“进位”

 1 import java.util.*;
 2
 3 public class DateTest{
 4     public static void main(String[] args){
 5         //创建一个当前时间的Date
 6         Date date = new Date();
 7         System.out.println(date);
 8         //过时命令,编译有提示,但可运行。在Java中日月是从0开始的
 9         //System.out.println(date.getDay());
10         System.out.println("获取从1970-1-1到现在过了多少毫秒" + System.currentTimeMillis());
11
12         //把毫秒数转成日期
13         System.out.println(new Date(System.currentTimeMillis() - 3 * 20 * 60 * 60 * 1000));
14
15         //如果要计算两个Date之间相差多少天(小时)
16         Date d1 = new Date();
17         Date d2 = new Date(114,1,19,22,41,30);
18
19         System.out.println("两date之间相差的小时:" + (d1.getTime() - d2.getTime()) / 3600 /1000);
20     }
21 }
 1 import java.util.*;
 2
 3 public class CalendarTest{
 4     public static void main(String[] args){
 5         Calendar cal = Calendar.getInstance();
 6         //设置为2015-4-12 22:45:30
 7         cal.set(2015,4,12,22,45,30);
 8         System.out.println(cal);
 9         System.out.println(cal.getTime());
10
11         //设置为10月
12         cal.set(Calendar.MONTH,9);
13         System.out.println(cal.getTime());
14
15         //add与roll的区别
16         cal.add(Calendar.DATE,20);
17         System.out.println(cal.getTime());
18
19         cal.roll(Calendar.DATE,30);
20         System.out.println(cal.getTime());
21     }
22 }
时间: 2024-08-25 22:01:46

疯狂java笔记(五) - 系统交互、System、Runtime、Date类的相关文章

JAVA笔记五

JAVA笔记 选择排序 0 1 2 3 4 3 1 0 2 9 将下标0依次和其他下标对比选择出最小的元素,再将下标1依次和其他下标对比选出最小的元素依次循环 每一次参与比较的元素进行减少:a.length-1 For(int i = 0 ;i<a.length-1;i++){ Int temp; For(int j =i+1;j<a.length;j++){ If(a[i]>a[j]){ Temp=a[i]; A[i]=a[j]; A[j]=temp } } } 冒泡排序:相邻的两个元

JAVA获取当前系统事件System.currentTimeMillis()

System.currentTimeMillis()产生一个当前的毫秒,这个毫秒其实就是自1970年1月1日0时起的毫秒数,Date()其实就是相当于Date(System.currentTimeMillis()),因为Date类还有构造Date(longdate),用来计算long秒与1970年1月1日之间的毫秒差. 得到了这个毫秒数,我们自己也可以算起现在的年月日周时,但是这不是我们去计算的,因为有Calendar.Calendar最终结出的结果就是年月日周时时区. System.curre

JAVA获取当前系统时间System.currentTimeMillis()以及获取运行时间

System.currentTimeMillis()产生一个当前的毫秒,这个毫秒其实就是自1970年1月1日0时起的毫秒数,Date()其实就是相当于Date(System.currentTimeMillis());因为Date类还有构造Date(long date),用来计算long秒与1970年1月1日之间的毫秒差. 得到了这个毫秒数,我们自己也可以算起现在的年月日周时,但是这不是我们去计算的,因为有Calendar.Calendar最终出的结果就是年月日周时时区. System.curre

常用工具类(System,Runtime,Date,Calendar,Math)

一.Sy 一个java.lang包中的静态工具类. 三大字段: static PrintStream err "标准"错误输出流. static InputStream in "标准"输入流. static PrintStream out "标准"输出流. 其他常用方法: 描述系统信息: 获取系统属性信息: static Properties getProperties(): (Properties是Hashtable的子类,也就是Map 的子类

Object,String,StringBuffer,StringBuilder,System,Runtime,Date,Math介绍及用法(API)

1       Object对象 面向对象的核心思想:“找合适的对象,做适合的事情”. 合适的对象: 自己描述类,自己创建对象. sun已经描述了好多常用的类,可以使用这些类创建对象. API(Application Program Interface) sun定义的那么多类的终极父类是Object.Object描述的是所有类的通用属性与方法. 1.1   toString方法 toString() 返回对象的描述信息   [email protected]   类名@哈希码值的十六进制形式.

Java笔记五.多线程

Java中的多线程(一) 一.理解线程 1.进程.线程.多线程 1.进程:在多任务系统中,每个独立执行的程序(或说正在进行的程序)称为进程. 2.线程:一个进程中又可以包含一个或多个线程,一个线程就是一个程序内部的一条执行线索(一部分代码). 3.多线程:如果要一程序中实现多段代码同时交替运行,就需产生多个线程,并指定每个线程上所要运行的程序代码,即为多线程. 注:在单线程中,程序代码的执行是按调用顺序依次往下执行的,不能实现两端程序代码同时交替运行的效果.当我们的程序启动运行时,会自动产生一个

JAVA学习笔记(五十一)- DBUtil 封装数据库工具类

数据库工具类 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /* * 数据库工具类 */ public class DBUtil { // 获取数据库连接 public static Connection getConnection() { String dr

疯狂java笔记4:集合类(2)

Map Map用于保存具有映射关系的数据 key和value对应,单向的一对一关系 key在一起组成了一个Set集合(key不可以重复,Map.keySet()返回这个集合) 大部分和Set集合是一样的 Properties类是Hashtable类的子类.其对象用于处理属性文件(windows下是ini文件) WeakHashMap实现类,只保持key对实际对象的弱引用 IdentityHashMap实现类,与普通实现类不同之处是key相等是要key1=key2;(同一对象),而不是普通Hash

疯狂java笔记-枚举类

1 //手动实现枚举类 2 //步骤 3 1.通过private将构造器隐藏起来 4 2.把这个类的所有可能的实例都使用public static final修饰的类变量来保存 5 3.如果有必要,可以提供一些静态方法,允许其他程序根据特定的参数来获取与之匹配的实例 6 public class Season{ 7 //把Season类定义成不可变的,将其Field也定义成final 8 private final String name; 9 private final String desc