㈠ java 调用静态方法和构造函数和静态块执行的先后顺序
java中首先是静态块先执行,静态方法,最后是构造函数。示例如下:
publicclassExA{
static{
System.out.println("父类--静态代码块");
}
publicExA(){
System.out.println("父类--构造函数");
}
{
System.out.println("父类--非静态代码块");
}
publicstaticvoidmain(String[]args){
newExB();
}
}
classExBextendsExA{
static{
System.out.println("子类--静态代码块");
}
{
System.out.println("子类--非静态代码块");
}
publicExB(){
System.out.println("子类--构造函数");
}
}
执行结果
=====
父类--静态代码块
子类--静态代码块
父类--非静态代码块
父类--构造函数
子类--非静态代码块
子类--构造函数
㈡ Java构造函数,构造代码块和静态代码块的区别
构造函数:执行时间比构造代码块时间晚,也是在对象初始化的时候运行。没有返回值,构造函数名称和类名一致。
构造代码块:执行时间比静态代码块晚,比构造函数早,和构造函数一样,只在对象初始化的时候运行。没有名字、参数和返回值。
静态代码块:最早执行,类被载入内存时执行,只执行一次。没有名字、参数和返回值,有关键字static。
静态代码块只会在类被载入内存时加载一次,是最先执行的,然后是构造代码块,最后才是构造函数。构造代码块和构造函数都是在对象创建的时候执行,有几个对象就会执行几次。
㈢ Java 中能不能有静态的构造函数
java中静态的东西都是属于类的,为类服务,构造函数是为了初始化对象,为对象服务。构造函数是用来生成实例,既然是实例就不是static的。这两者是相互矛盾的
㈣ Java构造函数(方法)存储在jvm哪个内存里
存放到方法区当中;
new出来的是实例对象,实例对象才是存放在堆当中;
构造函数对应的是<init>方法,方法信息随着类加载器加载到方法区当中。
栈:
以栈帧为单位,存放的不是方法具体的结构,只是通常一个方法对应一个栈帧,对应的入栈出栈就是栈帧的入栈出栈。栈帧中有局部变量表,操作数栈,方法返回地址,动态链接。其中局部变量表存放局部变量,包括形参,非静态方法默认在第一个索引存放一个this变量;操作数栈用于操作局部变量表和一些值的运算,比如读取表中变量的值进行运算,或存放相应的值到局部变量表中;方法返回地址则是用于记录对应方法的下一条指令的地址;动态链接是符号引用变成的直接引用。
堆:
存放实例对象,在jdk7开始,还存放静态变量和字符串常量池
方法区:
存放类元信息,比如完整类名全称,public,abstract等修饰符,实现的接口有序列表等;方法信息,比如修饰符,返回类型等;JIT代码缓存,也就是被即时编译器编译后的热点代码,用于提高性能;域信息,也就是属性信息,比如修饰符,类型等;运行时常量池,字节码文件中常量池的运行时表现,类似符号引用的记录,不过蕴含的信息更为丰富,而且具有动态性。jdk6及以前,还存放静态变量,运行时常量池中还存放字符串常量池,到了jdk7则移到了堆中。
㈤ Java有静态构造函数吗
在java中,构造方法是通过new来实例化一个对象的,
而静态方法是类方法,直接通过类名直接调用的,是不能通过对象调用的,所以也就不能用static来修饰,故java不能有静态构造函数。
㈥ java中构造方法是否是静态的
静态的东西是属于类的,非静态的东西是属于实例的。没有静态的构造函数。
静态的先执行,然后才是非静态的。 输出C B A
class A{
public A(){
System.out.print("A");
}
{
System.out.print("B");
}
static {
System.out.print("C");
}
}
㈦ 为什么Java中不能有静态的构造函数
因为静态方法是没有状态的,接收一个参数,然后返回一个参数或者或者对该参数做什么操作。
而非静态方法与该对象有关,可以改变该方法所在的类的对象的状态。
构造方法可以设置一个对象的初始状态,这与静态方法冲突了。
㈧ JAVA中为什么要定义静态代码块和构造函数呢
您好,提问者:
首先静态代码块的作用是,只执行一次,不管是new还是直接类名。
构造函数用于传递或者初始化,如果想要这个类的方法或者变量,必须new初始化。
静态代码块:
用于初始化一些操作,例如数据库连接、配置文件读取等。
构造函数:
用于new
xxx(值),如果一个类不想被new可以把构造方法写为private类型。