- 浏览: 248428 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
javatozhang:
讲解的的确不错。很实用。
Hibernate数据拦截与事件监听 -
sjx19871109:
更正一个地方:<event type="pos ...
Hibernate search -
xifan:
你好,楼主。
mutable="false 好像是 ...
Hibernate持久化对象生命周期 -
leo_cao:
很好,很实用
Hibernate数据拦截与事件监听 -
fehly:
47816778 写道你这样不会出现number 的精度问题吗 ...
Hibernate Annotations
Object类
java.lang.Object类是所有java类的最高层次父类,该类提供了面向对象编程技术的基本机制。
重要方法列表:
- hashCode()方法
- toString()方法
- equals()方法
- finalize()方法
- clone()方法
- wait()方法
- notify()/notifyAlly()方法
hashCode()
hashcode可以更快的查询到小的内存块分割线下是网络搜集整理(在具体的java编程思想已经很清楚了)
-------------------------------------------------------------------------------->
总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set。你知道它们的区别吗?前者集合内的元素是有序的,元素可以重复;后者元素无序,但元素不可重复。那么这里就有一个比较严重的问题了:要想保证元素不重复,可两个元素是否重复应该依据什么来判断呢?这就是Object.equals方法了。但是,如果每增加一个元素就检查一次,那么当元素很多时,后添加到集合中的元素比较的次数就非常多了。也就是说,如果集合中现在已经有1000个元素,那么第1001个元素加入集合时,它就要调用1000次equals方法。这显然会大大降低效率。
于是,Java采用了哈希表的原理。哈希(Hash)实际上是个人名,由于他提出一哈希算法的概念,所以就以他的名字命名了。哈希算法也称为散列算法,是将数据依特定算法直接指定到一个地址上。如果详细讲解哈希算法,那需要更多的文章篇幅,我在这里就不介绍了。初学者可以这样理解,hashCode方法实际上返回的就是对象存储的物理地址(实际可能并不是)。
这样一来,当集合要添加新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址。所以这里存在一个冲突解决的问题。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。
所以,Java对于eqauls方法和hashCode方法是这样规定的:
1、如果两个对象相同,那么它们的hashCode值一定要相同;
2、如果两个对象的hashCode相同,它们并不一定相同
上面说的对象相同指的是用eqauls方法比较。
-------------------------------------------------------------------------------------------------
在举一个形象的例子
我们先通过 hashcode来判断两个类是否存放某个桶里,但这个桶里可能有很多类,那么我们就需要再通过 equals 来在这个桶里找到我们要的类。
那么。重写了equals(),为什么还要重写hashCode()呢?
想想,你要在一个桶里找东西,你必须先要找到这个桶,你不通过重写hashcode()来找到桶,光重写equals()有什么用啊
扯的有点远了-------------------------------------------言归正传
public class Person{ private int age; public Person(int age){ this.age = age; } public void setAge(int age){ this.age = age; } public int getAge(){ return age; } }
------------------------------------------------------------------------------------也就是打印他的地址置是多少
public class TestHashCode{ public static void main(String[] args){ Person p1 = new Person(18); Person p2 = new Person(18); int handle1 = p1.hashCode(); System.out.println(handle1); System.out.println(Integer.toHexString(handle1)); System.out.println(p1); System.out.println("----------------"); System.out.println(p2.hashCode()); } }
输出------------------- 12677476 c17164 Person@c17164 ---------------- 33263331
toString()方法
- 方法格式:public String toString(){....}
- 方法功能:以字符串形式返回当前对象的有关信息,在Object类的原始定义中,所返回的是对象所属的类型名称及其哈希码.
- 当使用System.out.println()方法直接打印输出引用类型变量时,println()方法中会先自动调用其toString()方法,再将所返回的字符串信息输出.
- 在进行String与其他类型数据的链接操作时,自动调用toString()方法,基本类型数据转换为String类型时,调用了对应封装类的toString()方法。
- 可以根据需要在用户定义类型中重新toString()方法
equals()方法
- 方法格式:public boolean equals(Object obj){...}
- 功能:比较引用类型数据的等价性
- 等价标准:引用类型比较引用,基本类型比较值。
- equals()方法与==操作的区别:
- equals()方法只能比较引用类型数据,而"=="可以比较引用类型及基本类型数据;
- equals()方法存在特例:对file,String,date及封装类等类型来说,是比较类型及对象的内容而不考虑引用的是否为同一实例
- 可以根据需要,在用户定义类中重写其equals方法,改变判断标准
finalize()方法
- 方法格式:protected void finalize() throws Throwable{...}
- 方法功能:java运行时环境中的垃圾收集器在销毁一个对象之前,会自动调用该对象的finalize()方法,然后才释放对象的内存空间
- 方法用途:是在子类中重写,以加入所需的逻辑代码来配置系统资源或执行其他清除操作
clone()方法
- 方法格式:protected native Object clone() throws CloneNotSupportedException;
- 方法功能:对象拷贝.
- 要进行"克隆"的对象所属的类必须实现java.lang.Cloneable接口
- 浅度拷贝和深度拷贝
字符串相关类型
String类
- java.lang.String类对象表示不可修改的Unicode编码字符串.
- 方法说明:构造方法
- 字符串、连接、转换和截断:concat()、replace()、substring()、toLowerCase()、toUpperCase()、trim()
- 检索和查找功能:charAt()、startWith()、indexOf()、lastIndexOf()、length();
- 内容比较:equals()、equalslgnoreCase()、compareTo()
StringBuffer类
StringBuffer类对象保存可修改的Unicode字符序列
构造方法:
- StringBuffer()
- StringBuffer(int capacity)
- StringBuffer(String initialString)
主要功能方法:
- append()
- insert()
- reverse()
- setCharAt()
StringBuilder类
JDK5.0以后引入,该类能过提供与StringBuffer相同的功能,二者区别:
- StringBuffer类是线程安全的,而StringBuilder则不是,即不保证其对象的同步性,在多线程环境中是不安全的
- StringBuilder在性能上要比StringBuffer好一些
StringTokenizer类
java.util.StringTokenizer类的功能是将当前字符串按照默认或指定的分隔符分解为多个片段
构造方法:
- public StringTokenizer(String str)
- public StringTokenizer(String str,String delim)
- public StringTokenizer(String str,String delim,boolean returnDelims)
主要功能方法:
- public boolean hasMoreTokens()
- public String nextToken()
分解字符串的新方法
从JDK1.4开始,sun公司推荐开发者使用一种新的字符串的分解方式
public class TestStringSplit{ public static void main(String args[]){ String s = "阳光:沙滩:海浪:仙人掌"; String[] results = s.split(":"); for(String each: results) { System.out.println(each); } } }
输出------------------------------> 阳关 沙滩 海浪 仙人掌
日期相关类型
Date类
java.util.Date类用于表示特定的时间点,精确到毫秒,但不支持日期的国际化和分时区显示。
构造方法:
- public Date()
- public Date(long date)
主要功能方法:
- public int compart To(Date anotherDate)
- public boolean equals(Object obj)
- public long getTime()
- public String toString()
Calendar类
抽象类java.util.Calendar类提供了常规的日期修改功能和国际化支持
主要方法:
- public static Calendar getInstance()
- public int get(int field)
- public final set(int field,int value)
- public final void set(int year,int month,int date,int hourOfDay,int minute,int second)
- public abstract void add(int field,int amount)
Locale类
java.util.Locale类描述特定的地理,政治/文化上的地区,Locale对象主要封装了"地区"和"语言种类"两方面的信息,通常用于在国际化/本地化程序中以地区/语言相关的方式显示日期、数字或文本信息等.
主要方法:
- public Locale(String language)
- public Locale(String language,String country)
- public static Locale getDefault()
- public String getLanguage()
- public final String getDisplayName()
- public static Locale[] getAvailableLocales()
TimeZone类
java.util.TimeZone类描述时区信息
TimeZone被定义为抽象类,可以调用其静态方法getDefault()已获得类的实例。
- public static TimeZone getDefault()
- public static TimeZone getTimeZone(String ID)
其他方法:
- public static String[] getAvailablelDs()
GregorianCalendar类
Java.util.GregorianCalendar是Calendar的子类,该类提供了世界上大多数国家/地区使用的标准日历系统,并添加判断闰年的功能
主要方法:
- public GregorianCalendar()
- public GregorianCalendar(TimeZone zone)
- public GregorianCalendar(Locale aLocale)
- public GregorianCalendar(TimeZone zone,Locale aLocale)
- public GregorianCalendar(int year,int month,int dayOfMonth)
- public GregorianCalendar(int year,int month,int dayOfMonth,int hourOfDay,int minute,int second)
- public boolean isLeapYear(int year)
DateFormat类
java.text.DateFormat类提供了将日期/时间信息进行格式化处理的功能..
主要方法:
- public static final DateFormat getDateInstance()
- public static final DateFormat getTimeInstance()
- public static final DateFormat getDateTimeInstance()
- public final String format(Date date)
SimpleDateFormat类
- java.text.SimpleDateFormat类是DateFormat类的子类,它允许用户自定义日期/时间信息的表现格式,并提供更灵活的Date<=>String信息转换盒解析的功能.
- 在创建SimpleDateFormat实例是应指定所转换的字符串格式,否则系统会缺省采用与所在语言环境相关的默认格式
数学相关类型
Math类
java.lang.Math类提供常用数学功能和数学常量:
- 数据截断操作:ceil(),floor(),round()
- 取最大,最小及绝对值:max(),min(),abs()
- 三角函数:sin(),cos(),tan(),asin(),acos(),atan(),toDegress(),toRadians()
- 幂运算和对数运算:pow(),exp(),sqrt(),log(),log10()
- 其他操作:random()
Random类
java.util.Random类是基于"线性同余"算法的一种伪随机数序列生成器,其主要功能方法包括:
- public Random()
- public Random(long seed)
- public int nextInt()
- public int nextInt(int n)
BigInteger/BigDecimal
java.math包中定义的BigInteger和BigDecimal类型可以分别提供任意长度/精度的整数和浮点数运算功能。
BigInteger类主要方法:
- public BigInteger(String val)
- public static BigInteger valueOf(long val)
- public BigInteger add(BigInteger val)
- public BigInteger subtract(BigInteger val)
- public BigInteger multiply(BigInteger val)
- public BigInteger divide(BigInteger val)
- public int compare To(BigInteger val)
- public BigInteger remainder(BigInteger val)
- public BigInteger pow(int exponent)
- public String toString()
public class TestBigInteger{ public static void main(String args[]){ BigInteger a = BigInteger.valueOf(43); BigInteger b = new BigInteger("12345678901234560000"); //Long c = new Long(12345678901234560000L); //超出范围 BigInteger c = a.add(b); System.out.println(c); System.out.println(a.multiply(b.subtract(BigInteger.valueOf(120)))); System.out.println(b.remainder(a)); System.out.println(b.divide(a)); System.out.println(b.pow(2)); System.out.println(b.compareTo(a)); } }
java.text.NumberFormat/DecomalFormat提供了将数字格式化为语言环境相关字符串以及逆向解析字符串为数字的功能
import java.util.Locale; import java.text.NumberFormat; public class TestNumberFormat{ public static void main(String args[]){ double d = 1234.56; NumberFormat nf0 = NumberFormat.getInstance(); NumberFormat nf1 = NumberFormat.getInstance(new Locale("zh","CN")); NumberFormat nf2 = NumberFormat.getInstance(new Locale("de","CH")); NumberFormat nf3 = NumberFormat.getInstance(new Locale("de","GE")); System.out.println("默认风格:" + nf0.format(d)); System.out.println("中国风格:" + nf1.format(d)); System.out.println("瑞士风格:" + nf2.format(d)); System.out.println("德国风格:" + nf3.format(d)); } }
import java.util.Locale; import java.text.NumberFormat; public class TestNumberFormat2{ public static void main(String args[]){ double d = 1234.56; NumberFormat nf1 = NumberFormat.getCurrencyInstance(new Locale("zh","CN")); NumberFormat nf2 = NumberFormat.getCurrencyInstance(new Locale("en","US")); NumberFormat nf3 = NumberFormat.getCurrencyInstance(new Locale("zh","HK")); System.out.println("中国货币:" + nf1.format(d)); System.out.println("美国货币:" + nf2.format(d)); System.out.println("香港货币:" + nf3.format(d)); NumberFormat nf4 = NumberFormat.getPercentInstance(); System.out.println(nf4.format(0.7483)); } }
发表评论
-
Json将对象转换成字符串
2010-11-26 22:41 10659最近用到Json传输对象交互,整理一个简单的方法. ... -
JDBC编程
2010-05-13 20:03 4118数据库简介 数据库(DB,Data Base) 数据库管理 ... -
应用程序国际化
2010-05-12 20:44 1509基本概念 国际化(Internationalization, ... -
网络编程
2010-05-09 16:46 1799计算机网络基础 什么是计算机网络 把分布在不同地理区域的计 ... -
线 程
2010-05-08 16:22 1447线 程 线程是一个程序内部的顺序控制流 线程和进程 每 ... -
泛 型
2010-05-05 12:42 1728什么是泛型 泛型(Gernerics)机制自java se ... -
Java I/O编程
2010-05-04 20:58 6869java i/o原理 基本概念: I/O(Input/O ... -
集合与映射
2010-05-02 20:22 2324集合框架概述 集合就是将若干用途,性质相同或相见的数组合 ... -
控制台应用程序设计
2010-04-30 16:24 1851命令行参数 在启动时java控制台应用程序,可以一次性地向 ... -
异常的处理
2010-04-27 18:46 1955异常 异常(Exception)是程序运行过程中发生的事件 ... -
高级类特性
2010-04-26 21:42 995说了开始复习基础了, ... -
java.lang包错误概述
2010-04-15 20:07 2288接口 java.lang.Appendable可追加(app ... -
java对日期的操作技巧
2010-03-30 15:52 1441这篇文章是很早很早存机子上的...也是在哪里看到的然 ... -
MyEclipse6.5安装SVN插件的三种方法
2010-03-18 16:06 1587一、安装方法: 方 ... -
关于java打包问题
2010-03-09 20:25 23011、怎么把一个java文件打包到当前目录 javac ... -
关于MyEclipse/Eclipse汉化问题
2010-03-07 19:23 1268这个是关于MyEclipse/Eclips ... -
Could not find the main class. Program will exit
2010-03-06 21:07 11315虽然说 ...
相关推荐
JAVA常用类,java封装类,String类和StringBuffer类......
实验5的Java常用类主要涵盖了Java编程中的一些核心概念和常用工具类的使用。以下是这些知识点的详细说明: 1. **String、StringBuffer(StringBuilder)**: - **String** 类在Java中是不可变的,这意味着一旦创建了...
总的来说,熟练掌握这些Java常用类对于提升编程效率和编写高质量代码至关重要。它们涵盖了数据存储、输入输出、并发控制、日期时间处理等多个方面,是Java程序员的基础技能。了解并精通这些类的使用,能帮助开发者更...
掌握这些Java常用类的基本用法和特性对于编写高效、可靠的Java代码至关重要,它们是Java程序设计的基础,广泛应用于各种类型的软件开发项目中。通过深入了解和熟练使用这些类,开发者能够更好地构建复杂的应用程序并...
Java常用类.pptJava常用类.ppt
JAVA常用类和方法 JAVA语言中有许多常用的类和方法,以下是其中的一些: 字符串类 字符串是JAVA中最基本的数据类型之一。String类提供了许多有用的方法,以下是一些常用的方法: * 获取字符串的长度:length() *...
java 常用类课件。Collection、List、LinkedList、Vector、Iterator、Map、HashMap、TreeMap、MATH、Date、Set
了解并熟练运用这些Java常用类是每个Java开发者必备的技能之一。在进行CSV、XML、Excel文件操作时,选择合适的库和方法至关重要,而日期处理和数据库操作则直接影响到应用的性能和用户体验。通过不断学习和实践,...
在 Java 编程语言中,`String` 类是极其重要的,因为它被广泛用于处理文本数据。这个类在 `java.lang` 包中,是所有 Java 程序的基础部分,无需显式导入即可使用。`String` 对象表示的是不可变的字符序列,这意味着...
以上只是Java常用类的一部分,实际上还有很多其他重要的类,如`ArrayList`的同胞`Vector`,线程安全的`ConcurrentHashMap`,网络编程中的`Socket`和`ServerSocket`等。通过深入学习这些类的源码,不仅可以提高编程...
"开发十六年的积累(java常用类)"这个主题,无疑是对一位资深开发者多年经验的结晶,其中包含了对Java常用类的深入理解和实践应用。 首先,让我们从Java的基础类库开始。Java.lang包是所有Java程序的基础,包含了...
这是java常用类解析系列博客中的示例代码及自己写的工具类,代码注释详细,博客地址:http://blog.csdn.net/touch_2011/article/details/6860043 主要讲解了System类、Object类、Arrays类、Cloneable接口、IO系统...
【JAVA常用类的使用方法】 在Java编程语言中,有许多内置的类提供了各种实用功能,大大简化了开发工作。以下是一些常用的Java类及其主要使用方法: 1. **Integer 类**: - Integer 类是 Java 中对基本数据类型 ...
根据给定文件的信息,本文将深入探讨Java中的常用类,并重点解析String类的相关特性与应用场景。此外,还将简要介绍StringBuffer、基础类型对应的八个包装类、日期相关类、数字相关类、Random类以及Enum。 ### 一、...
java常用类的讲解,这些类是javase 以及后边的javaee中的常用的java类,是学习java的基础。
java 常用类 ppt 字符串相关类 基本数据包装类 Math类 File类