package com.atguigu.test05.exer1;
/*
* (1)Father类的类初始化
* ①类变量显式赋值:这里没有
* ②静态代码块
* System.out.println("(1)父类的静态代码块");
* (2)Son类的类初始化
* ①类变量显式赋值:这里没有
* ②静态代码块
* System.out.println("(4)子类的静态代码块");
*
* (3)执行Father类的是实参初始化方法<init>()
* ①非静态成员变量的显式赋值:这里没有
* ②非静态代码块:
* System.out.println("(2)父类的非静态代码块");
* ③父类的无参构造
* System.out.println("(3)父类的无参构造");
*
* (4)执行Son类的实例初始化方法<init>()
* ①非静态成员变量的显式赋值:这里没有
* ②非静态代码块:
* System.out.println("(5)子类的非静态代码块");
* ③子类的无参构造
* System.out.println("(6)子类的无参构造");
*/
public class TestExer1 {
public static void main(String[] args) {
Son son = new Son();
}
}
class Father{
static{
System.out.println("(1)父类的静态代码块");
}
{
System.out.println("(2)父类的非静态代码块");
}
Father(){
System.out.println("(3)父类的无参构造");
}
}
class Son extends Father{
static{
System.out.println("(4)子类的静态代码块");
}
{
System.out.println("(5)子类的非静态代码块");
}
Son(){
System.out.println("(6)子类的无参构造");
}
}
package com.atguigu.test05.exer2;
/*
* (1)Fu类的类初始化
* ①类变量显式赋值:
* i = getNum("(1)i");
* public static int getNum(String str){
print(str);
public static void print(String str){
System.out.println(str + "->" + i); (1)i -> 0(默认值)
}
return ++i; i=1
}
* ②静态代码块
* static{
print("(3)父类静态代码块");
public static void print(String str){
System.out.println(str + "->" + i); (3)父类静态代码块 -> 1
}
}
* (2)Zi类的类初始化
* ①类变量显式赋值:
* k = getNum("(6)k");
*
public static int getNum(String str){
print(str);
public static void print(String str){
System.out.println(str + "->" + k); (6)k -> 0(默认值)
}
return ++k; k=1
}
* ②静态代码块
* static{
print("(8)子类静态代码块");
public static void print(String str){
System.out.println(str + "->" + k); (8)子类静态代码块 -> 1
}
}
*
* (3)执行Fu类的是实参初始化方法<init>()
* ①非静态成员变量的显式赋值:
* j = getNum("(2)j");
*
public static int getNum(String str){
print(str);
public static void print(String str){
System.out.println(str + "->" + i); (2)j -> 1
}
return ++i; i=2
}
* ②非静态代码块:
* {
print("(4)父类非静态代码块,又称为构造代码块");
public static void print(String str){
System.out.println(str + "->" + i); (4)父类非静态代码块,又称为构造代码块 -> 2
}
}
* ③父类的无参构造
* Fu(){
print("(5)父类构造器");
public static void print(String str){
System.out.println(str + "->" + i); (5)父类构造器 -> 2
}
}
*
* (4)执行Zi类的实例初始化方法<init>()
* ①非静态成员变量的显式赋值:
* h = getNum("(7)h");
public static int getNum(String str){
print(str);
* public static void print(String str){
System.out.println(str + "->" + k); (7)h ->1
}
return ++k; k=2
}
*
* ②非静态代码块:
* {
print("(9)子类非静态代码块,又称为构造代码块");
public static void print(String str){
System.out.println(str + "->" + k); (9)子类非静态代码块,又称为构造代码块 ->2
}
}
* ③子类的无参构造
* Zi(){
print("(10)子类构造器");
public static void print(String str){
System.out.println(str + "->" + k); (10)子类构造器 ->2
}
}
*/
public class TestExer2 {
public static void main(String[] args) {
Zi zi = new Zi();
}
}
class Fu{
private static int i = getNum("(1)i");
private int j = getNum("(2)j");
static{
print("(3)父类静态代码块");
}
{
print("(4)父类非静态代码块,又称为构造代码块");
}
Fu(){
print("(5)父类构造器");
}
public static void print(String str){
System.out.println(str + "->" + i);
}
public static int getNum(String str){
print(str);
return ++i;
}
}
class Zi extends Fu{
private static int k = getNum("(6)k");
private int h = getNum("(7)h");
static{
print("(8)子类静态代码块");
}
{
print("(9)子类非静态代码块,又称为构造代码块");
}
Zi(){
print("(10)子类构造器");
}
public static void print(String str){
System.out.println(str + "->" + k);
}
public static int getNum(String str){
print(str);
return ++k;
}
}
package com.atguigu.test05.exer3;
/*
* (1)类初始化
* ①静态代码块
* static{
i = 100;//可以
MyClass.i++;// i=101
System.out.println("(1)静态代码块 i=" + MyClass.i); //(1)静态代码块 i=101
}
②静态变量的显示赋值
i = getNum("(4)i");
public static int getNum(String str){
print(str);
public static void print(String str){
System.out.println(str + "->" + i); //(4)i-》101
}
return ++i; i=102
}
* (2)实例初始化
* ①非静态代码块
* {
j = 100;
this.j++; j=101
System.out.println("(2)构造代码块j=" + this.j); //(2)构造代码块j=101
//构造代码块:就是非静态代码块,因为它总是和构造器一起执行,所以就把它叫做构造代码块
}
②非静态变量的显式赋值
j = getNum("(5)j");
public static int getNum(String str){
print(str);
public static void print(String str){
System.out.println(str + "->" + i); //(5)j->102
}
return ++i; i=103
}
③构造器
MyClass(){
j = 200;
j++; j=201
System.out.println("(3)构造器j=" + j); //(3)构造器j=201
}
*/
public class TestExer3 {
public static void main(String[] args) {
MyClass obj = new MyClass();
}
}
class MyClass{
static{
i = 100;//可以
MyClass.i++;//stackoverflow
System.out.println("(1)静态代码块 i=" + MyClass.i);
}
{
j = 100;
this.j++;
System.out.println("(2)构造代码块j=" + this.j);
}
MyClass(){
j = 200;
j++;
System.out.println("(3)构造器j=" + j);
}
private static int i = getNum("(4)i");
private int j = getNum("(5)j");
public static void print(String str){
System.out.println(str + "->" + i);
}
public static int getNum(String str){
print(str);
return ++i;
}
}
package com.atguigu.test05.exer3_0;
/*
* (1)以下代码是否可以编译通过
* 不能
* (2)如果能,运行结果是什么
* (3)如果不能怎么改
* 第一种修改方法:把声明挪到前面;
* 第二种修改方法:看TestExer3
*/
/*public class TestExer3_0 {
public static void main(String[] args) {
MyClass obj = new MyClass();
}
}
class MyClass{
static{
i++;//声明i在后面
System.out.println("(1)静态代码块 i=" + i);
}
{
j = 100;
j++;
System.out.println("(2)构造代码块j=" + j);
}
MyClass(){
j = 200;
j++;
System.out.println("(3)构造器j=" + j);
}
private static int i = getNum("(4)i");
private int j = getNum("(5)j");
public static void print(String str){
System.out.println(str + "->" + i);
}
public static int getNum(String str){
print(str);
return ++i;
}
}
*/
package com.atguigu.test05.exer4;
/*
* 对于T来说,就是完成类初始化
*
* 创建对象,调用类的实例初始化<init>()或<init>(String str)
*
*
* (1)静态变量的显式赋值
* k = 0;
t1 = new T("t1");
<init>(String str)
①j = print("j");
public static int print(String str){
System.out.println((++k) + ":" + str + " i=" + i + " n=" + n); 1:j i=0 n=0
++n; n=1 k=1
return ++i; i=1
}
② {
print("构造块");
public static int print(String str){
System.out.println((++k) + ":" + str + " i=" + i + " n=" + n); 2:构造块 i=1 n=1
++n; n=2 k=2
return ++i; i=2
}
}
③public T(String str){
System.out.println((++k) + ":" + str + " i=" + i + " n=" + n); 3:t1 i=2 n=2
++n; n=3 k=3
++i; i=3
}
* t2 = new T("t2");
<init>(String str)
①j = print("j");
public static int print(String str){
System.out.println((++k) + ":" + str + " i=" + i + " n=" + n); 4:j i=3 n=3
++n; n=4 k=4
return ++i; i=4
}
② {
print("构造块");
public static int print(String str){
System.out.println((++k) + ":" + str + " i=" + i + " n=" + n); 5:构造块 i=4 n=4
++n; n=5 k=5
return ++i; i=5
}
}
③public T(String str){
System.out.println((++k) + ":" + str + " i=" + i + " n=" + n); 6:t2 i=5 n=5
++n; n=6 k=6
++i; i=6
}
i = print("i");
public static int print(String str){
System.out.println((++k) + ":" + str + " i=" + i + " n=" + n); 7:i i=6 n=6
++n; n=7 k=7
return ++i; i=7
}
n = 99;
* (2)静态代码块
* static{
print("静态块");
public static int print(String str){
System.out.println((++k) + ":" + str + " i=" + i + " n=" + n); 8:静态块 i=7 n=99
++n; n=100 k=8
return ++i; i=8
}
}
*/
public class T {
public static int k = 0;
public static T t1 = new T("t1");
public static T t2 = new T("t2");
public static int i = print("i");
public static int n = 99;
public int j = print("j");
{
print("构造块");
}
static{
print("静态块");
}
public T(String str){
System.out.println((++k) + ":" + str + " i=" + i + " n=" + n);
++n;
++i;
}
public static int print(String str){
System.out.println((++k) + ":" + str + " i=" + i + " n=" + n);
++n;
return ++i;
}
public static void main(String[] args) {
}
}
* (1)Father类的类初始化
* ①类变量显式赋值
* ②静态代码块
* (2)Son类的类初始化
* ①类变量显式赋值
* ②静态代码块
* (3)执行Father类的是实例初始化方法<init>()
* ①非静态成员变量的显式赋值:这里没有
* ②非静态代码块:
* ③父类的无参构造
* (4)执行Son类的实例初始化方法<init>()
* ①非静态成员变量的显式赋值:这里没有
* ②非静态代码块:
* ③子类的无参构造