星期一, 十一月 16, 2015 10:09:18
存储类的仓库---Java常用类库
Java类库就是Java API (应用程序接口),是系统提供的已实现的标准类的集合,
使用Java类库可以完成涉及字符串处理、图形、网络等多方面的操作。
掌握Java类库的相关概念
System类和Runtime类
熟悉Math和Random类
了解对象克隆相关知识
一、API相关概念
应用程序编程接口
提供一些控制机器人的Java类(含有操作机器人的各种动作的方法),
只需要为每个机器人安排一个类的实例对象,再调用这个对象的各种方法,
机器人就会去执行各种动作。
这个Java类就是机器人厂家提供的应用程序编程的接口。
二、String类和StringBuffer类
2.1 String
String类的字符用于比较两个字符串,查找和抽取中的字符或子串,进行字符串与其他类型之间的相互转换等。
String类对象的内容一旦被初始化就不能再改变。
2.2 StringButter
StringButter类用于内容可以改变的字符串,可以将其他各种类型的数据增加、插入到字符串中,也可以转置字符串中原来的内容。
在StringBuffer.toString()方法将其转换成String--->就可以使用String类的各种方法。
“+”操作符的功能是通过StringBuffer类和它的append方法实现的。
注意:
在实际的开发中,如果需要频繁改变字符串的内容,就要考虑用StringBuffer类实现,因为其内容可以改变,所以执行性能比String类更高。
三.基本数据类型的包装类
3.1从JDK中-->Java中的很多类的很多方法的参数类型都是Object,
3.2Java中的基本数据类型8中对应的基本数据类型的包装类也有8种
3.3如何去使用包装类
代码案例:
package day15;
public class IntegerTest {
public static void main(String[] args) {
String s = "123";
//使用包装类:将字符串转换成基本数据类型
int i = Integer.parseInt(s);
i=i+1;
System.out.print(i);
}
}
运行结果:
124
四.System类 与 Runtime类
4.1 System类
Java不支持全局方法和变量,Java设计者将一些系统相关的重要方法和变量收集到了一个统一的类中,是System类。
代码案例:
打印环境变量的属性和值
package day15;
import java.util.Enumeration;
import java.util.Properties;
public class SystemTest {
public static void main(String[] args) {
/*public class Propertiesextends Hashtable<Object,Object>
* Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。
* 属性列表中每个键及其对应值都是一个字符串。 */
Properties p = System.getProperties(); //getProperties() 确定当前的系统属性
Enumeration e = p.propertyNames(); //接口 Enumeration<E>
while(e.hasMoreElements()) { //hasMoreElements() 测试此枚举是否包含更多的元素。
String key = (String)(e.nextElement());//如果此枚举对象至少还一个可提供的元素,则返回此枚举的下一个元素
System.out.println(key+" = "+p.getProperty(key));
}
}
}
运行结果:
java.runtime.name = Java(TM) SE Runtime Environment
sun.boot.library.path = C:\Users\Administrator\AppData\Local\Genuitec\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\jre\bin
java.vm.version = 11.3-b02
java.vm.vendor = Sun Microsystems Inc.
java.vendor.url = http://java.sun.com/
......
注意:
此案例有疑问,
Properties p = System.getProperties(); //getProperties() 确定当前的系统属性
Enumeration e = p.propertyNames(); //接口 Enumeration<E>
设置新的系统环境变量
格式:
java -DAuthor=lxh SystemInfo
4.2 Runtime类
4.2.1
Runtime类封装了Java命令本身的运行过程,其中的许多方法与System中的方法重复。
不能直接创建Runtime实例,但可以通过静态方法Runtime.getRuntime获得正在运行的Runtime对象的引用。
4.2.2 代码案例
package day15;
public class RuntimeTest {
public static void main(String[] args) {
Runtime rt = Runtime.getRuntime();
try{
rt.exec("notepad.exe");
}catch(Exception e){
e.printStackTrace();
}
}
}
运行结果:
打开 notepad.exe程序
五.Date 与Calendar、DateFormat类
5.1
应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和解析日期字符串。Date 中的相应方法已废弃。
5.2 Calendar代码案例
package day15;
import java.util.Calendar;
public class CalendarTest {
public static void main(String[] args) {
Calendar cd = Calendar.getInstance();//使用默认时区和语言环境获得一个日历。
//打印当前时间,注意:calendar里月份是0-11, 11月输出的是10
System.out.println(cd.get(cd.YEAR)+" "+cd.get(cd.MONTH)+" "+cd.get(cd.DAY_OF_MONTH)+
" "+cd.get(cd.HOUR)+" "+cd.get(cd.MINUTE)+" "+cd.get(cd.SECOND) );
//增加230天
cd.add(cd.DAY_OF_YEAR, 230);
//输出增加后的日期
System.out.print(cd.get(cd.YEAR)+" "+cd.get(cd.MONTH)+" "+cd.get(cd.DAY_OF_MONTH)+
" "+cd.get(cd.HOUR)+" "+cd.get(cd.MINUTE)+" "+cd.get(cd.SECOND) );
}
}
运行结果:
2015 10 16 11 56 12
2016 6 3 11 56 12
星期一, 十一月 16, 2015 12:22:54
5.2更改日期字符串
SimpleDateFormat 它允许格式化 (date -> text)、语法分析 (text -> date)和标准化。
SimpleDateFormat 允许以为日期-时间格式化选择任何用户指定的方式启动。
代码案例:
package day15;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class CalendarTest {
public static void main(String[] args) {
/*DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。*/
SimpleDateFormat myf1 = new SimpleDateFormat("yy/MM/dd HH:mm");
SimpleDateFormat myf2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
SimpleDateFormat myf3 = new SimpleDateFormat("yyyy年MM月dd日 hh点mm分ss秒");
SimpleDateFormat myf4 = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z");
/*获取当前的时间方法1.System.currentTimeMillis()效率高些
* 2.Calendar.getInstance().getTimeInMillis()*/
long d = System.currentTimeMillis();
/*long d = Calendar.getInstance().getTimeInMillis();*/
//将当前获得的日期进行格式化
System.out.println(myf1.format(new Date(d)));
System.out.println(myf2.format(new Date(d)));
System.out.println(myf3.format(new Date(d)));
System.out.println(myf4.format(new Date(d)));
/*long d1 = System.currentTimeMillis();
System.out.print(myf1.format(d1));*/
}
}
运行结果:
15/11/16 14:59
2015-11-16 02:59:37
2015年11月16日 02点59分37秒
2015.11.16 公元 at 14:59:37 CST
注意:
new Date()没有完成案例....
六、Math与Random类
6.1Math类
6.2Random类
代码案例:
利用Random类来产生5个0~100之间的随机整数
java.util.Random 类
nextInt() 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
package day15;
import java.util.Random;
public class RandomTest {
public static void main(String[] args) {
//
Random r1 = new Random();
for (int i=0;i<5;i++) {
//nextInt() 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
System.out.print(r1.nextInt(100)+"\t");
}
}
}
运行结果:
4079649333
七、hashCode
Object 中的public int hashCode(){}
含义:
在用于存取散列表的时候使用。
7.1作用:
返回该对象的哈希码值。
支持此方法是为了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能。
hashCode方法实际上返回的就是对象存储的物理地址(实际可能并不是)。
这样一来,当集合要添加新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。
如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;
如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址。
所以这里存在一个冲突解决的问题。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次
---
运行这个程序,应该输出“张三”,但它实际上返回了一个null值,原因是因为没有改写一个hashCode()方法。
---写了hashcode()
7.2 代码案例:
package day15;
import java.util.HashMap;
public class HashCodeTest {
public static void main(String[] args) {
HashMap hm = new HashMap();
/*public V put(K key,V value)在此映射中关联指定值与指定键。*/
hm.put(new Person("waxun",18), "yuzhou");
/*public V get(Object key)返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回 null。 */
System.out.print(hm.get(new Person("waxun",18)));
}
}
class Person {
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
}
public String toString (){
return "name = "+this.name+" age="+this.age;
}
public boolean equals(Object o) {
return true;
}
public int hashCode(){
return 20;
}
}
运行结果:
yuzhou
注意:
在用于存取散列表的时候使用。
但上面的程序存在一个问题,就是所有的Person类的对象都拥有同一个散列码,这样在实际中是不可取的。
而散列码的取得,也是根据实际的情况而计算出来的,
==保证不同的对象有不同的散列码即可。
星期一, 十一月 16, 2015 19:34:26
星期一, 十一月 16, 2015 21:02:08
八、对象的克隆
对象克隆为什么需要克隆???
在实际编程过程中,我们常常要遇到这种情况:一个对象A,在某一时刻A中已经包含了一些有效值,此时可能会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值,也就是说,A与B是两个独立的对象,但B的初始值是由A对象确定的。
8.1.对象克隆
实际上是指将对象重新复制一份
涉及:
java.lang.Object clone()
创建并返回此对象的一个副本。
protected Object clone()throws CloneNotSupportedException
此实例的一个副本。此方法执行的是该对象的“浅表复制
java.lang接口 Cloneable
8.2实现clone方法的步骤()
(1)实现Cloneable接口
(2)重载Object类中的clone()方法,重载时需定义为public
(3)在重载方法中,调用super.clone()
----改写Object类中的clone()方法
因为protected Object clone()throws CloneNotSupportedException为protect修饰,
这种对用户不可见,所以要改写,变为public
8.3代码案例:
package day15;
public class CloneTest {
public static void main(String[] args){
Employee e1 = new Employee("宇宙",22);
@SuppressWarnings("unused")
Employee e2 = null;
try {
e2 = (Employee) e1.clone() ;
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
e2.setName("瓦询");
e2.setAge(24);
System.out.println("两个对象的内存地址的比较"+(e1==e2));
System.out.println(e1);
System.out.println(e2);
}
}
class Employee implements Cloneable {
/*alt+shift+s快速生成method*/
private String name;
private int age;
public Employee(String name,int age) {
this.name = name;
this.age = age;
}
/*重载Object类中的clone()方法,重载时需定义为public*/
@Override
public Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
return super.clone();
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "姓名: "+this.name+" 年龄: "+this.age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
运行结果:
两个对象的内存地址的比较false
姓名: 宇宙 年龄: 22
姓名: 瓦询 年龄: 24
浅度克隆 和深度克隆
参考:不错~~
http://blog.csdn.net/edward_qing_lee/article/details/8249102
星期一, 十一月 16, 2015 22:00:27
相关推荐
### Java李兴华学习笔记之Java常用类库 #### 一、课程介绍及知识点概览 根据提供的资料,“Java李兴华学习笔记之Java常用类库”这份文档来源于北京MLDN软件实训中心的教学资料,主要涵盖了Java编程语言中常用类库...
欧柏泰克:Java常用类库--日期操作类 在 Java 语言中,日期操作类是非常重要的一部分,常用的日期操作类有 Date 类、Calendar 类和 DateFormat 类。下面是对这三个类的详细介绍: Date 类 Date 类是 Java 语言中...
j2se 18天笔记是根据网络上资料而制作成的CHM帮助文档 目录: Day01:java环境与数据类型 Day02:数据运算与数组 ...Day15:网络编程与常用类库 Day16:国际化与新特性 Day17:新特性与并发线程 Day18:软件开发流程
在这个“Java学习常用API”中,我们可能会涵盖以下关键知识点: 1. **基础类库**: - **String类**:用于处理文本字符串,提供了大量的操作方法如concat、substring、indexOf等。 - **ArrayList和LinkedList**:...
- 类库:Java提供了丰富的标准类库,如集合框架、I/O流、网络编程、多线程等,这些是开发中常用的工具。 4. **开发环境**: - IDE(Integrated Development Environment):如Eclipse、NetBeans、IntelliJ IDEA等...
此文档可能介绍了常用类库如集合框架、IO流、线程、异常处理等,并给出了一些实用示例。 6. **day12-day15集合.doc**:Java集合框架是处理对象集合的工具,包括List、Set、Queue、Map等接口及其实现类。这部分可能...
【标题】"coreJava_day2" 指的是在学习Java编程时的第二天课程,主要集中在Core Java的基础知识上。Core Java是Java编程的核心部分,包括面向对象编程、类库、集合框架、输入输出流、多线程、网络编程等方面。在"day...
Java中,我们常用`jar`命令来打包和压缩类文件,它其实是一种基于`zip`格式的归档工具。Java的标准库中包含了一系列核心包,这些包提供了各种功能: 1. `java.lang`: 包含最基础的类,如`String`、`System`和`...
### Java常用工具类详解 #### 一、日期工具类 [DateUtil] 在Java开发中,对日期的操作是非常常见的需求之一。下面将详细介绍DateUtil中的一些关键功能。 ##### 1. 计算给定时间至今的天数:`long date2day(String...
Java提供了丰富的类库来处理文件操作和数据传输,如File类、InputStream和OutputStream接口,以及BufferedReader和PrintWriter等实用工具类。 网络编程是Java的另一大亮点。Java.net包提供了Socket和ServerSocket类...
- **JDK(Java Development Kit)**:包含Java运行环境、Java工具和Java基础类库,是开发Java应用程序的基础。 - **JRE(Java Runtime Environment)**:包含了运行Java程序所需的所有内容,包括JVM和Java核心类库...
在Java 8之前,最常用的是`java.util.Date`和`java.util.Calendar`,但这两个类的设计并不理想,存在很多问题。因此,自Java 8起,引入了新的日期和时间API,即`java.time`包,它提供了更现代、更直观的接口,包括`...
在Java中,API主要指的是JDK(Java Development Kit)提供的各种Java类库,包括类、接口和常量等。理解和熟练运用API是每个Java程序员的基础技能。 1. API概述 API是软件之间交互的桥梁,允许开发者无需了解底层...
- **常用类库介绍**:了解Java标准类库中的重要类,如String、ArrayList、HashMap等,可以帮助开发者更高效地进行开发工作。 - **异常处理**:掌握如何在程序中捕获和处理异常,对于编写健壮的代码至关重要。 - **多...
JRE包含了JVM和必要的核心类库,是运行Java程序的必要条件。而JDK除了包含JRE,还提供了开发Java程序所需的工具,如编译器、调试器等。在配置环境变量JAVA_HOME后,可以在任意目录下方便地使用JDK提供的工具。 Java...
Java提供了多种类库来处理日期和时间,其中最常用的就是`java.util.Calendar`类。这个类是Java AWT(Abstract Window Toolkit)和Swing库的一部分,它们是用于构建图形用户界面的工具包。 在AWT和Swing中,`java....
`java.awt`包是Java早期为图形用户界面设计提供的基础类库。该包中的类和接口支持基本的GUI组件和功能,如图形绘制、字体设置、颜色管理以及事件处理等。例如: - **类**:`java.awt.Component` 是所有GUI组件的...
常用命令参考涉及Java开发过程中的命令行工具,如javac用于编译,java用于运行,jar用于打包和管理类库,javadoc用于生成API文档。掌握这些命令的使用能帮助开发者在没有IDE的情况下也能高效工作。 入门书籍推荐...
- 工具掌握:运用JDK和JCreator等开发工具,熟悉常用类库的应用,增强编程技巧。 2. **设计方案**: - **设计思路**:万年历系统包含一个记事本和日历两个部分,用户可以查看任意年份、月份,调整日期,并检测...