-------android培训、java培训、期待与您交流! ----------
(一)System
(1)描述系统信息的类
(2)该类没有构造方法,该类的方法和属性都是静态的
(3)字段摘要:
static InputStream in “标准”输入流。
static PrintStream out “标准”输出流。
(4)方法摘要:
static void exit(int status) 终止当前正在运行的 Java 虚拟机。
static void gc() 运行垃圾回收器。
static Properties getProperties() 确定当前的系统属性
static String getProperty(String key) 获取指定键指示的系统属性。
static String getProperty(String key, String def) 获取用指定键描述的系统属性。
static void setIn(InputStream in) 重新分配“标准”输入流。
static void setOut(PrintStream out) 重新分配“标准”输出流。
static void setProperties(Properties props) 将系统属性设置为 Properties 参数。
static String setProperty(String key, String value) 设置指定键指示的系统属性。
import java.util.*; /* 获取系统属性信息 Properties getProperties(); */ class SystemDemo { public static void main(String[] args) { Properties pro = System.getProperties(); //因为Properties是Hashtable的子类,也就是Map集合的一个子类对象 //那么可以通过map的方法取出该集合中的元素 //该集合中存储的都是字符串,没有定义泛型 // 设置指定键指示的系统属性 System.setProperty("mykey","myvalue"); //获取所有属性信息 for(Object obj : pro.keySet()) { String value = (String)pro.get(obj); System.out.println(obj+"::"+value); } //获取指定属性信息 String value = System.getProperty("os.name"); System.out.println("value="+value); /* //在jvm启动时,动态加载一些属性信息格式为, -D<name>=<value> String v = System.getProperty("haha"); System.out.println("v="+v); 然后输入 D:\myjava\day18>javac SystemDemo.java D:\myjava\day18>java -Dhaha=qqqq SystemDemo v=qqqq */ } }
(二)Runtime
(1)每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。 可以通过 getRuntime 方法获取当前运行时。因为该类没有构造函数,应用程序不能创建自己的Runtime类实例。
(2)该类没有构造函数,也就是它不能直接创建对象,我们就想到该类中的方法都是静态的,但是发现它里面的方法又不是静态的,故它一定有一个方法返回本类对象
(3)这个方法是静态的,返回值类型是本类类型,故该类设计了单例设计模式,保证在内存中只有一个对象
(4)方法摘要:
Process exec(String command) 在单独的进程中执行指定的字符串命令
void gc() 运行垃圾回收器。
static Runtime getRuntime() 返回与当前 Java 应用程序相关的运行时对象
void exit(int status) 通过启动虚拟机的关闭序列,终止当前正在运行的 Java 虚拟机
class RuntimeDemo { public static void main(String[] args) throws Exception { Runtime r = Runtime.getRuntime(); //Process p = r.exec("notepad.exe"); //Process p = r.exec("c:\\qq.exe");//也可以写全称 //Thread.sleep(4000);//让进程运行4秒 //p.destroy();//秒杀已启动的子进程(就是可以获取对象) Process p = r.exec("notepad.exe RuntimeDemo.java");//将RuntimeDemo.java文件放到记事本上 } }
(三)Date
(1)Date接口表示特定的瞬间,精确到毫秒
(2)构造方法
Date() 分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
Date(long date) 分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,
即1970年1月1日00:00:00GMT)以来的指定毫秒数。
(3)方法摘要:
int compareTo(Date anotherDate) 比较两个日期的顺序。
boolean equals(Object obj) 比较两个日期的相等性。
import java.util.*; import java.text.*; class DateDemo { public static void main(String[] args) { Date d = new Date(); //System.out.println(d);//Wed Jan 23 13:40:43 CST 2013,看的有点晕 //将模式封装到SimpleDateFormat对象中 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日E hh:mm:ss"); //调用format方法,让模式格式化指定Date对象即sdf.format(d) String time = sdf.format(d); System.out.println(time); } }
(四)Calendar
(1)直接已知子类: GregorianCalendar
(2)构造方法:
protected Calendar() 构造一个带有默认时区和语言环境的 Calendar。
protected Calendar(TimeZone zone, Locale aLocale) 构造一个带有指定时区和语言环境的 Calendar。
(3)方法摘要:
static Calendar getInstance() 使用默认时区和语言环境获得一个日历。
import java.util.*; class CalendarDemo2 { public static void main(String[] args) { Calendar c = Calendar.getInstance(); //c.set(1012,0,23);//设置时间为2012年1月23日 c.add(Calendar.YEAR,4);//在当前年份上加四年 printCalendar(c); } public static void printCalendar(Calendar c) { String[] mons ={"一月","二月","三月","四月", "五月","六月","七月","八月", "九月","十月","十一月","十二月"}; String[] weeks ={"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"}; int index = c.get(Calendar.MONTH); int index1 = c.get(Calendar.DAY_OF_WEEK); sop(c.get(Calendar.YEAR)+"年"); sop(mons[index]); sop(c.get(Calendar.DAY_OF_MONTH)+"日"); sop(weeks[index1]); } public static void sop(Object obj) { System.out.println(obj); } }
(五)Math
(1)数学操作类:该类没有构造函数,方法均为静态的
(2)掌握内容
A:成员变量
**E:比任何其他值都更接近e(即自然对数的底数)的double值。
**PI:比任何其他值都更接近pi(即圆的周长与直径之比)的double值。
B:成员方法
**static double abs(double a)
返回 double 值的绝对值。返回绝对值
**static double ceil(double a)
返回最小的(最接近负无穷大)double 值,该值大于等于参数,并等于某个整数。
**static double floor(double a)
返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数。
**max:返回两个值中较大的那个
**min:返回两个值中较小的那个
**static long round(double a) 返回最接近参数的 long。
static int round(float a) 返回最接近参数的 int。
**static double random()
返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。
**static double pow(double a, double b)
返回第一个参数的第二个参数次幂的值。
**static double sqrt(double a)
返回正确舍入的 double 值的正平方根。
class MathDemo { public static void main(String[] args) { for(int x=0;x<10;x++) { int d = (int)(Math.random()*10+1);//1到10之间的随机数 sop(d); } //show(); } public static void show() { double d = Math.ceil(16.34);//ceil返回大于指定数据的最小整数 double d1 = Math.floor(12.34);//floor返回小于指定数据的最大整数 long l = Math.round(12.54);//四舍五入 double d2 = Math.pow(2,3);//返回第一个参数的第二个参数次幂的值 sop("d="+d); sop("d1="+d1); sop("l="+l); sop("d2="+d2); } public static void sop(Object obj) { System.out.println(obj); } } /* 练习,给定一个小数,保留该小数的后两位 */ class MathDemo { public static void main(String[] args) { double d = Math.random(); System.out.println(d); double d = Math.ceil(16.34); } }
(六)Random
(1)产生随机数的类
(2)掌握内容
A:构造方法
**Random() 创建一个新的随机数生成器。
**Random(long seed) 使用单个 long 种子创建一个新的随机数生成器。
B:成员方法
**int nextInt() 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
**int nextInt(int n) 返回一个伪随机数,它是取自此随机数生成器序列的、 在0(包括)和指定值(不包括)之间均匀分布的int值。
import java.util.*; class MathDemo { public static void main(String[] args) { Random r = new Random(); for(int x=0;x<10;x++) { int d = r.nextInt(10)+1;//1到10之间的随机数 System.out.println(d); } }
(七)Scanner
(1)可以获取从键盘的输入数据
(2)掌握内容
构造方法:
Scanner(InputStream source) 构造一个新的 Scanner,它生成的值是从指定的输入流扫描的。
如:Scanner sc = new Scanner(System.in);
方法摘要
sc.nextInt();获取整型数据
sc.nextLine();获取字符串数据
package com.itheima; import java.util.Scanner; /** 输入一个数字组成的数组,输出该数组的最大值和最小值 */ public class Test7 { public static void main(String[] args) { System.out.println("请输入数字"); Scanner scStr = new Scanner(System.in);//从建盘获取字符串 String str= scStr.next();//将Scanner对象中的内容以字符串的形式取出 char[] arr = str.toCharArray();//将获取到的字符串转化为字符数组 //查找数组的最大值 char max = getMax(arr); System.out.println("max="+max); //查找数组的最小值 char min = getMin(arr); System.out.println("min="+min); } public static char getMax(char[] arr){ //定义一个变量,初始化数组中的任意一个元素 char max = arr[0]; //通过循环对数组进行遍历 for(int x=1;x<arr.length;x++){ if(arr[x]>max) max =arr[x];//将遍历到的元素赋值给变量 } return max;//将获取到的最大值返回 } public static char getMin(char[] arr){ //定义一个变量,初始化数组中的任意一个元素 char min = arr[0]; //通过循环对数组进行遍历 for(int x=1;x<arr.length;x++){ if(arr[x]<min) min =arr[x];//将遍历到的元素赋值给变量 } return min;//将获取到的最小值返回 } } package com.itheima; import java.util.Scanner; /** 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。 */ class Test10 { static String ss;//要进行截取操作的字符串 static int n;//截取的字符串的节数 public static void main(String[] args){ System.out.println("输入字符串"); Scanner scStr = new Scanner(System.in);//从建盘获取字符串 ss = scStr.next();//将Scanner对象中的内容以字符串的形式取出 System.out.println("输入字节数"); Scanner scByte = new Scanner(System.in);//从键盘获取字符串 n = scByte.nextInt();//将Scanner对象中的内容以数值的形式取出 Interception(setValue());//方法嵌套方法 } //定义一个将字符串专程字符串数组的方法 public static String[] setValue(){ String[] string = new String[ss.length()];//创建一个字符数组string for(int i=0;i<string.length;i++){ string[i] = ss.substring(i,i+1);//将字符串ss中的第i个字符取出,放入字符数组string中 } return string;//将这个字符数组返回 } public static void Interception(String[] string){ int count = 0;//定义一个计数器 String regex = "[\u4e00-\u9fa5]";//汉字的正则表达式 System.out.println("以每"+n+"个字节划分的字符串为:"); for(int i=0;i<string.length;i++){ //将字符数组中的每一个元素与正则表达式进行匹配,如果形同返回true if(string[i].matches(regex)){ count = count + 2;//如果当前字符是汉字,计数器count就加2 }else{ count = count + 1;//如果当前字符不是汉字,计数器count就加1 } if(count < n){ System.out.print(string[i]);//如果当前计数器count的值小于n,则输出当前字符 }else if(count == n){ System.out.print(string[i]);//如果当前计数器count的值等于n,则输出当前字符 count = 0;//如果当计数器count的值等于n,将计数器清空 System.out.println();//内循环结束,换行 }else{ count = 0;//如果当计数器count的值大于n,将计数器清空,接着去外循环 System.out.println();//内循环结束,换行 } } } }
(八)Object类
(1)是所有类的根类,超类。
java中提供的类以及我们自定义的类都直接或者间接的继承自Object类。
(2)Object类中的方法
A:void finalize()
当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
B:Class getClass()
获取对象的字节码文件的描述类,后面再讲反射的时候还会在说这个类。
String name = s.getClass().getName();
C:int hashCode()
获取对象的哈希值。其实就是对象的内存地址值十进制表示
D:String toString()
返回对象的字符串表示。
表示格式:
getClass().getName()+"@"+Integer.toHexString(hashCode());
一般我们输出对象名的时候,其实底层调用的就是该对象的toString()方法。
这种返回没有意义,所以,我们会重写这个方法,显示类的成员变量信息。
E:boolean equals(Object obj)
用于比较两个对象的地址值是否相同。
我们获取对象后,比较它的地址值意义不大。所以也会对这个方法进行重写。
重写要完成什么功能,是根据需求定的。
(3)==和equals的用法:
A:==怎么用?
他比较的是一个对象在内存中的地址值
**可以用于比较基本数据类型,比较的就是基本数据类型的值是否相等。
**可以用于比较引用数据类型,比较的是对象的地址值是否相等。
比如2个字符串对象
String s1 = new String("str");
String s2 = new String("str");
如果用==号比较,会返回false,因为创建了两个对象,他们在内存中地址的位置是不一样的。
如果用equals比较,会返回true
B:equals怎么用?
他比较对象的内容是否相等
equals只能用于比较引用数据类型的。
**Object提供的equals是用于比较对象地址值是否相同。
**Object类中已经提供了对对象是否相同的比较方法。如果自定义类中也有比较相同的功能,没有必要重新定义。只要沿袭父类中的功能,
建立自己特有比较内容即可。这就是覆盖。
class Demo //extends Object
{
private int num;
Demo(int num)
{
this.num = num;
}
public boolean equals(Object obj)//Object obj = new Demo();//多态
{
if(!(obj instanceof Demo))
return false;
Demo d = (Demo)obj;//向下转型
return this.num == d.num;
}
/*该方法没有必要重新定义
public boolean compare(Demo d)
{
return this.num==d.num;
}
*/
public String toString()
{
return "demo:"+num;
}
}
class Person
{
}
class ObjectDemo
{
public static void main(String[] args)
{
Demo d1 = new Demo(4);
System.out.println(d1);//输出语句打印对象时,会自动调用对象的toString方法。打印对象的字符串表现形式。
Demo d2 = new Demo(7);
System.out.println(d2.toString());
//Class c = d1.getClass();
//System.out.println(d1.toString());
//System.out.println(c.getName());
//System.out.println(c.getName()+"@@"+Integer.toHexString(d1.hashCode()));
//Person p = new Person();
///System.out.println(d1.equals(p));
}
}