`
阅读更多

 

 

星期一, 十一月 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

 

 

 

 

0
1
分享到:
评论

相关推荐

    java李兴华学习笔记之Java常用类库

    ### Java李兴华学习笔记之Java常用类库 #### 一、课程介绍及知识点概览 根据提供的资料,“Java李兴华学习笔记之Java常用类库”这份文档来源于北京MLDN软件实训中心的教学资料,主要涵盖了Java编程语言中常用类库...

    欧柏泰克:Java常用类库--日期操作类

    欧柏泰克:Java常用类库--日期操作类 在 Java 语言中,日期操作类是非常重要的一部分,常用的日期操作类有 Date 类、Calendar 类和 DateFormat 类。下面是对这三个类的详细介绍: Date 类 Date 类是 Java 语言中...

    java_diary_18.rar_JFC_swing_反射机制_国际化 java

    j2se 18天笔记是根据网络上资料而制作成的CHM帮助文档 目录: Day01:java环境与数据类型 Day02:数据运算与数组 ...Day15:网络编程与常用类库 Day16:国际化与新特性 Day17:新特性与并发线程 Day18:软件开发流程

    Java学习常用API

    在这个“Java学习常用API”中,我们可能会涵盖以下关键知识点: 1. **基础类库**: - **String类**:用于处理文本字符串,提供了大量的操作方法如concat、substring、indexOf等。 - **ArrayList和LinkedList**:...

    java\CoreJava笔记\CoreJAVA_day01

    - 类库:Java提供了丰富的标准类库,如集合框架、I/O流、网络编程、多线程等,这些是开发中常用的工具。 4. **开发环境**: - IDE(Integrated Development Environment):如Eclipse、NetBeans、IntelliJ IDEA等...

    传智播客_java基础知识汇总

    此文档可能介绍了常用类库如集合框架、IO流、线程、异常处理等,并给出了一些实用示例。 6. **day12-day15集合.doc**:Java集合框架是处理对象集合的工具,包括List、Set、Queue、Map等接口及其实现类。这部分可能...

    coreJava_day2

    【标题】"coreJava_day2" 指的是在学习Java编程时的第二天课程,主要集中在Core Java的基础知识上。Core Java是Java编程的核心部分,包括面向对象编程、类库、集合框架、输入输出流、多线程、网络编程等方面。在"day...

    学习笔记java _day02

    Java中,我们常用`jar`命令来打包和压缩类文件,它其实是一种基于`zip`格式的归档工具。Java的标准库中包含了一系列核心包,这些包提供了各种功能: 1. `java.lang`: 包含最基础的类,如`String`、`System`和`...

    Java常用工具类(免费)

    ### Java常用工具类详解 #### 一、日期工具类 [DateUtil] 在Java开发中,对日期的操作是非常常见的需求之一。下面将详细介绍DateUtil中的一些关键功能。 ##### 1. 计算给定时间至今的天数:`long date2day(String...

    Java_day23上课资料.zip

    Java提供了丰富的类库来处理文件操作和数据传输,如File类、InputStream和OutputStream接口,以及BufferedReader和PrintWriter等实用工具类。 网络编程是Java的另一大亮点。Java.net包提供了Socket和ServerSocket类...

    Java基础知识点总结

    - **JDK(Java Development Kit)**:包含Java运行环境、Java工具和Java基础类库,是开发Java应用程序的基础。 - **JRE(Java Runtime Environment)**:包含了运行Java程序所需的所有内容,包括JVM和Java核心类库...

    java 判断平闰年

    在Java 8之前,最常用的是`java.util.Date`和`java.util.Calendar`,但这两个类的设计并不理想,存在很多问题。因此,自Java 8起,引入了新的日期和时间API,即`java.time`包,它提供了更现代、更直观的接口,包括`...

    day08-常用API1

    在Java中,API主要指的是JDK(Java Development Kit)提供的各种Java类库,包括类、接口和常量等。理解和熟练运用API是每个Java程序员的基础技能。 1. API概述 API是软件之间交互的桥梁,允许开发者无需了解底层...

    Java基础视频云分享链接

    - **常用类库介绍**:了解Java标准类库中的重要类,如String、ArrayList、HashMap等,可以帮助开发者更高效地进行开发工作。 - **异常处理**:掌握如何在程序中捕获和处理异常,对于编写健壮的代码至关重要。 - **多...

    day01【前言、入门程序、常量、变量】.pdf

    JRE包含了JVM和必要的核心类库,是运行Java程序的必要条件。而JDK除了包含JRE,还提供了开发Java程序所需的工具,如编译器、调试器等。在配置环境变量JAVA_HOME后,可以在任意目录下方便地使用JDK提供的工具。 Java...

    java日历

    Java提供了多种类库来处理日期和时间,其中最常用的就是`java.util.Calendar`类。这个类是Java AWT(Abstract Window Toolkit)和Swing库的一部分,它们是用于构建图形用户界面的工具包。 在AWT和Swing中,`java....

    Java图形用户界面设计

    `java.awt`包是Java早期为图形用户界面设计提供的基础类库。该包中的类和接口支持基本的GUI组件和功能,如图形绘制、字体设置、颜色管理以及事件处理等。例如: - **类**:`java.awt.Component` 是所有GUI组件的...

    java基础知识入门学习

    常用命令参考涉及Java开发过程中的命令行工具,如javac用于编译,java用于运行,jar用于打包和管理类库,javadoc用于生成API文档。掌握这些命令的使用能帮助开发者在没有IDE的情况下也能高效工作。 入门书籍推荐...

    智能万年历 JAVA.doc

    - 工具掌握:运用JDK和JCreator等开发工具,熟悉常用类库的应用,增强编程技巧。 2. **设计方案**: - **设计思路**:万年历系统包含一个记事本和日历两个部分,用户可以查看任意年份、月份,调整日期,并检测...

Global site tag (gtag.js) - Google Analytics