类变量类方法+mian+代码块+单例设计模式+final+抽象类

类变量和类方法

Static类变量是在加载的时候就生成了,在对象里共享的,任何一个对象访问时,取到的都是相同的值,任何一个对象修改他时,修改的也是同一个变量。而且访问变量时必须遵循相应的访问权限。public static int num;静态方法可以直接通过类名调用,非静态方法要新建一个对象再通过对象调用。静态方法只能访问静态成员,普通方法可以访问非静态成员也可以访问静态成员。且静态方法可以访问本类的静态成员。

类变量是该类的所有对象共享的,实例变量是每个对象共享的。

输出结果为:count = 9;count = 10;11

id++错误,注销就可以

new Person时构造器会执行一遍,上述练习输出为0,1

this.total = total;×,因为在static方法中不允许使用this方法,Person.total = total;√

total = 4;

main方法

main方法是java虚拟机在调用,java需要调用类的main方法,所以该方法的访问权限必须是public。java虚拟机在执行main方法时不必创建对象,所以该方法必须是static。

java Hello后面的参数就是传进去的args数组元素

在idea中则是通过

在program arguments里进行传递

代码块

没有方法名,没有返回,没有参数,只有方法体。代码块调用的顺序优先于构造器,在类对象中使用{……}圈住。如果加了static则只会执行一次,如果创建子类对象,父类的代码块先加载,子类的代码块后加载。

static代码块只在类加载的时候被调用,

类加载的情况

①创建对象实例时(new)

②创建子类对象实例,父类也会被加载

③使用类的静态成员时

static代码块不用创建对象都可以执行(在类加载时),而普通代码块只有在创建了对象才会执行(而且每创建一次就会加载一次)。

重点难点

创建一个对象时,在一个类调用顺序是:

①调用静态代码块和静态属性初始化。(如果有多个则按顺序调用)

②调用普通代码块和普通属性的初始化(如果有多个普通代码和多个普通属性初始化按定义调用)

③调用构造方法

构造器前面其实隐含了super()和调用普通代码块,

class A{

        public void AAA(){

                super();//执行父类的代码块

                System.out.println("");

}

}

创建子类对象时,他们的静态代码块,静态属性,静态属性初始化,普通代码块,普通属性初始化,构造方法的调用顺序如下:

  1. 父类的静态代码块和静态属性
  2. 子类的静态代码块和静态属性
  3. 父类的普通代码块和普通属性初始化
  4. 父类的构造方法
  5. 子类的普通代码快和普通属性初始化,
  6. 子类的构造方法

输出in static block!;100 100,在第一次调用对象时会执行一遍类。然后之后就只调用对应的对象。

静态成员sam初始化

static块执行

sam1成员初始化

Test默认构造函数被调用。

单例设计模式

静态方法和属性的经典使用,单例模式就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。1)饿汉式    2)懒汉式

饿汉式单例模式(有可能造成创建对象但是没有用,造成资源浪费)

        1.将构造器私有化

        2.在类的内部直接创建对象,该对象是static

        3.提供一个公共的static方法,返回gf对象

懒汉式单例模式

1.将构造器私有化

2.定义一个static静态属性对象

3.提供一个public的static方法,可以返回一个Cat对象

4.只有当用户使用这个方法时,后面再次调用还是会返回上次

final关键字

使用情况:当不希望类被继承,可以用final修饰,加在class前

父类的方法不希望子类重写(但是可以被继承),则使用final修饰,用在返回值前,不能修改final值

当不希望属性值被修改,则使用final修饰(可以在构造器,代码块或者直接在定义的时候赋值)

一般来说将类修饰成final类,对象就没必要修饰成final了,

使用final不会导致类加载,索引static块不会被执行。

包装类(integer,Double,Float,Boolean等都是final类型的),String也是final类。

抽象类

抽象方法就是没有实现的方法,也就是没有方法体(没有{}),当一个类中存在抽象方法时,该类也要改为抽象类。抽象类会被继承,由其子类实现该方法。只能修饰类和方法,不能修饰属性和其他的。抽象方法不能使用private、final、static。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值