class Mug {
Mug(int er) {
System.out.println("Mug(" + er + ")");
}
void f(int er) {
System.out.println("f(" + er + ")");
}
}public class Mugs {
Mug c1;
Mug c2;
{
c1 = new Mug(1);
c2 = new Mug(2);
System.out.println("c1 & c2 initialized");
}
Mugs() {
System.out.println("Mugs()");
}
public static void main(String[] args) {
System.out.println("Inside main()");
Mugs x = new Mugs();
}
}
为什么输出顺序为
Inside main()
Mug(1)
Mug(2)
c1&c@ initialized
Mugs()
我自己想的与运行的不一样啊!
Mug(int er) {
System.out.println("Mug(" + er + ")");
}
void f(int er) {
System.out.println("f(" + er + ")");
}
}public class Mugs {
Mug c1;
Mug c2;
{
c1 = new Mug(1);
c2 = new Mug(2);
System.out.println("c1 & c2 initialized");
}
Mugs() {
System.out.println("Mugs()");
}
public static void main(String[] args) {
System.out.println("Inside main()");
Mugs x = new Mugs();
}
}
为什么输出顺序为
Inside main()
Mug(1)
Mug(2)
c1&c@ initialized
Mugs()
我自己想的与运行的不一样啊!
解决方案 »
- java 象棋程序的一个小问题,希望大家帮解决一下啊,谢谢
- MidiSystem.getSequencer(false/true) 的作用
- 高手们请看看这个问题!如何用jdbc将jpg图像写入数据库而不用oracle的包?
- 关于http代理,在实现类似代理猎手的验证功能部分遇到问题
- 水晶报表为什么在我的java程序中显示的是乱码,请各位大侠帮帮菜小弟!!
- 为什么构造函数不用加返回类型void,而普通函数如果不需要返回值也必须加void?
- 求助各位大虾,有关appletviewer运行小程序的问题
- 讨论一下 C/S移植B/S的开发
- 简繁体转换方案(Unicode版)
- 关于JTabel(Vector rowData,Vctor columnNames)的使用
- 写一个登陆框 用户和 密码由记事本中读取
- 请问如何把两个字节数组合并成一个字节数组?
然后是初始化基本类型和引用。
{ c1 = new Mug(1);
c2 = new Mug(2);
System.out.println("c1 & c2 initialized");
}
是一个静态初始化块。
最后执行构造器。
thinking in java 第四章有介绍,可以参考一下。
构造函数.因为上面的类除了方法就是构造函数,没有其他的东西.
System.out.println("Inside main()"); --> Inside main() //1Mugs x = new Mugs(); //这一句有的麻烦.1、类只有在使用New调用创建的时候才会被JAVA类装载器装入,不要认为在这句之前内存中已经有了Mugs类了.
2、JAVA类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的.
静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。
先初始化父类的静态代码--->初始化子类的静态代码-->初始化父类的非静态代码--->初始化父类构造函数--->初始化子类非静态代码--->初始化子类构造函数
有了这个初始化顺序,应该就能推出这样的结果了.你可以添加一个静态的代码块看看效果.在代码块前加static关键字就是静态代码块.
然后是初始化基本类型和引用。
{ c1 = new Mug(1);
c2 = new Mug(2);
System.out.println("c1 & c2 initialized");
}
是一个静态初始化块。
最后执行构造器。
thinking in java 第四章有介绍,可以参考一下。程序先从main()函数开始执行,所以要加载Mugs.class,静态初始化在此进行,故先输出Inside main()。 不是在这时加载Mugs类的.而是在new时加载的.
{ c1 = new Mug(1);
c2 = new Mug(2);
System.out.println("c1 & c2 initialized");
}
是一个静态初始化块。 不是一个静态代码块.多多指教.
构造函数.
这样的说法貌似是按照代码的顺序 顺序执行的.这个顺序上面我也有点糊涂.
Mug(int er) {
System.out.println("Mug(" + er + ")");
}
void f(int er) {
System.out.println("f(" + er + ")");
}
} class Mugs {
public static void main(String[] args) {
System.out.println("Inside main()");
Mugs x = new Mugs();
}
Mugs() {
System.out.println("Mugs()");
}
{
c1 = new Mug(3);
c2 = new Mug(4);
c3 = new Mug(5);
System.out.println("c1 & c2 initialized");
}
Mug c1 = new Mug(1);
Mug c2 = new Mug(2);
Mug c3 = new Mug(6);
static{System.out.println("Outside main()");}
static Mug c0=new Mug(0);
}执行结果:Outside main()
Mug(0)
Inside main()
Mug(3)
Mug(4)
Mug(5)
c1 & c2 initialized
Mug(1)
Mug(2)
Mug(6)
Mugs()从输出的4,5,6行来看,语句 Mug c1 = new Mug(1);被分成两部分来执行了.
class Mug {
Mug(int er) {
System.out.println("Mug(" + er + ")");
}
void f(int er) {
System.out.println("f(" + er + ")");
}
} public class Mugs {
Mug c1;
Mug c2;
{
c1 = new Mug(1);
c2 = new Mug(2);
System.out.println("c1 & c2 initialized");
}
Mugs() {
System.out.println("Mugs()");
}
public static void main(String[] args) {
System.out.println("Inside main()");
Mugs x = new Mugs();
}
}
和
class Mug {
Mug(int er) {
System.out.println("Mug(" + er + ")");
}
void f(int er) {
System.out.println("f(" + er + ")");
}
} class Mugs {
public static void main(String[] args) {
System.out.println("Inside main()");
Mugs x = new Mugs();
}
Mugs() {
System.out.println("Mugs()");
}
{
c1 = new Mug(3);
c2 = new Mug(4);
c3 = new Mug(5);
System.out.println("c1 & c2 initialized");
}
Mug c1 = new Mug(1);
Mug c2 = new Mug(2);
Mug c3 = new Mug(6);
static{System.out.println("Outside main()");}
static Mug c0=new Mug(0);
}
中的红色部分和匿名的inner class的区别是什么? 谢谢指教
程序执行顺序:如果在main()中new调用创建,先执行main class父类函数初始化部分 ,再执行父类函数构造函数,其次main class初始化部分,最后是main class构造函数.
然后调用静态初始化块,如果你new 了一个对象,调用对应类的构造方法,默认是无参的
所以,就是你这样的结果了!
学了C++再学JAVA容易混淆.
不过还是蛮轻松的.
1.类的静态代码块
2.main函数
3.非静态代码块
4.构造
public class Person {
{
System.out.println("This is code block1.");
}
static{
System.out.println("This is static code block1");
}
public Person() {
System.out.println("This is struct method.");
}
public static void main(String[] args){
System.out.println("This is main method.");
Person p1=new Person();
Person p2=new Person();
}
}
输出:
This is static code block1
This is main method.
This is code block1.
This is struct method.
This is code block1.
This is struct method.
c1 = new Mug(1);
c2 = new Mug(2);
System.out.println("c1 & c2 initialized");
}
请问这个没有什么名字只有括号的函数是什么啊?
谁能给我详细讲解一下。
c1 = new Mug(1);
c2 = new Mug(2);
System.out.println("c1 & c2 initialized");
}
我也想知道这个是什么,以前怎么没碰到过,没名字,也没关键字,哪位能讲一下吗?