Demo8_静态 继承

package test02;
public class Demo8_StaticInheritance {
public static void main(String[] args)
//public 权限最大
//static 不需要对象,直接用给定的类名就可以访问该函数了
//void 不需要返回值
//main 函数名 该名称是固定的
//(String[] args) 主函数的参数列表:字符串属性类型的参数
//args arguments:参数。该名称就是一个变量名 JVM 传递了一个字符串类型的一维数组
{
//Person p = new Person(“lisi”,20);

    //p.speak();
    //Person.sleep();
    //new Person.sleep();
    //Circle c =new Circle(2);
    //double area = c.getArea();
    //System.out.println("area="+area);
    //Demo.show();
    //Demo.show();
    new ABC();
      new ABC(5);
    //局部代码块(只用于主函数)
 //可以控制局部变量的生命周期

// {
// int x=5;
// System.out.println(“局部代码块”+x);
// }
// System.out.println(“over”+x);
}
}
//静态方法不能访问非静态成员
//非静态方法能访问静态成员
//静态的弊端在于访问的局限性。好处是可以直接被类名调用

//静态方法不允许出现this,super关键字

//为什么不能够访问?
//1.静态是随着类的加载就加载了,也是随着类的消失而消失
//2.静态优先于对象存在,被对象共享
//3.因为静态先存在于内存中无法访问后来的对象中的数据,所以静态无法访问非静态,而且内部无法书写this,因此这是对象有可能不存在,this没有任何指向性
class Person
{
private int age;//age被修饰为私有,也就是被隐藏了,是封装的一种体现
private String name;
public Person(String name, int age) {
// TODO Auto-generated constructor stub
this.name = name ;
this.age = age ;
}
public void speak()

{
    System.err.println("name="+this.name+"age="+this.age);
}
//定义一个睡觉功能
public static void sleep()
//创建对象是为了产生实例并对其进行封装,但是调用功能时却没有用到这些对象中封装的数据
//虽然可以运行通过但是堆内存中空间 浪费严重,不建议创建对象
//Java中的解决方案就是使用static关键字,这是一个成员修饰符
//被静态修饰符static修饰的方法除了可以被对象调用之外,还可以被类名调用
//不是所有的方法都可以定义成静态


//定义功能时,如果功能不需要访问定义类中定义的成员变量时,该功能需要静态修饰。

{
    System.out.println("睡觉zzzZZZ");
}

}
class Circle
{
private double radius;
private static double pi = 3.14;
//什么时候定义静态变量
//当改成员变量的值,每一个对象都一致时,就可以对该成员变量进行静态修饰
// 静态变量(类变量)和成员变量(实例变量)的区别
// 1.所属不同 静态变量所属于类,成员变量所属于对象
// 2.调用不同 静态变量可以被对象和类调用(一般用类名调用)
// 3.加载时期不同 静态变量随着类的加载而加载 成员变量随着对象的加载而加载
// 4.内存的存取区域不同 静态变量存储在方法区中 成员变量存储在堆内存中
Circle(double radius)
{
this.radius = radius;
}
double getArea()
{
return radius*pi*radius;
}
}
//类一加载,需要做有些动作,不一定需要对象
//目标:必须了解加载顺序
//静态代码块: 随着类的加载而执行,仅执行一次
// 用于给类进行初始化

//静态代码块
class Demo
{
static int x=9;//静态变量有两次初始化,一次默认初始化,一次显示初始化
//定义一个静态代码块
static //在静态变量显示初始化以后运行
{
System.out.println(“类加载执行的部分…”+x);
}
static void show()
{
System.out.println(“show run”);
}
}
//构造代码块
class ABC
{
//创建一个构造代码块 只要创建对象就会被调用。给所有对象初始化。构造函数只对对应的对象针对性的初始化
//这里面可以定义不同构造函数的共性代码
{
System.out.println(“code run”);
}
ABC()
{
System.out.println(“demo code”);
System.out.println(“—->hahaha”);

}
ABC(int x)
{
    System.out.println("asasasa"+x);
    System.out.println("---->hahaha");
}

}
//对象的初始化过程
class ChuShiHua
{
static int x=1;
int y=1;
static {
System.out.println(“hjsahj”+x);
}
{
System.out.println(“asdsdasj”+y);
}
ChuShiHua()//构造函数
{
//super();//访问父类构造函数
//成员变量的显示初始化
//构造代码块初始化
System.out.println(“sdasda”+y);
}
}

猜你喜欢

转载自blog.csdn.net/mingxu_W/article/details/81333925