JAVA内部匿名类中的语句块问题【先多谢高手】

royaki 2009-01-22 07:25:13
百度知道里也问了,http://zhidao.baidu.com/question/83255827.html
package net.chapter1;
abstract class Base{
public Base(int i){
System.out.println("Base Constructor! "+i);
}

public abstract void f();
}
public class AnonymousConstructor {
public static Base getBase(int i){
return new Base(i){

{System.out.println("内部初始化");}
public void f(){
System.out.println("内部f()");
}
};
}
public static void main(String[] args){
Base base=getBase(47);
base.f();
}
}


{System.out.println("内部初始化");}这句为什么要用括号呢?是什么作用啊?

这个程序是按什么步骤运行的呢?

运行结果:
Base Constructor! 47
内部初始化
内部f()
...全文
115 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
bzwm 2009-01-22
  • 打赏
  • 举报
回复
首先类 Base 是抽象类,
所以 Base 不能被实例化。

getBase方法 返回一个 Base 的引用,

由于Base不能实例化,所以这里用到了 返回一个 匿名对象引用,

首先类的初始化顺序是:
如果有父类,则是父类的(静态变量、静态初始化块)-->(变量、初始化块)-->构造方法,
然后再按照这个顺序初始化子类。

在new Base(i)的时候,首先要对Base的区域进行初始化,由于没有成员变量和初始化块,
所以进入构造方法打印出Base Constructor! 47

然后
{
System.out.println("内部初始化");
}


相当于是对抽象类Base的扩展,也就是相当于子类的初始化块。
所以按照刚刚说过的顺序,就打印出 内部初始化 。
后来的方法调用就不说了。
royaki 2009-01-22
  • 打赏
  • 举报
回复
十分好奇是按什么顺序运行的程序
内容概要:本文详细介绍了MySQLInnoDB存储引擎的逻辑存储结构及其表分区技术。InnoDB的逻辑存储单元由高到低依次为表空间、段、区、页和行,其表空间包括系统表空间、独立表空间、通用表空间、Undo表空间和临时表空间,每种表空间具有不同的用途和管理方式。文章进一步讲解了表分区的概念与类型,包括RANGE、LIST、HASH、KEY以及多字段COLUMNS分区,阐述了分区的优势如提升查询性能、便于数据维护、支持跨物理设备存储等,并列举了实际SQL操作示例,帮助理解分区表的创建、修改、删除及重组等操作。同时指出了分区的限制条件,如最大分区数量、主键约束要求等。; 适合人群:具备一定MySQL数据库基础,从事数据库开发、运维或架构设计的技术人员,尤其是工作涉及大数据量表管理与性能优化的1-3年经验研发人员。; 使用场景及目标:①深入理解InnoDB存储机制,优化数据库物理结构设计;②掌握表分区技术,应用于海量数据存储与高效查询场景,如日志系统、订单系统的时间分区设计;③通过分区实现数据归档、快速删除历史数据、提升查询性能等运维目标; 阅读建议:学习时应结合MySQL实际环境动手实践文提供的SQL命令,重点关注表空间管理和分区策略的选择,理解其对性能和维护的影响,并注意分区使用的限制条件以避免设计失误。

62,622

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧