上面的main方法中,map对象只是被创建并没有初始化,只是在前面创建了一个Map类的指针但并没有告诉系统具体指向,也就是map的值为null。
如以下方式:
static Map map
public static void main(String[] args)
{
map=new Map()
map.seach()
}
程序就可以正常运行。
这两种创建对象的方法都是可以的。第一种在方法外创建就是作为一个类的属性,这个时候这个对象的生存周期是相当长的,你可以在一个方法中初始化后在其他方法中继续调用,其他方法对其造成的修改会都会影响到下一次调用的结果。甚至可以在其他类中调用这个变量。当然如果调用到的是没有初始化的对象一样会报空指针。
后一种方式是在方法中创建对象进行操作,这时候这个对象的生存周期只限制于这个方法。每次调用这个方法的时候都会重新创建一个这样的对象。想将这个对象拿出去只有在创建后用set方法或者是使用return 返回。
例如:
Map map=new Map()
map.seach()
//假设OtherObj对象有setMap方法,使用set方法取出map对象
OtherObj.setMap(map)
或者就写成:
public Map getMap(){
Map map = new Map()
return map
}
此外,static标记表示这个对象是类共有的,调用的时候甚至不需要创建你这个类的对象直接通过类名就可以调用出来。例如jdk中的java.awt.Color类里面可以直接取出一些特定的颜色,只需要调用Color.RED等方法即可。不需要另外创建Color对象
内存里a和b指向的不是同一个对象,不是同一块内存。代码hh a=new hh()是表示在栈内存里分配一块区域给a,同时在堆内存里创建一个hh类的对象,然后让a指向这个对象。代码hh b=new hh()是表示在栈内存里分配一块区域给b,同时在堆内存里创建一个hh类的对象,然后让b指向这个对象。看你的hh里没有重写toString(),直接打印a和b应该是调用Object里面的toString(),打印出来的是类名和此对象的十六位哈希码,应该是不同的。然后我把你的代码自己运行了一下,打印出来的哈希码也是不一样的,不论是直接打印a和b由toString()方法默认返回的,还是调用两个对象中的hashCode()方法出来哈希码都是不相同的。a.equals(b)返回的是false说明a和b不相等,我查了一下API,根据API里面写的hashCode 的常规协定是:在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用hashCode 方法不 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。说明相同的对象,哈希码必须相同。不同的对象,哈希码不一定不同。我查了下资料,哈希码的生成函数不能保证不同对象生成的哈希码一定相同,有很小很小的几率会相同,不会被你装上了吧?还是其他class的干扰呢?你把重新建一个文件夹,把java文件复制进去,然后编译运行看下还是不是一样。我也是刚学java的,工作比较无聊我就学了下java,刚学了1个半月吧。能力有限,我把我懂得都写出来,希望能帮到楼主。请采纳答案,支持我一下。
1,对象所属的类有这个方法2,不同包调用方法是public的或者同包调用方法不能是private
3.静态方法可静态调用,非静态方法必须创建该类对象才能调用