由于 Java 虚拟机需要调用类的 main()方法,所以该方法的访问权限必须是 public,又因为 Java 虚拟机在执行 main()方法时不必创建对象,所以该方法必须是 static 的,该方法接收一个 String 类型的数组参数,该数组中保存执行 Java 命令时传递给所运行的类的参数。

又因为 main() 方法是静态的,我们不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员,这种情况,我们在之前的例子中多次碰到。

main()方法的使用说明

 * 1.main()方法作为程序的入口;

 * 2.main()方法也是一个普通的静态方法

 * 3.main()方法也可以作为我们与控制台交互的方式。(之前,使用 Scanner)

类的成员之四:代码块(或初始化块)

 *

 * 1.代码块的作用:用来初始化类、对象的

 * 2.代码块如果有修饰的话,只能使用 static

 * 3.分类:静态代码块 vs 非静态代码块

 *

 * 4.静态代码块

 * 》内部可以有输出语句

 *  》随着类的加载而执行,而且只执行一次

 *  》作用:初始化类的信息

 *  》如果一个类中,定义了多个静态代码块,则按照声明的先后顺序执行

 *  》静态代码块的执行,优先于非静态代码块的执行

 *  》静态代码块内只能调用静态的属性、静态的方法,不能调用非静态的结构

 *

 * 5.非静态代码块

 *  >内部可以有输出语句

 *  >随着对象的创建而执行

 *  >每创建一个对象,就执行一次非静态代码块。

 *  >作用:可以在创建对象时,对对象的属性等进行初始化。

 *  >如果一个类中,定义了多个非静态代码块,则按照声明的先后顺序执行

 *  >非静态代码块内可以调用静态的属性、静态的方法,或非静态的属性、非静态的方法。

 * 

 * 对属性可以赋值的位置:

 *  默认初始化

 *  显式初始化

 *  构造器中初始化

 *  有了对象以后,可以通过"对象.属性""对象.方法"的方式,进行赋值。

 *  在代码块中赋值

class Father {

static {

System.out.println("11111111111");//1

}

{

System.out.println("22222222222");//5  //10

}

public Father() {

System.out.println("33333333333");//6    //11

}

}

public class Son extends Father {

static {

System.out.println("44444444444");//2

}

{

System.out.println("55555555555");//7

}

public Son() {

System.out.println("66666666666");//8

}

public static void main(String[] args) { // 由父及子 静态先行

System.out.println("77777777777");//3

System.out.println("************************");//4

new Son();

System.out.println("************************");//9

new Father();

}

}

对象的初始化顺序:首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法。总之一句话,静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法

每日复习------main()方法以及对象的初始化顺序的更多相关文章

  1. [C#解惑] #2 对象的初始化顺序

    谜题 在上一篇C#解惑中,我们提到了对象的初始化顺序.当我们创建一个子类的实例时,总是会先执行基类的构造函数,然后再执行子类的构造函数.那么实例字段是什么时候初始化的呢?静态构造函数和静态字段呢?今天 ...

  2. [百度空间] [转] 在 Visual C++ 中控制全局对象的初始化顺序

    from: http://blog.csdn.net/classfactory/archive/2004/08/07/68202.aspx 在 C++ 中,同一个翻译单位(.cpp文件)里的全局对象的 ...

  3. Java对象的初始化顺序

    new一个对象时,该对象的初始化顺序如下 : 父类中的静态成员变量 父类中的静态代码块 子类中的静态成员变量 子类中的静态代码块 父类中的非静态变量 父类中的非静态代码块 父类构造函数 子类中的非静态 ...

  4. Java 静态static关键字,main函数,对象的初始化过程,对象调用成员,单例模式的设计,静态代码块(6)

    Java 静态static关键字,静态代码块详情参考:static的使用原理讲解http://www.cnblogs.com/itcqx/p/5519464.html main函数: java Mai ...

  5. C++从静态对象的初始化顺序理解static关键字

    问题 首先考虑一个全局变量的初始化顺序问题 在头文件1中: extern int b; ; 在头文件2中: extern int a; ; 源文件中包含了头文件1和头文件2,这种情况下a和b可能的值是 ...

  6. C++ 类对象的初始化顺序 ZZ

    C++构造函数调用顺序 1.     创建派生类的对象,基类的构造函数优先被调用(也优先于派生类里的成员类): 2.    如果类里面有成员类,成员类的构造函数优先被调用:(也优先于该类本身的构造函数 ...

  7. java类对象的初始化顺序

    在下面这个例子中,我们分别在父类和子类中测试了静态代码块.普通代码块.静态成员变量.普通成员变量.构造器.静态内部类. 一:代码块及变量测试 class Field{ public static St ...

  8. JAVA 父类与子类初始化顺序问题

    main方法-->子类对象的初始化语句(new className()语句)--->子类构造[因为继承的缘故,它先不会执行]--->父类构造[这一步先不会执行]--->父类静态 ...

  9. 【转】两道面试题,带你解析Java类加载机制(类初始化方法 和 对象初始化方法)

    本文转自 https://www.cnblogs.com/chanshuyi/p/the_java_class_load_mechamism.html 关键语句 我们只知道有一个构造方法,但实际上Ja ...

  10. main方法执行之前,做什么事

    1.我们知道程序的入口是main方法,那么在执行main方法之前,需要做些什么准备工作呢? 2.main方法执行之前,必须要把non-local static对象构造完成.static对象有:全局对象 ...

随机推荐

  1. react实现转盘动画

    转盘动画方法如下: /** * 点击转动转盘 */ const turnCircle = () => { let runDeg = +(Math.random() * 360).toFixed( ...

  2. 【APT】Patchwork APT组织针对巴基斯坦国防官员攻击活动分析

    前言 Patchwork(白象.摩诃草.APT-C-09.Dropping Elephant)是一个疑似具有印度国家背景的APT组织,该组织长期针对中国.巴基斯坦等南亚地区国家进行网络攻击窃密活动.本 ...

  3. 从xml读取gps数据获取经纬高

    #!/usr/bin/python # -*- coding: UTF-8 -*- from xml.dom.minidom import parse import xml.dom.minidom & ...

  4. visio2019 破解

    链接:https://pan.baidu.com/s/14AU8GFXhgjp87pK1bIK8UA?pwd=ju61 提取码:ju61 --来自百度网盘超级会员V5的分享 可能需要关闭防火墙和win ...

  5. C++ 用运算符重载 实现复数相加

    #include "stdafx.h" #include <iostream> using namespace std; class Complex {public: ...

  6. json中有List集合时,转换List集合内元素的时间格式

    1 public class User implements Serializable { 2 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" ...

  7. NOIP2009普及组

    T3]细胞分裂 [算法]数论 [题解]均分的本质是A整除B,A整除B等价于A的质因数是B的子集. 1.将m1分解质因数,即m1=p1^a1*p2^a2*...*pk^ak 所以M=m1^m2=p1^( ...

  8. golang sync.RWMutex总结笔记

    背景 最近项目中遇到两次RWMutex死锁问题,所以稍微看了一下资料和源码,稍作记录 源码 type RWMutex struct { w Mutex // held if there are pen ...

  9. C#获取本地所有打印机名称

    引用:using System.Drawing.Printing; 实现代码: List<string> PrintS = new List<string>(); foreac ...

  10. 标题Ubuntu将默认的python3改为默认的python

    ryzen@cp7:~$ python Command 'python' not found, did you mean: command 'python3' from deb python3 roo ...