关于java import的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于java import的问题相关的知识,希望对你有一定的参考价值。

在类中引入一个包,如果出现命名冲突,那JVM会引入哪个包?
比如说我在一个类里写了import java.lang.xx.java
但在这个项目下也有一个包叫import java.lang.xx.java,那当我实例一个xx对象时,是实例的哪个xx类?引入一个包,JVM怎么去找这个包,也就是说从哪里开始找这个类或这个包?

可以明确的告诉你,java.lang.*,这个包不是我们能往里面添加内容滴!

如果你定义的一个 JButton 类 ,然后导入 java.swing.JButton 然后程序
中用到 JButton 时,JVM 会按照你的 classpath 配置 来加载

如classpath=.;java_home/lib;

就会先查看当前目录是否有JButton
没有就到java.swing.JButton 下。
参考技术A 这个就要看你的classpath配置如何了,jvm是按照classpath设置的路径顺序调用下去。如classpath=.;java_home/lib;就会先查看当前目录是否有这个包,没有就到java_home/lib下。本回答被提问者采纳 参考技术B ....你可以用java里已经用了的包名吗? 我记得不可以吧...
而且包机制是用来干嘛的? 是便于管理项目,和防止命名冲突的.
如果真的出现你说的这种情况,那根本就是你自己的问题。

我是这样理解的,希望能帮到你..
参考技术C 当你实例化java.lang.xx.java 的时候,你要给定它的全路径,程序中可以出现同名的类,但为了区分它们,只要是你使用它们的时候,都必须给出全路径。也因为此,这时候你也不用import了,不然真的会有问题了 参考技术D 其实你完全不用这么引入,比如你用到Date的时候,有好几个Date,有包 java.util.Date的Date;也有java.sql.Date的Date;你只需要这样子写就OK了:
java.util.Date date = new java.util.Date();
或者
java.sql.Date date = new java.sql.Date(0);
不知道你说的是不是我将的意思哦?

Java关于一个java.util.TreeSet的问题

import java.util.TreeSet;

class Drink implements Comparable
public String name;

public int compareTo(Object o)
return 0;


public class A
public static void main(String[] args)
Drink one = new Drink();
Drink two = new Drink();
one.name= "Coffee";
two.name= "Tea";
TreeSet set = new TreeSet();
System.out.println(set.add(one));
System.out.println(set.size());
System.out.println(set.add(two));
System.out.println(set.size());
for(Object d:set.toArray())
System.out.println(((Drink)d).name);




为什么第二次给set添加的时候失败
越详细越好

你好,看到这种问题,你最好能看看源码,我截取TreeSet代码如下:
public boolean add(E e)
return m.put(e, PRESENT)==null;

public TreeSet()
this(new TreeMap<E,Object>()); //默认构造

HashSet的内部实现就是一个new TreeMap<E,Object>(),继续看TreeMap:
public V put(K key, V value)
Entry<K,V> t = root;
if (t == null)
// TBD:
// 5045147: (coll) Adding null to an empty TreeSet should
// throw NullPointerException
//
// compare(key, key); // type check
root = new Entry<K,V>(key, value, null);
size = 1;
modCount++;
return null;

int cmp;
Entry<K,V> parent;
// split comparator and comparable paths
Comparator<? super K> cpr = comparator;
if (cpr != null)
do
parent = t;
cmp = cpr.compare(key, t.key);
if (cmp < 0)
t = t.left;
else if (cmp > 0)
t = t.right;
else
return t.setValue(value);
while (t != null);

else
if (key == null)
throw new NullPointerException();
Comparable<? super K> k = (Comparable<? super K>) key;
do
parent = t;
cmp = k.compareTo(t.key);
if (cmp < 0)
t = t.left;
else if (cmp > 0)
t = t.right;
else
return t.setValue(value);
while (t != null);

Entry<K,V> e = new Entry<K,V>(key, value, parent);
if (cmp < 0)
parent.left = e;
else
parent.right = e;
fixAfterInsertion(e);
size++;
modCount++;
return null;

看到这里我想你也明白了吧,这里就对调用对象的compareTo方法,而你的那个方法返回的正好是相等也就是0.所以在put的时候每次的键相同是不可以继续添加的,所以返回是false。
参考技术A 你的这个方法改成这样:
public int compareTo(Object o)
// TODO Auto-generated method stub
return o.hashCode();

就行了。。
因为Set是不能存放相同的值的。。而它是怎么判断值的呢。就是靠的上面的方法。。
你原代码都是返回0的,所以第二次的时候。Set认为你添加的是相同的值。。本回答被提问者采纳

以上是关于关于java import的问题的主要内容,如果未能解决你的问题,请参考以下文章

关于Java中向文件写入数据的问题

关于java中如何获取当前年份的第一天和最后一天

Java关于一个java.util.TreeSet的问题

关于自学java的内容及感受

Python关于.pyd文件无法import的问题的解决方法

关于我的疑难杂症