java 类加载先后顺序
比如我自己写的类:publicclassTest{publicstaticvoidmain(String[]args){//}}classA{}classB{}请问类加载...
比如我自己写的类:
public class Test{
public static void main(String[] args){
//
}
}
class A{
}
class B{
}
请问类加载的顺序是什么啊?类A和类B之间顺序是怎样的?
类加载发生在编译的时候吧? 展开
public class Test{
public static void main(String[] args){
//
}
}
class A{
}
class B{
}
请问类加载的顺序是什么啊?类A和类B之间顺序是怎样的?
类加载发生在编译的时候吧? 展开
4个回答
展开全部
1.父类静态代码块;
2.子类静态代码块;
3.父类非静态代码块;
4.父类构造函数;
5.子类非静态代码块;
6.子类构造函数;
举例:
public class ExA {
static {
System.out.println("父类静态代码块。");
}
public ExA() {
System.out.println("父类构造函数。");
}
{
System.out.println("父类非静态代码块。");
}
public static void main(String[] args) {
new ExB();
}
}
class ExB extends ExA {
static {
System.out.println("子类静态代码块。");
}
{
System.out.println("子类非静态代码块。");
}
public ExB() {
System.out.println("子类构造函数。");
}
}
执行结果:父类静态代码块。子类静态代码块。父类非静态代码块。父类构造函数。子类非静态代码块。子类构造函数。
2.子类静态代码块;
3.父类非静态代码块;
4.父类构造函数;
5.子类非静态代码块;
6.子类构造函数;
举例:
public class ExA {
static {
System.out.println("父类静态代码块。");
}
public ExA() {
System.out.println("父类构造函数。");
}
{
System.out.println("父类非静态代码块。");
}
public static void main(String[] args) {
new ExB();
}
}
class ExB extends ExA {
static {
System.out.println("子类静态代码块。");
}
{
System.out.println("子类非静态代码块。");
}
public ExB() {
System.out.println("子类构造函数。");
}
}
执行结果:父类静态代码块。子类静态代码块。父类非静态代码块。父类构造函数。子类非静态代码块。子类构造函数。
展开全部
根据static的特性,在类被加载的时候执行!
所以我们可以使用static来进行测试!
测试代码如下:
public class Test{
public static void main(String[] args){
//
}
static{
System.out.println("class Test");
}
}
class A{
static{
System.out.println("class A");
}
}
class B{
static{
System.out.println("class B");
}
}
执行结果:
class Test
结论:实际上,在java中,只有你已经用到的类,JVM才会执行加载,而且加载顺序是:主类-->其他类(与在主类中被使用的顺序相同)
验证代码如下:
public class Test{
public static void main(String[] args){
//
new A();
new B();
}
static{
System.out.println("class Test");
}
}
class A{
static{
System.out.println("class A");
}
}
class B{
static{
System.out.println("class B");
}
}
执行结果:
class Test
class A
class B
所以我们可以使用static来进行测试!
测试代码如下:
public class Test{
public static void main(String[] args){
//
}
static{
System.out.println("class Test");
}
}
class A{
static{
System.out.println("class A");
}
}
class B{
static{
System.out.println("class B");
}
}
执行结果:
class Test
结论:实际上,在java中,只有你已经用到的类,JVM才会执行加载,而且加载顺序是:主类-->其他类(与在主类中被使用的顺序相同)
验证代码如下:
public class Test{
public static void main(String[] args){
//
new A();
new B();
}
static{
System.out.println("class Test");
}
}
class A{
static{
System.out.println("class A");
}
}
class B{
static{
System.out.println("class B");
}
}
执行结果:
class Test
class A
class B
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
父类态代码块
父类静态属性
//以上根据代码顺序
子类静态属性
子类静态代码块
//以上根据代码顺序
父类属性
父类代码块
//以上根据代码顺序
父类构造器
子类属性
子类代码块
//以上根据代码顺序
子类构造方法
子类方法
父类方法
父类静态方法
子类静态方法
package com.zz;
/**
* Created by @摩西摩西 2020/3/21 22:29
**/
public class Father {
public String name=Son.getmetod("父类属性");
public Father(){
System.out.println("父类构造器");
}
{
System.out.println("父类代码块");
}
public void fatherMethod(){
System.out.println("父类方法");
}
static {
System.out.println("父类态代码块");
}
static String name1=Son.getmetod("父类静态属性");
public static void fatherStaticMethod(){
System.out.println("父类静态方法");
}
}
package com.zz;
/**
* Created by @摩西摩西 2020/3/21 22:32
**/
public class Son extends Father {
public String name = getmetod("子类属性");
public Son() {
System.out.println("子类构造方法");
}
{
System.out.println("子类代码块");
}
public void sonMethod(){
System.out.println("子类方法");
}
public static String name1 = getmetod("子类静态属性");
static {
System.out.println("子类静态代码块");
}
public static void sonStaticMethod() {
System.out.println("子类静态方法");
}
public static String getmetod(String s) {
System.out.println(s);
return s;
}
public static void main(String[] args) {
Son son= new Son();
son.sonMethod();
son.fatherMethod();
fatherStaticMethod();
sonStaticMethod();
}
}
父类静态属性
//以上根据代码顺序
子类静态属性
子类静态代码块
//以上根据代码顺序
父类属性
父类代码块
//以上根据代码顺序
父类构造器
子类属性
子类代码块
//以上根据代码顺序
子类构造方法
子类方法
父类方法
父类静态方法
子类静态方法
package com.zz;
/**
* Created by @摩西摩西 2020/3/21 22:29
**/
public class Father {
public String name=Son.getmetod("父类属性");
public Father(){
System.out.println("父类构造器");
}
{
System.out.println("父类代码块");
}
public void fatherMethod(){
System.out.println("父类方法");
}
static {
System.out.println("父类态代码块");
}
static String name1=Son.getmetod("父类静态属性");
public static void fatherStaticMethod(){
System.out.println("父类静态方法");
}
}
package com.zz;
/**
* Created by @摩西摩西 2020/3/21 22:32
**/
public class Son extends Father {
public String name = getmetod("子类属性");
public Son() {
System.out.println("子类构造方法");
}
{
System.out.println("子类代码块");
}
public void sonMethod(){
System.out.println("子类方法");
}
public static String name1 = getmetod("子类静态属性");
static {
System.out.println("子类静态代码块");
}
public static void sonStaticMethod() {
System.out.println("子类静态方法");
}
public static String getmetod(String s) {
System.out.println(s);
return s;
}
public static void main(String[] args) {
Son son= new Son();
son.sonMethod();
son.fatherMethod();
fatherStaticMethod();
sonStaticMethod();
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
类的加载不是在编译的时候,编译只是将Java的源文件编译成字节码文件(*.class),而,但Java程序在执行的时候才开始加载所需要的类,Java程序的入口时主方法,所以先加载的肯定是Test类,由于没有使用到A和B类,所以执行的时候就没有加载他们。
本人也是初学者,回答有错误的话请别见怪!
本人也是初学者,回答有错误的话请别见怪!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询