黑马程序员————java API

黑马程序员————java API  

Object 类
Object类是所有Java类的根父类
如果在类的声明中未使用extends关键字指明其父类,则默认父类为Object类 
 public class Person {
 ...
 }
 等价于:
public class Person extends Object {
...
}
例:method(Object obj){…}//可以接收任何类作为其参数
Object o=new Person();  
method(o);

toString()方法在Object类中定义,其返回值是String类型,返回类名和它的引用地址。
在进行String与其它类型数据的连接操作时,自动调用toString()方法
 Date now=new Date();
 System.out.println(“now=”+now);
 相当于 System.out.println(“now=”+now.toString());
可以根据需要在用户自定义类型中重写toString()方法
 如String 类重写了toString()方法,返回字符串的值。
 s1=“hello”;
 System.out.println(s1);//相当于System.out.println(s1.toString());
 输出:hello

String类和StringBuffer类
位于java.lang包中。
String类对象中的内容一旦被初始化就不能再改变。
StringBuffer类用于封装内容可以改变的字符串。
用toString方法转换成String类型
String x="a"+4+"c";编译时等效于:
String x=new StringBuffer().append("a").append(4).append("c").toString;

注意\n和\r区别:
在windows下键盘回车的表示是\r\n组合,也即按下一次键,将产生两个字符。(其中\r表示回车,\n表示换行,)
在unix中回车只用\n表示。
所有系统都用\n表示一行的结束。所以在windows下输入字符按下回车键后不能将\r保存到buf数组中,只能break。
在Jbuilder中,回车用\n表示即可,若有输入操作的程序在其中调试可以运行,但到windows环境下可能出错,例如在Jbuilder中读文件”abc.txt”,以回车结束(\n),运行没问题,但在windows 的jdk平台下运行就老出错,原因就是在windows下读取的文件名是:”abc.txt\r”。

封装类
基本数据类型 封装类
boolean         Boolean
byte         Byte
short         Short
int          Integer
long         Long
char         Character
float         Float
double         Double
封装类用法举例
int i = 500;
Integer t = new Integer(i);
int j = t.intValue(); // j = 500,intValue取出封装类中的数据
String s = t.toString();  // s = “500“,t是类,有toString方法
String s1 = Integer.toString(314);     // s1= “314“  调用Integer类的另一个toString方法。
Vector类与Enumeration接口
AVA中没有动态数组, vector类提供了一种与"动态数组"相近的功能,它可用于保存一系列对象,对于存放对象数目不确定,或想方便获得某个对象的存放位置,就可以用vector.     Enumeration是个接口,它生成一系列元素,一次生成一个,连续调用 nextElement 方法将返回一系列的连续元素, vector与Enumeration有什么关系呢??因为Enumeration是接口,不能创建自己的实例对象,需通过Vector中的方法elements返回一个Enumeration接口对象;
例子:
import java.util.*;
import java.io.*;
public class testvector
{
 public static void main (String[] args) 
  {
   int b = 0;
   Vector v = new Vector();//创建Vector对象V;
   System.out.println("Input number:");
   while(true)
   {
    try
    {
    b = System.in.read();
    }
    catch(IOException e)
    {
     e.printStackTrace();
    }
    if(b=='/r'||b=='/n')
    break;
    else
    {
     int num = b-'0';/*因为b所得到是ASICC号值(1的ASSICC码为49, 0的ASICC码为48),当输入的数为1时,其对应ASICC码为49(49-48==1),所以b-'0'将得到b的数值*/
     v.addElement(new Integer(num)); /*addElement作用是增加对象,它只能接受对象类型数据,因此要将num转换成Integer对象;*/
    }
   }
   int numb = 0;
   Enumeration e = v.elements();  /* Vector中的方法elements将返回一个Enumeration接口对象;*/
   while(e.hasMoreElements())
   {
    Integer intobj = (Integer)e.nextElement();  /*nextElement()不是返回下一个对象,而是返回当前所指的对象,并把指针指向下一个对象,如果指向了一个空对象,返回false,否则true; nextElement()返回的是对象类型,所以要转换成integer类型*/
    numb += intobj.intValue(); /*intValue是将integer对象转换成int基本数据类型;*/
   }
   System.out.println(numb);
  }
}

ArrayList和LinkedList的比较
ArrayList底层采用数组完成,而LinkedList则是以一般的双向链表(double-linked list)完成,其内每个对象除了数据本身外,还有两个 引用,分别指向前一个元素和后一个元素。
如果我们经常在List的开始处增加元素,或者在List中进行插入和删除操作,我们应该使用LinkedList,否则的话,使用ArrayList将更加快速。

Hashtable和Properties类
Properties类是Hashtable的一个子类,设计用于String keys和values。Properties对象的用法同Hashtable的用法相象
Properties类可实现属性名到属性值的映射,属性名和属性值均为String类型.
Properties类的 propertyNames() 方法可以返回以Enumeration枚举类型表示的所有可用系统属性属性名.
Properties类的 getProperty(String key)方法获得String参数所指定的系统属性的属性值(返回的属性值也为String类型).
Properties类的load和save方法可以实现将系统属性信息写入文件和从文件中读取属性信息。
import java.util.*;

public class OODemo30{
public static void main(String []args){
   Properties p = new Properties();
   p.setProperty("中国首都","北京");
   p.setProperty("美国总统","奥巴马");
   p.setProperty("巨人总裁","脑白金");
   System.out.println(p.getProperty("中国首都"));
   System.out.println(p.getProperty("日本首都","不存在"));
   }
}

输出结果:
北京
不存在

System类 和Runtime类
System类
System类代表当前程序运行平台,提供了代表标准输入(System.in)输出(System.out)和错误输出(System.err)的类属性;并提供一些静态方法用于访问环境变量、系统属性;还提供了加载文件和动态链接库的方法

示例代码:(访问环境变量和系统属性)
public class TestSystem {

 /**
  * @param args
  * @throws IOException 
  * @throws FileNotFoundException 
  */
 public static void main(String[] args) throws FileNotFoundException, IOException {
  // TODO Auto-generated method stub
  //获取系统所有的环境变量
  Map<String,String> env = System.getenv();
  for(String name : env.keySet()){
   System.out.println(name+"------>"+env.get(name));
  }
  //获取指定的环境变量的值
  System.out.println(System.getenv("JAVA_HOME"));
  //获取系统所有属性
  Properties pro = System.getProperties();
  //将所有属性保存到pro.txt中
  pro.store(new FileOutputStream("pro.txt"), "System Properties");
  //输出特定的系统属性
  System.out.println(System.getProperty("os.name"));
 }
}
Runtime类
Runtime类代表Java程序的运行时环境,每个Java程序都有一个与之对应的Runtime实例,应用程序通过该对象与其运行时环境相连,该类可以访问JVM的相关信息,如处理器数量、内存信息等。

示例代码:public class TestRuntime {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Runtime rt = Runtime.getRuntime();//调用静态方法getRuntime()来得到一个实例对象
  System.out.println("处理器数量:"+rt.availableProcessors());
  System.out.println("空闲内存数:"+rt.freeMemory() );
  System.out.println("总内存数:"+rt.totalMemory());
  System.out.println("可用最大内存数:"+rt.maxMemory());
 }

}

Date Calendar和DateFormat类
一、Date类
Date类可以在java.util包中找到,用一个long类型的值表示一个指定的时刻。它有一个有用的构造函数是Date(),它以当前的日期和时间初始化一个Date 对象。
常用方法:
getTime()方法返回Date对象的long值
实例:使用Date构造函数创建一个表示程序运行时刻的对象,并且利用getTime()方法找到这个日期代表的毫秒数量。
import java.util.*;

public class Now{
    pulic static void main(String args[]){
       Date now=new Date();
       long nowLong=now.getTime();
       System.out.println("Value is "+nowLong);
    }
}
二、Calendar类
Calendar类是一个抽象基类,主要用于完成日期字段之间相互操作的功能,GregorianCalendar类是JDK目前提供的一个唯一的Calendar子类。
常用方法:
1.Calendar.add()方法可以实现在某日期的基础上增加若干天(或年、月、日、时、分、秒等日期字段)后的新日
期。
2.Calendar.get()方法可以取出日期对象中的年、月、日、时、分、秒等日期字段的值。
3.Calendar.set()方法修改日期对象中的年、月、日、时、分、秒等日期字段的值。
4.Calendar.getInstance()方法返回预设了当前时间的GregorianCalendar类对象。

GregorianCalendar类
GregorianCalendar类可以在java.util包中找到,使用GregorianCalendar类的构造函数GregorianCalendar(int year,int month,int date)可以创建一个任意日期。
其中,要注意月份的表示,一月是0,二月是1,以此类推,十二月是11。父类Calendar用常量表示月份JANUARY,FEBRUARY等等。
三、DateFormat类
DateFormat类在java.text包中可以找到,它是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并分析日期或时间。日期/时间格式化子类(如SimpleDateFormat)允许进行格式化(也就是日期-->文本)、分析(文本-->日期)和标准化(将日期表示为Date对象,或者表示为从GMT(格林尼治标准时间)1970年1月1日00:00:00这一刻开始的毫秒数)。DateFormat类的一个目标是建立一个人们能够识别的字符串。然而,因为语言的差别,不是所有的人希望看到严格的相同格式的日期。所以,一个DateFormat的实例创建以后,这个对象包含了日期的显示格式的信息。
常用方法:
1.getDateInstance()如果用户电脑区域设置为缺省的格式,则可以用该方法创建DateFormat对象。
    DateFormat df=DateFormat.getDateInstance();
2.format()转换Date对象为一个字符串
实例1:
import java.util.*;

public class NowString{
    public static void main(String args[]){
       Date now=new Date();
       DateFormat df=DateFormat.getDateInstance();
       String s=df.format(now);
       System.out.println("Today is "+s);
    }
}

例子2:
import java.util.*;
import java.text.SimpleDateFormat;;
public class TestCalendar {
 public static void main(String[] args) {
  Calendar c1=Calendar.getInstance();
  System.out.println(c1.get(c1.YEAR)+"年"+c1.get(c1.MONTH)+"月"+
    c1.get(c1.DAY_OF_MONTH)+"日"+c1.get(c1.HOUR)+":"+c1.get(c1.MINUTE)+
    ":"+c1.get(c1.SECOND));
  c1.add(c1.DAY_OF_YEAR, 315);
  System.out.println(c1.get(c1.YEAR)+"年"+c1.get(c1.MONTH)+"月"+
    c1.get(c1.DAY_OF_MONTH)+"日"+c1.get(c1.HOUR)+":"+c1.get(c1.MINUTE)+
    ":"+c1.get(c1.SECOND));
  
  SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd");
  SimpleDateFormat sdf2=new SimpleDateFormat("yyyy年MM月dd日");
  try
  {
  Date d=sdf1.parse("2003-03-15");
  System.out.println(sdf2.format(d));
  }
  catch(Exception e)
  {
   e.printStackTrace();
  }
}

Timer与TimerTask
java2的开发包中提供了一种很使用的线程功能:提前安排将来某段时间执行某任务Timer ,TimerTask。
   你可以使用这些类创建后台进程,让其在等待一段规定的时间后执行,或者让其每隔一段时间执行。
   你也可以用Thread来完成,但利用Timer与TimerTask显然省事不少。
   TimerTask实现了Runnable接口,待执行的任务置于run()中。
   Timer是一个安排TimerTask的类,因此两者一般一起工作。所应用时首先应创建一个TimerTask的对象,
   然后用一个Timer的类对象安排执行它
   Timer类包含的方法有:
   1.Timer()
   以常规方式运行task
   2.Timer(boolean)
   true时使用后台进程线程。只要剩下的程序继续运行,后台进程线程就会执行。
   3.public void cancel()
   终止Timer的功能执行,但不会对正在执行的任务有影响。当执行cancel方法后将不能再用其分配任务。
   4.public void schedule(TimerTask task,Date time)
   task被安排在time指定的时间执行,如果时间为过去时则任务立刻执行。
   5.public void schedule(TimerTask task, Date firstTime, long period)
   task被安排在time指定的时间执行,执行后将每隔period(毫秒)反复执行。
   6.public void schedule(TimerTask task, long delay)
   task被安排在delay(毫秒)指定的时间后执行。
   7.public void schedule(TimerTask task,long delay, long period)
   task被安排在delay(毫秒)指定的时间后执行。执行后将每隔period(毫秒)反复执行。
   8.public void scheduleAtFixedRate(TimerTask task,Date firstTime, long period)
   task被安排在firstTime指定的时间执行。执行后将每隔period(毫秒)反复执行。每一次重复的时间时和第一次执行而不是和前一次执行有关。因此执行的总速度是固定的。
   9.public void scheduleAtFixedRate(TimerTask task,long delay,long period)
   task被安排在delay(毫秒)指定的时间后执行。执行后将每隔period(毫秒)反复执行。每一次重复的时间时和第一次执行而不是和前一次执行有关。因此执行的总速度是固定的。
   TimerTask的主要方法:
   1.public boolean cancel()
   终止任务的执行运行。如果Timer时要求循环执行的,如果正在执行,则执行完了就再不会循环。如果还未执行或处于停歇期,则不会执行了
   2.public abstract void run()
   3.public long scheduledExecutionTime()
   返回被安排最后执行任务的时间。一般确定任务的当今的实行是否足够及时 ,证明进行被计划的活动为正当: 
   public void run() {
        if (System.currentTimeMillis() - scheduledExecutionTime() >=
            MAX_TARDINESS)
                return;   // Too late; skip this execution.
        // Perform the task
    }
   4.protected TimerTask()
例子:
import java.util.*;
import java.text.SimpleDateFormat;;
public class TestCalendar {
 public static void main(String[] args) {    
  class MyTimerTask extends TimerTask
  {
   private Timer tm=null;
   public MyTimerTask(Timer tm)
   {
    this.tm=tm;
   }
   public void run()
   {
    try
    {
    //运行Windows自带的计算器
    Runtime.getRuntime().exec("calc.exe");
    }
    catch(Exception e)
    {
     e.printStackTrace();
    }
    //结束任务线程的代码
    tm.cancel();
    //TimerTask.cancel();
    //this.cancel();
   }
  }
  
       Timer tm=new Timer();
  tm.schedule(new MyTimerTask(tm)
  , 5000);
  //new Thread(new MyTimerTask()).start();

 }

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值