作为Java的初学者,我想知道我在哪里学习(正确),我正在学习错误的东西,以及接下来要学习的东西。我发现我通过遇到无法立即解决的问题来学习最好,我需要做一些研究/学习来找出最佳解决方案,然后再研究下一个问题。然后我偶尔重复一遍陈旧的问题,直到他们进入我的长期记忆。
关于Stack Overflow的问题在这方面很有用,但是它们不是按照难度排序的,其中很多是关于某些特性的具体实现。
请回答此问题的问题(和合适的答案),这对任何试图提高他们的Java知识和经验的人都有用。我确信已发布的许多Stack Overflow问题都是合适的答案,在这种情况下,只需回复问题和原始问题的链接。还包括难度级别:低,中,高(也可能包括低中,高中)。
答案 0 :(得分:6)
购买Effective Java的副本,并从封面到封面阅读。
定期阅读。
专注于诸如equals,hashcode,compareto methods之类的东西。
彻底了解馆藏api。
我意识到这并没有直接回答你的问题,但是(恕我直言)这是合理的建议!
答案 1 :(得分:4)
我不知道你是多少初学者以及你知道的其他语言,但在我看来,如果你真的不知道你遇到麻烦的java.util包。所以我的问题就是:
数目:
答案 2 :(得分:3)
哦,我也喜欢:
想象一下,如果你把它放在一个类中:
public int hashCode() {
return 1;
}
<强>问题:强>
<强>数目:强>
答案 3 :(得分:3)
看一下这个:JavaBlackBelt。
答案 4 :(得分:2)
我喜欢:
这又是什么回报?
private int foo() {
try {
return 1;
} catch (Exception e) {
return 2;
} finally {
return 3;
}
}
答案:3
答案 5 :(得分:2)
以下程序打印的内容是什么?
public class ReferencesArePassByValue
{
public static void doSomething(Integer i)
{
i = new Integer(5);
}
public static void main(String[] args)
{
Integer value = new Integer(42);
doSomething(value);
System.out.println(value);
}
}
答案:42。
原因:在Java中,引用是按值传递的。
new Integer(42)
中存储的value
引用的副本将传递到doSomething
方法。在doSomething
方法中,i
中存储的引用副本被丢弃,new Integer(5)
的新对象引用被分配给i
。请注意,此处仅抛出引用的副本。该方法仅接收到引用的副本,因此它不会影响main
方法中的原始引用。
因此,对value
方法中的main
变量没有影响。 value
变量保留对new Integer(42)
的引用,因此程序的输出为42
。
这个话题似乎有很多误解。这是不通过引用传递。事实上,Java中的所有内容,无论是基元还是引用,都是按方法传递给方法,而不是按引用传递。
相关问题和链接:
答案 6 :(得分:1)
Via:Ethan Nicholas的博客http://weblogs.java.net/blog/enicholas/archive/2006/05/understanding_w.html
前段时间我正在面试高级Java工程师职位的候选人。在我提出的许多问题中,“你能告诉我哪些弱引用?”我没想到有关这个问题的详细技术论文。我可能会对“嗯......他们与垃圾收集有什么关系吗?”感到满意。我惊讶地发现,在二十多位工程师中,他们都拥有至少五年的Java经验和良好的资格,其中只有两人甚至知道存在弱的参考资料,而且这两个人中只有一人具有实际有用的知识关于他们。
答案 7 :(得分:0)
字符串的比较,取自javabeginner.com:
public class StringComparsion {
public static void main(String[] args) {
String name1 = "Bob";
String name2 = new String("Bob");
String name3 = "Bob";
// 1st case
if (name1 == name2) {
System.out.println("The strings are equal.");
} else {
System.out.println("The strings are unequal.");
}
// 2nd case
if (name1 == name3) {
System.out.println("The strings are equal.");
} else {
System.out.println("The strings are unequal.");
}
}
}
<强>答案:强> 首先比较不相等,第二个比较相等(只创建了一个静态字符串“Bob”,name1和name3都指向它)。
答案 8 :(得分:0)
您对Java中的已检查异常有何看法?有哪些优点和缺点?
我认为能够回答这样的问题表明你不仅仅是一个代码猴 - 你也有能力看到更大的情况。
答案 9 :(得分:0)
要正确学习编程语言,您需要编写代码。很多代码。
我建议你用Java中的Project Euler(http://projecteuler.net/index.php?section=problems)解决尽可能多的问题 - 每个困难都存在问题,只需要http://java.sun.com/docs/books/tutorial/提供的Java知识。
这使您对核心语言有了深入的了解。然后你可以开始挖掘你需要的其他东西 - 数据库访问(JDBC),GUI(Swing),web东西(servlets / jsp)或你有什么,加上所有“嘿这很奇怪”-stuff。
玩得开心 - 总有更多要学习:)