P373java类变量的引出-P390java代码块的细节
package com.work;
public class ChildGame {
public static void main(String[] args) {
//定义一个变量count, 统计有多少小孩加入了游戏
int count = 0;
Child child1 = new Child("白骨精");
child1.join();
child1.count++;
//类变量,可以通过类名来访问
System.out.println("共有" + Child.count + " 小孩加入了游戏...");
}
}
class Child{
private String name;
public static int count=0;
//定义一个变量count,是一个类变量(静态变量) static 静态
//该变量最大的特点就是会被Child 类的所有的对象实例共享
public Child(String name) {
this.name = name;
}
public void join() {
System.out.println(name + " 加入了游戏..");
}
}
-
P377java类变量定义
P383main方法
-
执行这个程序的时候,传入参数会形成数组(DOS命令加上 java Hello 参数1 to 参数n)P382
P384动态传值
package com;
public class Main02 {
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
System.out.println("args["+i+"]="+args[i]);
}
}
}
P385java代码块
-
package com.codeblock;
public class CodeBlock {
public static void main(String[] args) {
new Movie("小森");
//输出电影打开广告开始电影正式开始Movie(String name)被调用
//所以代码块的调用优先于构造器
}
}
class Movie {
private String name;
private double price;
private String director;
//构造器-重载
//下面三个构造器都有相同的语句,这个时候可以把三个语句放入先同的代码块中
{//不管哪个构造器创建对象都会调用代码块
System.out.println("电影打开");
System.out.println("广告开始");
System.out.println("电影正式开始");
}
public Movie(String name) {
System.out.println("Movie(String name)被调用");
this.name = name;
}
public Movie(String name, double price) {
this.name = name;
this.price = price;
}
public Movie(String name, double price, String director) {
this.name = name;
this.price = price;
this.director = director;
}
}
P386代码块细节
P387代码块的顺序
P389代码块关于继承关系的顺序(面试)
package com.codeblock;
public class CodeBlockdetial {
public static void main(String[] args) {
new B();
}
}
class A{
private static int n1=getN1();//1.父类的加载
private int n2=getN2();//5.普通属性的初始化(与6的优先级一样,但是代码顺序在前)
public int getN2(){
System.out.println("A的getN2的n2属性被调用");
return 222;
}
public static int getN1(){
System.out.println("静态方法的属性N1被调用");
return 11;
}
static {//2.父类的加载
System.out.println("A静态代码01被调用");
}
{//6.普通代码块
System.out.println("A普通代码库2被调用");
}
public A(){//7.父类的构造器
System.out.println("A默认构造器被调用");
}
}
class B extends A{
private static int nB1=getNB1();//3.子类的加载
private int nB2=getNB2();//8.普通属性的初始化(与9的优先级一样,但是代码顺序在前)
public int getNB2(){
System.out.println("B的getN2的n2属性被调用");
return 44;
}
public static int getNB1() {
System.out.println("静态方法的属性NB1被调用");
return 33;
}
public B(){//创建对象调用构造器从此开始
//super()//父类的构造器
//普通代码块和普通属性的初始化
System.out.println("B的无参构造器被调用");//10.子类的构造器
}
static {//4.子类的加载
System.out.println("B静态代码01被调用");
}
{//9.普通代码块
System.out.println("B普通代码库2被调用");
}
}
package com.codeblock;
public class CodeBlockdetial {
public static void main(String[] args) {
new C();//静态方法的属性N5被调用//C的getN4的n4属性被调用//C普通代码库2被调用//233
}
}
class C{
private static int n4=getN5();
private int n2=getN4();//5.普通属性的初始化(与6的优先级一样,但是代码顺序在前)
public int getN4(){
System.out.println("C的getN4的n4属性被调用");
return 222;
}
public static int getN5(){
System.out.println("静态方法的属性N5被调用");
return 11;
}
{
System.out.println(" C普通代码库2被调用");
System.out.println(n4+n2);
}
}
P390练习
//类加载(静态成员)普通代码块+普通属性,
//静态成员sam初始化,static块执行,sam1成员初始化,test默认无参构造器