java 类加载先后顺序

比如我自己写的类:publicclassTest{publicstaticvoidmain(String[]args){//}}classA{}classB{}请问类加载... 比如我自己写的类:

public class Test{
public static void main(String[] args){
//
}
}

class A{

}

class B{

}
请问类加载的顺序是什么啊?类A和类B之间顺序是怎样的?
类加载发生在编译的时候吧?
展开
 我来答
198901245631
推荐于2017-10-06 · TA获得超过3.5万个赞
知道大有可为答主
回答量:9037
采纳率:92%
帮助的人:1731万
展开全部
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("子类构造函数。");
}
}
执行结果:父类静态代码块。子类静态代码块。父类非静态代码块。父类构造函数。子类非静态代码块。子类构造函数。
斯欧康0Z
推荐于2017-09-29 · TA获得超过1416个赞
知道小有建树答主
回答量:558
采纳率:0%
帮助的人:294万
展开全部
根据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
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
白羊糖糖tang
2020-03-21
知道答主
回答量:1
采纳率:0%
帮助的人:636
展开全部
父类态代码块
父类静态属性
//以上根据代码顺序
子类静态属性
子类静态代码块
//以上根据代码顺序
父类属性
父类代码块
//以上根据代码顺序
父类构造器
子类属性
子类代码块
//以上根据代码顺序
子类构造方法
子类方法
父类方法
父类静态方法
子类静态方法

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();
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
RobertQuan
2010-05-24
知道答主
回答量:4
采纳率:0%
帮助的人:0
展开全部
类的加载不是在编译的时候,编译只是将Java的源文件编译成字节码文件(*.class),而,但Java程序在执行的时候才开始加载所需要的类,Java程序的入口时主方法,所以先加载的肯定是Test类,由于没有使用到A和B类,所以执行的时候就没有加载他们。
本人也是初学者,回答有错误的话请别见怪!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式