小编B M*_*B M的帖子

Java中的受保护的访问修饰符

我在理解java中的受保护访问修饰符(或其背后的设计)时遇到了一些麻烦.我认为这意味着包访问和访问通过继承包含抽象成员的类的对象.

我写了以下示例代码.我看到如果取消注释,注释掉的行会产生编译错误.为什么我可以通过Second中的Second对象访问pro,但不能通过Second中的First对象访问pro?

package first;

public class First {

    protected void pro(){
        System.out.println("Can see protected method");
    }

}
Run Code Online (Sandbox Code Playgroud)
package first;

public class InFirst {


    public static void main(String[] args){
        First fst = new First();
        fst.pro();
    }

}
Run Code Online (Sandbox Code Playgroud)
package second;

import first.First;

public class Second extends First {

    public static void main(String[] args){

        First fst = new First();

//      fst.pro();

        Second sec = new Second();
        sec.pro();

    }
}
Run Code Online (Sandbox Code Playgroud)

java protected access-modifiers

10
推荐指数
1
解决办法
2万
查看次数

java中的默认初始化

我对Java中的变量初始化感到困惑.据我所知,类变量获取默认初始化,而默认情况下不初始化局部变量.但是,如果我使用new关键字在方法内创建一个数组,它默认会初始化.所有对象都是如此吗?使用new关键字是否初始化对象,无论它是类变量还是局部变量?

java initialization

9
推荐指数
3
解决办法
2万
查看次数

javap和generics的类型擦除

我正在阅读Herbert Schilds关于java中泛型的类型擦除.据说在类上运行javap应该在类型擦除后给我关于public,package protected和protected字段和方法的字节码信息.但是,我写了以下课程:

    class Ambiguity<T, V extends String>{
    T ob1;
    V ob2;

    void set(T o){
        ob1 = o;
    }

    void set(V o){
        ob2 = o;
    }
}
Run Code Online (Sandbox Code Playgroud)

并在生成的类文件上运行javap并获得以下输出

编译自"Test.java"

class Ambiguity<T, V extends java.lang.String> {
  T ob1;
  V ob2;
  Ambiguity();
  void set(T);
  void set(V);
}
Run Code Online (Sandbox Code Playgroud)

我期待根据我读到的内容看起来像这样的输出.

Compiled from "Test.java"
class Ambiguity<java.lang.Object, java.lang.String> {
  java.lang.Object ob1;
  java.lang.String ob2;
  Ambiguity();
  void set(java.lang.Object);
  void set(java.lang.String);
}
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?我应该补充一点,我理解以上述方式重载方法不是一个好习惯.我只是看到有兴趣在这种模棱两可的情况下看到javap的结果.

编辑:这似乎是javap中新修复的结果. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4870651

如果我从JDK 1.6运行javap,我会得到我期望的结果.如果我从最初使用的JDK 1.7 b30运行javap,我会得到带有通用信息的结果.

java generics type-erasure javap

7
推荐指数
1
解决办法
678
查看次数

==运算符在Java中的对象

我无法理解在以下代码中创建obj和obj2对象的方式的差异.特别是,我不确定如何将一个原语强制转换为一个对象.看看这里的其他一些问题,我认为这是不可能的.但是以下程序编译并运行正常.在第一种情况下,输出是假的,在第二种情况下,它是真的.

public class Test {

    public static void main(String args[]){

        Integer num = new Integer(3) ;
        Object obj = num;
        Integer[] integerArr = {1, 2, 3, 4};
        Object[] objArr = integerArr;
        boolean contains = false;

        for (int i = 0; i < objArr.length; i++){
            if (objArr[i] == obj){
                contains = true;
                break;
            }
        }

        System.out.println(contains);

        int num2 = 3 ;
        Object obj2 = num2;
        Integer[] integerArr2 = {1, 2, 3, 4};
        Object[] objArr2 = integerArr2;
        boolean contains2 = false;

        for …
Run Code Online (Sandbox Code Playgroud)

java casting

5
推荐指数
1
解决办法
119
查看次数

在java中为什么FileWriter抛出IOException而FileOutputStream抛出FileNotFoundException的原因完全相同

来自java文档

public FileWriter(String fileName)抛出IOException

抛出:

IOException - 如果指定的文件存在但是是目录而不是常规文件,则不存在但无法创建,或者由于任何其他原因无法打开

public FileOutputStream(File file,boolean append)抛出FileNotFoundException

抛出:

FileNotFoundException - 如果文件存在但是是目录而不是常规文件,则不存在但无法创建,或者由于任何其他原因无法打开

这个选择有特定原因吗?

java filenotfoundexception ioexception filewriter fileoutputstream

3
推荐指数
1
解决办法
1297
查看次数

计算Java中两个HashMaps的keySet的并集

我想计算两个哈希映射的键的并集.我写了下面的代码(MWE如下),但我

获取UnsupportedOperationException.实现这一目标会有什么好处?

import java.util.HashMap;
import java.util.Map;
import java.util.Set;


public class AddAll {

    public static void main(String args[]){

        Map<String, Integer> first = new HashMap<String, Integer>();
        Map<String, Integer> second = new HashMap<String, Integer>();

        first.put("First", 1);
        second.put("Second", 2);

        Set<String> one = first.keySet();
        Set<String> two = second.keySet();

        Set<String> union = one;
        union.addAll(two);

        System.out.println(union);


    }


}
Run Code Online (Sandbox Code Playgroud)

java hashmap set

2
推荐指数
1
解决办法
1820
查看次数

使用HashSet测试包含

我正在用Java编写一个程序,我想使用HashSet(和HashMap).我无法使contains(和containsKey)方法起作用.我想我必须在某处覆盖一些equals方法才能使用.我们的想法是获得以下代码来生成输出:true.有关如何做到这一点的任何想法?

import java.util.HashSet;
import java.util.Set;

public class Sets {

    public static void main(String args[]){

        Set<StringBuilder> wordSet = new HashSet<StringBuilder>();
        StringBuilder element = new StringBuilder("Element");
        wordSet.add(element);
        StringBuilder element2 = new StringBuilder("Element");
        System.out.println(wordSet.contains(element2));

    }

}
Run Code Online (Sandbox Code Playgroud)

java hashset

0
推荐指数
1
解决办法
328
查看次数