xml布局文件 <</span>RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent&qu…
多线程比较简单的方式是继承Thread类,然后覆写run()方法,在客户端程序中通过调用对象的start方法即可启动一个线程,这个是多线程程序的标准写法. 错误代码: public class Client { public static void main(String[] args) throws InterruptedException { // 多线程对象 MultiThread multiThread = new MultiThread(); // 启动多线程 multiThread.…
覆写equals方法必须覆写hashCode方法,这条规则基本上每个Javaer都知道,这也是JDK API上反复说明的,不过为什么要这样做呢?这两个方法之间有什么关系呢?本建议就来解释该问题,我们先来看如下代码: public static void main(String[] args) { // Person类的实例作为Map的key Map<Person, Object> map = new HashMap<Person, Object>() { { put(new Per…
建议45: 覆写equals方法时不要识别不出自己 我们在写一个JavaBean时,经常会覆写equals方法,其目的是根据业务规则判断两个对象是否相等,比如我们写一个Person类,然后根据姓名判断两个实例对象是否相同,这在DAO(Data Access Objects)层是经常用到的.具体操作是先从数据库中获得两个DTO(Data Transfer Object,数据传输对象),然后判断它们是否是相等的,代码如下: class Person{ private String name; pub…
建议49: 推荐覆写toString方法 为什么要覆写toString方法,这个问题很简单,因为Java提供的默认toString方法不友好,打印出来看不懂,不覆写不行,看这样一段代码: public class Client { public static void main(String[] args) { System.out.println(new Person("张三")); } } class Person { private String name; public Per…
何时需要重写equals() 当一个类有自己特有的“逻辑相等”概念(不同于对象身份的概念). object规范规定,如果要重写equals(),也要重写hashcode() 如何覆写equals() 覆写equals方法 1  使用instanceof操作符检查“实参是否为正确的类型”. 2  对于类中的每一个“关键域”,检查实参中的域与当前对象中对应的域值. 3. 对于非float和double类型的原语类型域,使用==比较: 4  对于对象引用域,递归调用equals方法: 5  对于flo…
要回答这个问题,我们应该先认识一下obj中的equals和hascode方法 1.equals()方法在obj中定义如下: public boolean equals(Object obj) { return (this == obj); } 可以看到因为'==',所以是将两个对象的地址值进行比较(比较对象的引用是不是相同),但是在String和Integer等包装类中已经重写了equals()和hashcode()方法,比如在String类中: public boolean equals(Ob…
覆写equals方法必须覆写hashCode方法,是JDK API上反复说明的,不过为什么要这样做呢?这两个方法之间有什么关系呢? void test() { // Person类的实例作为Map的key Map<Person, Object> map = new HashMap<Person, Object>(); map.put(new Person("张三"), new Object()); // Person类的实例作为List的元素 List<P…
覆写hashcode 1. 把某个非零常数值,例如17,保存在int变量result中: 2. 对于对象中每一个关键域f(指equals方法中考虑的每一个域): 3, boolean型,计算(f? 0 : 1); 4. byte,char,short型,计算(int); 5. long型,计算(int)(f ^ (f>>>32)); 6. float型,计算Float.floatToIntBits(afloat); 7. double型,计算Double.doubleToLongBits…
所谓方法的覆写override就是子类定义了与父类中同名的方法,但是在方法覆写时必须考虑权限,即被子类覆写的方法不能拥有比父类方法更加严格的访问权限. 修饰符分别为public.protected.default.private.他们的访问权限如下图所示. 用public修饰的类在本类.同包.子类.其他包中互相访问都是可以的. 用protected修饰的类在本类.同包.子类中互相访问都是可以的,protected不可以在包外没有继承关系的类中互相访问. 就说明用default修饰的类在本类.同包…