/* *String类和StringBuffer类 * 位于java.lang包中 * String类对象中的内容一旦被初始化就不能再改变 * StringBuffer类中用于封装内容可以改变的字符串 * toString()方法转换成String类型 * String x= "a" + 4 + "c"; 编译时等效于 * Stirng x = new StringBuffer().append("a").append(4).append("C").toString(); * *字符串常量(如"hello")实际上是一种特殊的匿名String对象,比较下面的两种情况差导 * String s1 = "hello"; String s2 = "hello"; * 这种情况这两个匿名函数是相等的,因为会将内容相同的常量指向同一个地址 * String s1 = new String("hello"); * String s2 = new String("hello"); * 这种情况两种类型是不相等的,因为内存地址不一样 * * 编程实例:逐行读取键盘输入,直到输入内容为"bye"时 ,结束程序 * * *String 类的常州用成员方法 * 构造方法: * String(byte[] bytes, int offset, int length); * * equalsIgnoreCase 方法与equal方法一样,只是不区分大小写 * * indexOf(int ch) 方法,用于返回一个字符大某一个字符串中首次出现的位置 * * substring(int beginIndex)方法 * substring(int beginIndex, int endIndex); * * * * 基本数据类型的对象包装类 * * 基本数据类型包装类的作用 * 基本数据类型 包装类 * boolean Boolean * byte Byte * char Character * short Short * int Integer * long Long * float Float * double Double * * * 将字符串转换成整数的编程举例 * 在屏幕上打印出一个星号(*)组成的矩形,矩形的宽度和高度通过 *启动程序时传递给main方法的参数指定,并比较下面两段代码的运行效率 * * String sb = new String(); * for(int j=0; j<w; j++) * { sb = sb + '*'; } StringBuffer sb = new StringBuffer(); for(int j=0; j<w; j++) { sb.append('*'); } * * * * * 集合类 * 集合类用于存储一组对象,其中的每个对象称之为元素 * 经常会用到的有Vector, Enumeration, ArrayList * Collection lterator, Set, List等集合类和接口 * * 1 Vector类与Enumeration接口 * 编程举例q:将键盘上输入的一个数字序列中的每位数字存储在Vector对象中,然后在屏幕上打印出每位数字相加的结果 * 例如:输入32 打印出5 * 首先输入的整数也就是ASSIC码转换为Integer对象保存到Vector中 * 然后用Enumberation接口方法来循环整个Vector * Enumberation.hasMoreElements();如果没有元素时返回false,如果还有元素返回true * Enumberation.nextElements(); 返回当前位标的值 * * * * *Collection接口与Iterator接口 * 编程例举:用ArrayList和Iterator改写上面的例子程序 * * *Collection Set, List 的区别如下 * Collection 是Set List的父类 * * Collection各元素对象之间没有指定的顺序,允许有重复元素和多个null元素对象 * Set各元素对象之间没有指定的顺序, * 不允许有重复元素,最多允许有一个null元素对象 * List各元素对象之间有指定的顺序,允许有重复元素和多个null元素对象 * * ArrayList也是实现了一个List的一个类 * * * * hashTable类 * Hashtable类不仅可以象Vector一样动态存储一系列的对象 * 而且对存储的每一个对象(称为值)都要安排一个对象( 称为键字)与之相关支付 Hashtable numbers = new Hashtable(); numbers.put("one", new Integer(1)); numbres.put("two", new Integer(2)); numbers.put("three", new Integer(3)); Integer n = (Integer)numbres.get("two"); if(n!=null){ System.out.println("two="+n); } * * 用作关键字的类必须覆盖Object.hashCode方法和 * Ojbect.equals方法 * * * *Properties类 * Properties类是hashTable的子类 * 增加了将Hashtable对象中的关键字和值保存到文件和从文件中读取关键字的值到Hashtable对象中的方法 * * 如果要用Properties.store方法存储Properties对象中的内容,每个属性的关键字和值都必须是String类型 * * 编程举例:使用Properties把程序的启动运行次数记录在某个文件中,每次运行时打印出它的运行次数 * * * *System与Runtime类 * *System类 * exit方法 * currentTimeMillis方法 * Java虚拟机的系统属性 * 设备虚拟机的系统属性 * java -DAAA=b -DBBB=a MyClass * getProperties和setProperties方法主要是来获取或设置java虚拟机中的系统属性 * * *Runtime类 * Runtime.getRuntime静态方法 * *编程实例:在java程序中启动一个Windows记事本程序的支行实例 *并在该运行实例中打开这个java程序的源文件 *启动的记事本程序5秒钟后被关闭 * * *与日期和时间有关的类 * 最常用的几个类: Date, DateFormat和Calendar * *Calendar类 * Calendar.add方法 * Calendar.get方法 * Calendar.set方法 * Calendar.getInstance静态方法 * GregorianCalendar子类 * * 编程实例: * 计算出距当前日期时间315天后的日期时间 * 并用"XXXX年xx月xx日xx小时: xx分: xx秒"的格式输出 * * Date类 * java.text.DataFormat与java.text.SimpleDateFormat子类 * 编程实例: * 将"2002-03-15"格式的日期字符串转换成 * "2002年03月15日"的格式 * * *Timer与TimerTask类 * schedule方法主要有如下几种重载形式: * schedule(TimerTask task, long delay) * schedule(TimerTask task, Date time) * schedule(TimerTask task, long delay, long period) * schedule(TimerTask task, Date firstTime, long period) * *TimerTask类实现了Runnable接口,要执行的任务由它里面实现的run方法来完成 * * 编程实例,程序启动运行后30秒启动Windows自带的计算器程序 * * *Math与Random类 * Math类包含了所有用于几何和三角运算的方法 * Random类是一个伪随机数产生器 * * 学习API的方法 * 有了某一领域的专业知识,再参看一些范例程序,才能更容易掌握和理解一些新的API类 * 不要看什么Java API大全之类的书籍 * 结交一些程序员朋友,或上一些技术论坛 * 不能纸上谈兵,要敢于动手实践 * * 1 简述一下你是如何理解API的 * 就是java为开发者提供大量的类,方便开发者调用 * * 2 当你要接着以前保存的一个工程继承工和时,应该用JCreator Pror打开工程主目录下的哪里个文件呢? * .jcp文件 * * * 3 查阅JDK文档,通读String和StringBuffer这两个类的所有方法,总结一下这两个类能对字符串进行哪里些处理,了解String类的所有方法后, * 如果有人问:"String类对象中的内容一旦被初始化就不能改变,那么String类中怎么还会有replace和toUpperCase方法呢?这两个方法都要改变字符串中的内容啊?" * 你该如何回答这个问题, * 因为replace以后返回的是一个新的new String对象, * 是否可以这样理解,string里面的都是常量,那么a = string("bac"); 与 b = string("a");中的a的内存地址是一样的? * * 除了可以在JDK文档中仔细阅读这两个方法的帮助外,还可以从JDK安装目录下的src.zip文件件中,查看java.lang.String类的源文代码,了解这两个方法的内部实现 * *4 在JDK文档中查看Integer类的帮助,至少例出将字符串转换成整数的三种方式 * 查看HomeWork项目 * *5 Vector和ArrayList的有什么重要的区别,在什么情况下该使用Vector,在什么情况下该使用ArrayList? * 区别:Vector来能数值为null的值 * 但ArrayList可以有多个值为null和键值 * * *6 编写一个能用作Hashtable关键字的类,其中包含String name 和int age这两个成员变量,并编写出验证该关键类是否正确的测试代码 * * *7 编写打印当前虚拟机的所有系统属性的程序,并在启动这个程序时,为Java虚拟机增加一个系统属性 * *8 为什么时候Runtime类被设计成不能在程序中直接创建它的实例对000000000000000000000000000000000000000000000000000000000000000000象?java设计者又是通过什么样的方式来保证在程序中只能有一个Runtime实例对象的呢? * *9 修改前面讲解的Timer与TimerTask类的例子程序代码,让该程序启动windows自带的计算器程序后立即结束 * * **/ package org.it315.sencondproj; public class SencondDemo { public int x = 1; /** * Method main * * * @param args * */ public static void main(String[] args) { // TODO: Add your code here if(args.length > 0) { System.out.println("the first Param is "+args[0]); }else{ new SencondDemo().callA(new A()); } } /** * Method callA * * * @param a * */ public static void callA(A a) { // TODO: Add your code here a.sayHello(); } }
Hashtable
import java.util.*; public class HashtableTest { /** * Method main * * * @param args * */ public static void main(String[] args) { // TODO: Add your code here Hashtable numbers = new Hashtable(); numbers.put(new MyKey("张三",18), new Integer(1)); numbers.put(new MyKey("李四",15), new Integer(2)); numbers.put(new MyKey("王五",20), new Integer(3)); //取得所有数据 Enumeration e = numbers.keys(); while(e.hasMoreElements()) { MyKey key = (MyKey)e.nextElement(); System.out.print(key+"="); System.out.println(numbers.get(key)); } //如果没有覆盖hashcode()方法跟equal方法的话,那么这个第三取出来将为空值 System.out.println(numbers.get(new MyKey("张三",18))); } } public class MyKey { private String name = null; private int age = 0; public MyKey(String name, int age) { this.name = name; this.age = age; } public boolean equals(Object obj) { if(obj instanceof MyKey) { MyKey objTemp = (MyKey)obj; if(name.equals(objTemp.name) && age==objTemp.age) { return true; }else{ return false; } }else{ return false; } } public int hashCode() { //StrinbBuffer类不能用做关键字类 return name.hashCode() + age; } public String toString() { return "name:"+this.name+", age:"+this.age; //return name+", "+age; } }
Properties
import java.util.*; import java.io.*; public class PropertiesFile { /** * Method main * * * @param args * */ 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){ //e.printStackTrace(); settings.setProperty("count",String.valueOf(0)); } //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("动行了:"+(endTime - startTime)+"秒"); } }
Calendar
import java.util.*; import java.text.SimpleDateFormat; public class TestCalendar { /** * Method main * * * @param args * */ public static void main(String[] args) { // TODO: Add your code here Calendar c1 = Calendar.getInstance(); System.out.println(c1.get(Calendar.YEAR)+"年"+c1.get(Calendar.MONTH)+"月"+c1.get(c1.DAY_OF_MONTH)+"日 "+c1.get(c1.HOUR)+":"+c1.get(c1.MINUTE)+":"+c1.get(c1.SATURDAY)); c1.add(c1.DAY_OF_YEAR,315); System.out.println(c1.get(Calendar.YEAR)+"年"+c1.get(Calendar.MONTH)+"月"+c1.get(c1.DAY_OF_MONTH)+"日 "+c1.get(c1.HOUR)+":"+c1.get(c1.MINUTE)+":"+c1.get(c1.SATURDAY)); 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(); } //System.out.println(d.toString()); Timer tm =new Timer(); tm.schedule(new MyTimerTask(tm),3000); //new Timer(true).schedule( //}, //3000); } } 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(); } //加载结束任务线程 //System.exit(); this.tm.cancel(); //TimerTask.cancel(); } }
Integer
public class TestInteger { /** * Method main * * * @param args * */ public static void main(String[] args) { // TODO: Add your code here int w = new Integer(args[0]).intValue(); int h = Integer.parseInt(args[1]); //int h = Integer.valueOf(args[1]).intValue(); //将字符串转换为整数的三种方法 for(int i=0; i<h; i++) { StringBuffer sb = new StringBuffer(); for(int j=0; j<w; j++){ sb.append('*'); } System.out.println(sb.toString()); } } }
Vector /ArrayList
//import java.util.Vector; //import java.util.Enumeration; import java.util.*; public class TestCollection { /** * Method main * * * @param args * */ public static void main(String[] args) { // TODO: Add your code here ArrayList v = new ArrayList(); System.out.println("请输入一串数值:"); while(true) { int b =0; try{ b = System.in.read(); }catch(Exception e){ e.printStackTrace(); } //其实这里的int b是对应的字母的ASSIC码的值,所以不能直接将它保存到Vector中去 if(b==' ' || b==' ') { break; }else{ int number = b-'0'; v.add(new Integer(number)); } } int sum = 0; //Enumeration e = v.elements(); //(Integer)e.nextElement(); 不是返回下一个对象,而是返回指标器正指向的对象 //e.hasMoreElements();如果没有对象将返回false,如果还有对象将返回true Iterator e = v.iterator(); //while(e.hasMoreElements()) while(e.hasNext()) { //Integer intObj = (Integer)e.nextElement(); Integer intObj = (Integer)e.next(); sum += intObj.intValue(); } System.out.println("相加总和为:"+sum); } } import java.util.*; public class TestSort { /** * Method main * * * @param args * */ public static void main(String[] args) { // TODO: Add your code here ArrayList al = new ArrayList(); al.add(new Integer(1)); al.add(new Integer(5)); al.add(new Integer(4)); al.add(new Integer(3)); al.add(new Integer(2)); al.add(new Integer(9)); System.out.println("排序前:"); System.out.println(al.toString()); Collections.sort(al); System.out.println("排序后:"); System.out.println(al.toString()); //Collections主要操作集合类对象,一般的方法的是静态类 } } import java.util.Vector; import java.util.Enumeration; public class TestVector { /** * Method main * * * @param args * */ public static void main(String[] args) { // TODO: Add your code here Vector v = new Vector(); System.out.println("请输入一串数值:"); while(true) { int b =0; try{ b = System.in.read(); }catch(Exception e){ e.printStackTrace(); } //其实这里的int b是对应的字母的ASSIC码的值,所以不能直接将它保存到Vector中去 if(b==' ' || b==' ') { break; }else{ int number = b-'0'; v.addElement(new Integer(number)); } } int sum = 0; Enumeration e = v.elements(); //(Integer)e.nextElement(); 不是返回下一个对象,而是返回指标器正指向的对象 //e.hasMoreElements();如果没有对象将返回false,如果还有对象将返回true while(e.hasMoreElements()) { Integer intObj = (Integer)e.nextElement(); sum += intObj.intValue(); } System.out.println("相加总和为:"+sum); } }