黑马程序员Java培训、Android培训_JavaAPI-2

 由于5月6日的笔记无法编辑,此篇为覆盖

四、             基本数据类型的对象包装类

基本数据类型(不具有对象特性)    包装类

boolean                                             Boolean

byte                                                  Byte

char                                                  Character

short                                                 Short

int                                                    Integer

long                                                  Long

float                                                  Float

double                                               Double

将字符串转换成整数的编程举例:

在屏幕上打印一个星号组成的矩形,矩形的宽度和高度通过启动程序时传递给main方法的参数指定,并比较下面两段代码的运行效率:(结果差别不大,左边比右边的效率高)

String sb = new String();                                       StringBuffer sb = new StringBuffer();

for(int j = 0;j<w;j++)                                              for(int j = 0;j<w;j++)

{                                                                           {

       sb = sb + ‘*’;  //创建新对象后被覆盖            sb.append(‘*’);//每次调用不创建新对象

}                                                                           }

左边,每一次运行先将sb转换为StringBuffer,再将星号追加到StringBuffer当中,新的结果再调用tostring方法,转换成String对象,接着,在第二次循环时又要重复刚才的过程,也要执行这条语句“sb + ‘*’”,这条语句每次执行后都会形成新的String对象,然后让sb指向这个新的String对象;

右边,每次循环,调用的都还是在循环外面创建的StringBuffer对象,在循环里面没有产生新的StringBuffer对象,没有创建任何对象,所以它(sb.append(‘*’))的运行效率要比左边语句(sb + ‘*’)的运行效率要高

五、             集合类

集合类用于存储一组对象,其中的每个对象称之为元素,经常会用到的有Vector、Enumeration、ArrayList、Collection、Iterator、Set、List等集合类和接口。

5.1Vector类与Enumeration接口,存在于Java.util包中。

Vector类是java语言提供的高级存储结构,可用于保存一系列的对象,java语言没有动态数组,Vector类提供一种跟动态数组相近的功能,如果要想将若干对象保存在一个数组结构中,但不能预先确定要保存对象的数目时,Vector类是一个不错的选择

编程举例:将键盘上输入的一个数字序列中的每位数字存储在Vector对象中,然后在屏幕上打印出每位数字相加的结果,例如,输入32,打印5;输入1234,打印10.

编程举例:将输入的数字序列各个位数相加并打印显示出来;

import java.util.*;                                                                 //Vector类与Enumeration接口,都存在于Java.util包中

public class TestVector {

       public static void main(String[] args) {

              // TODO: Add your code here

              Vector v = new Vector();                                          //定义Vector对象,以便后面往里面存数据,可以存储各种类型数据;

              System.out.println("please enter number:");

              int b = 0;                                                                //方法中定义变量必须初始化;

while(true)                                                                          //连续读取多个字符

              {

                     try

                     {

                             b = System.in.read();                               //读取的内容放到整数变量b中,读取的内容需要判断

                     }

                     catch(Exception e){e.printStackTrace();}

                     if(b=='\r' || b =='\n')

                            break;

                     else

                     {

                            int num = b-'0';//如果将1存到b中,则b实际存的是字符1在内存中的ASCII值,就是49,,想得到实际的整数1,需要减去‘0’('0'=48);

                           v.addElement(new Integer(num));//将num用Integer包装对象后,装入到Vector对象V中,使用方法addElement;

                     }

              }

              int sum = 0;                  //数据全部存储到Vector中后,用sum存储所有数据相加后的结果;

              Enumeration e = v.elements();//必须调用elements()方法取出Vector类中所有的数据,其返回一个Enumeration实例对象。

              //e.nextElement()该方法可以逐一取出Enumeration对象中存储的整数元素;返回指示器正在指向的那个元素对象,返回object对象,然后指示器会下一个;

              //e.hasMoreElements()返回FALSE,就说明这个指示器指向空对象,没有对象返回;返回True

              while(e.hasMoreElements())

              {

                     Integer intObj = (Integer)e.nextElement();

                     sum += intObj.intValue();//intValue取出对象中所包装的元素;

              }

              System.out.println(sum);

       }

}

5.2Collection接口与Iterator接口,Collection接口的实现类和Vector类似,方法名不同

改写上例:用ArrayList和Iterator改写上面的例子

important Java.util.*;

pulic class TestVector{

       public static void main(String [] args){

              ArrayList v = new ArrayList();//实现Collection接口;不考虑线程通信同步时效率高;

              System.out.println(“please enter number:”);

              int b = 0;

while(true)

              {

                     try

                     {

                            int b = System.in.read();

                     }

                     catch(Exception e){e.printStackTrace();}

                     if(b==’\r’ || b ==’\n’)

                            break;

                     else

                     {

                            int num = b –‘0’;//得到数字字符对应的整数

                            v.addElement(new integer(num));

                     }

              }

              int sum = 0;

              Iterator e = v.iterator();

              while(e.hasNext())

              {

Integer intObj = (Integer)e.next();

                     sum += intObj.intValue();

}

System.out.println(sum);

}

两种类的方法和作用都一样。

Vector类中所有的方法都是线程同步的,如果用两个线程并发的去访问Vector对象,这是安全的,但是即使只有一个线程访问Vector对象时,仍然存在这个同步监视器检测的情况,这就需要额外的开销,程序的运行效率将会降低;ArrayList类中的所有方法是不同步的,如果程序中不存在多线程安全的问题,使用ArrayList运行效率要比使用Vector的运行效率要高些。如果程序中存在多线程安全的问题,使用ArrayList将需要编程人员自己对访问ArrayList对象的程序代码进行同步输入,而使用Vector类不需要这样做。

5.3Collection、Set、List接口区别(后二者为前者的子类):

Collection接口中各个元素对象之间无指定顺序,允许有重复元素和多个Null元素对象;

Set各个元素对象之间无指定顺序,不允许有重复元素,最多允许有一个Null元素对象;

List各个元素对象之间有指定顺序,允许有重复元素和多个Null元素对象;

对ArrayList对象排序:

ArrayList al = new ArrayList();

al.add(new Integer(1));

al.add(new Integer(3));

al.add(new Integer(2));

System.out.println(al.toString());//调用toString方法转换为字符串;

Clolections.sort(al);// Clolections都是静态方法,只是提供方法,操作集合对象,进行排序;

System.out.println(al.toString());

六、             Hashtable与Properties类

6.1Hashtable不仅可以像Vector一样动态存储一系列的对象,而且对存储的每一个对象(称为值)都要安排另一个对象(称为关键字)与之相关联。向Hashtable中存储数据,如下:

Hashtable number = new Hashtable();

number.put(“one”,new Integer(1));put方法结束one关键字对象和1值

number.put(“two”,new Integer(2));

number.put(“three”,new Integer(3));

检索关键字

Integer n = (Integer)number.get(“two”);

if(n!=null)

{

       System.out.println(“two =”+n);

}

用作关键字的类必须覆盖Object.hashCode方法和Object.equals方法。

该两个方法其实是为Hashtable get方法准备的,不是为自己调用使用的,如果不自定义代码覆盖这两个方法,get方法就只能取到空;

6.2Properties类

Properties类是Hashtable的子类;

增加了将Hashtable对象中的关键字和值保存到文件和从文件中读取关键字和值到Hashtable对象中的方法

如果要调用Properties.store方法存储Properties对象中的内容,每个属性的关键字和值都必须是String类型,查看JDK文档

编程举例:使用Properties把程序的启动运行次数记录在某个文件中,每次运行时打印它的运行次数。

import java.util.Properties;

import java.io.*;

public class PropertiesFile {

 

       public static void main(String[] args) {

              // TODO: Add your code here

              long startTime = System.currentTimeMillis();

              Properties settings = new Properties();

              try

              {

                     settings.load(new FileInputStream("count.txt"));//需要新产生实例对象;

              }

              catch(Exception e)

              {

                     settings.setProperty("count",String.valueOf(0));//实际是调用底下的new Integer(c).toString()方法将整数转换为字符串的

              }

                     //settings.get("count");

              int c = Integer.parseInt(settings.getProperty("count"))+1;

              System.out.println("这是第"+ c +"次运行" );

 

              //settings.put("count",new Integer(c).toString());可以接受非字符串的字符参数,还是用下面的好

              settings.setProperty("count",new Integer(c).toString());

              try

              {

                     settings.store(new FileOutputStream("count.txt"),"Program is used:");

              }

              catch(Exception e)

              {

                     e.printStackTrace();

              }

              long endTime = System.currentTimeMillis();

              System.out.print("total running time:" + (endTime-startTime));

       }

}

一、System类与Runtime类

7.1System类

-exit方法,结束java虚拟机的运行,如果是因为程序发生了异常,我们想结束其运行,我们传递非0值作为参数;如果是用户正常运行,我们想终止java虚拟机操作,应该传递一个0作为参数;

-currentTimeMillis方法,是返回到1970年1月1日0点0分0秒起至当前时刻以毫秒为单位的一个值,一个浪琴的大数字;根据这个数值来推断时间;使用这个方法可以检测运行一段程序所用的时间;

-Java虚拟机的系统属性

java –DAAA=b –DBBB=a MyClass

-getProperties和setProperties方法,返回参数是Property实例对象;

编写程序打印当前虚拟机中所有系统属性

7.2Runtime类

-Runtime.getRuntime静态方法

编写实例:在Java程序中启动一个Windows记事本程序的运行实例,并在该运行实例中打开这个java程序的源文件,启动的记事本程序5秒钟后被关闭;

二、与日期和时间有关的类

-最常用的几个类:Date、DateFormat类和Calender

8.1Calendar类:

-Calendar.add方法;

-Calendar.get方法,获取值;

-Calendar.set方法用以修改Calendar中已经存储的值;

-Calendar.getInstance静态方法:Calendar类是个抽象基类,它需要通过Calendar.getInstance方法来返回一个Calendar类型,也即是其子类的一个实例对象;

-GregorianCalendar子类  是JDK中目前唯一提供的Calendar的一个子类;

编写应用程序计算出距当前日期时间315天后的日期时间,并用“****年**月**日**小时:**分:**秒”的格式输出。

Date类 在某些情况函数调用的就是Dat类,就只能用Date类,而不能用Calendar类,程序中调用的函数方法的参数为Date的就只能用Date;

java.text.DateFormat与java.text.SimpleDateFormat(格式为本地化字符串)子类,位于Java.text.SimpleDateFormat包中

编写实例:将“2002-03-15”格式的日期字符串换成“2002年03月15日”的格式

import java.util.*;

import java.text.SimpleDateFormat;

public class TestCalendar {

 

       public static void main(String[] args) {

              // TODO: Add your code here

              Calendar cl = Calendar.getInstance();

              System.out.println(cl.get(Calendar.YEAR)+ "年" +cl.get(cl.MONTH)+ "月"+ //类名和实力对象名调用常量都行;

                     cl.get(Calendar.DAY_OF_MONTH)+ "日" +cl.get(cl.HOUR)+ ":"+

                     cl.get(Calendar.MINUTE)+ ":" + cl.get(cl.SECOND));

              cl.add(cl.DAY_OF_YEAR,315);

              System.out.println(cl.get(Calendar.YEAR)+ "年" +cl.get(cl.MONTH)+ "月"+ //类名和实力对象名调用常量都行;

                     cl.get(Calendar.DAY_OF_MONTH)+ "日" +cl.get(cl.HOUR)+ ":"+

                     cl.get(Calendar.MINUTE)+ ":" + cl.get(cl.SECOND));

              SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");

              SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日");

              try

              {

                     Date d = sdf1.parse("2002-03-15");

                     System.out.println(sdf2.format(d));

              }

              catch(Exception e)

              {

                     e.printStackTrace();

              }

//daemo         

              class MyTimerTask extends TimerTask

              {

                     private Timer tm = null;

                     public MyTimerTask (Timer tm)

                     {

                            this.tm = tm;

                     }

                     public void run()

                     {

                            try

                            {

                                   Runtime.getRuntime().exec("calc.exe");

                            }

                            catch(Exception e)

                            {

                                   e.printStackTrace();

                            }

                            tm.cancel();

                     }

              }

              Timer tm = new Timer();

              tm.schedule(new MyTimerTask(tm)

                            ,30000);

                            //new Thread(new MyTimerTask()).start();

       }

}

三、Timer与TimerTask类

schedule方法主要有如下几种重载形式:

       schedule(TimerTask task,long delay)//隔多长时间以后执行task类中代码

       schedule(TimerTask task,Date time) //什么时间开始执行task类中代码

       schedule(TimerTask task,long delay,long period) //隔多长时间以后开始定期执行task类中代码

       schedule(TimerTask task,Date fistTime,long period) //从什么时间开始定期执行task类中代码

TimerTask类实现了Runnable接口,要执行的任务由它里面实现的run方法来完成。

四、Math与Random类

Math类包含了所有用于几何和三角运算的方法;

Random类是一个伪随机数(按某种规则)产生器;random不带参数的构造函数使用当前时刻来初始化random类,通过这种方式传递给random类对象的参数每次是不一样的五、学习API的方法

有了某一领域的专业知识,再参看一些范例程序,才能更容易掌握和理解一些新的API类;

不要看什么Java API大全之类的书籍,掌握本章介绍的类为主;

结交一些程序员朋友,或上一些技术论坛;

多掌握处理问题的原理、问题处理过程和方法,有实际具体的需求后,查阅JDK相关帮助文档才是可行的;

不能纸上谈兵,要敢于思考实践;

思考与实践:

1、简述一下你是如何理解API的?

API是我们使用应用程序的助手工具,提简化了我们使用工具的方法,只需知道怎么调用,而不必了解内部具体原理,类似使用照相机一样,我们没必要花时间去了解照相机内部的组成结构,照样可以操作使用其照相功能。

2、当你要接着以前保存的一个工程继续工作时,应该用JcreatorPro打开工程主目录下哪个文件?

双击jcw工作区文件打开,在工作区视图中找到以前保存的工程点击打开。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值