[疑问] 新建对象的疑问_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > [疑问] 新建对象的疑问

[疑问] 新建对象的疑问

 2015/5/13 22:04:15  Rainbow702  程序员俱乐部  我要评论(0)
  • 摘要:对于Java中新建一个对象,大家可能再熟悉不过了,如:publicclassPerson{privateStringname;publicvoidsetName(Stringname){this.name=name;}publicStringgetName(){returnname;}publicStringaaa(){return"AAA";}publicstaticvoidmain(String[]args){Personp=newPerson();p.setName("123")
  • 标签:

对于Java中新建一个对象,大家可能再熟悉不过了,如:

class="java">public class Person {

	private String name;

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public String aaa() {
		return "AAA";
	}

	public static void main(String[] args) {
		Person p = new Person();
		p.setName("123");
		System.out.println(p.getName());
	}
}

?上面的main方法中的 新建对象方式,对于每个Javaer来说,都不应该有任何疑问。

但是,今天在看Struts2源码时,遇到了以下的代码:

protected List<String> extensions = new ArrayList<String>() {{
        add("action");
        add("");
    }};

?一开始还楞了一下,怀疑这代码能运行么?

因为这跟我以前声明list的方式不一样,相比之前,我们一般都是如下来声明并初始化list的:

protected List<String> extensions = new ArrayList<String>();
extensions.add("action");
extensions.add("");

?

然后我就脑洞开了一下,既然List可以这么来写,那么其他类是不是也可以这么搞呢?

就拿本文开头的Person类来举例吧,我发现如下这样声明也是可以的:

public class Person {

	private String name;

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public String aaa() {
		return "AAA";
	}

	public static void main(String[] args) {
		Person p = new Person() {
			{
				setName("123");

			}

			public String aaa() {
				return "aaa";
			}

			public String bbb() {
				return "bbb";
			}
		};

		System.out.println(p.name);
		System.out.println(p.aaa());
	}
}

?这样看起来感觉 很怪,但是它是可以运行的,而且它的运行结果是:

123
aaa

也就是 Person类中定义的aaa()方法被 p 实例中的aaa()给覆盖了。

?

现象比较好玩,但是不知道这是什么语法,还请有识者指点一下。

上一篇: Unable to find resource 下一篇: java多线程死锁
  • 相关文章
发表评论
用户名: 匿名