Java学习11

目录

一.类变量和类方法:

1.类变量定义访问:

2.类变量的使用细节:

3.类方法:

4.静态main方法(public static void main(String [] args)):

二.代码块:

1.基本语法:

2.代码块使用细节与注意事项:

三.单例模式(在程序运行过程中,只能创建一个对象实例):

(1)饿汉式单例模式步骤:

(2)懒汉式:

(3)区别:


一.类变量和类方法:

static变量保存在class实例的尾部,class对象保存在堆中。

static变量是同一个类的所有对象共享,static变量在类加载(new创建实例时类加载)的时候就生成了。

1.类变量定义访问:

(1)语法:

访问修饰符 static 数据类型 变量名;

(2)访问:

类名.类变量名(推荐)或者对象.类变量名

静态变量的访问修饰符的访问权限和范围和普通属性是一样的。

类变量是随着类加载而创建的,没有加载的实例也可以使用。

2.类变量的使用细节:

  • 实例变量不能通过类名.变量名来访问(非静态变量)
  • 类变量在类加载时就初始化了,即使你没有创建对象,只要类加载了,就可以使用类变量了。
  • 类变量的声明周期是随着类的加载而开始,随着类消亡而销毁。

3.类方法:

当方法使用static修饰后,方法就是静态方法,静态方法可以访问静态属性/变量。

(1)语法:

访问修饰符 static 数据返回类型 方法名(){ }(推荐)

static 访问修饰符 数据返回类型 方法名(){ }

(2)类方法的调用:

类名.类方法名或对象名.类方法名

(3)类方法的注意事项与使用细节:

非静态方法不能通过类名调用,类方法不允许使用与类相关的关键字(this、super)。

类方法(静态方法)只能访问静态变量或静态方法,普通成员既可以访问非静态成员(变量、方法),又可以访问静态变量(方法)。

4.静态main方法(public static void main(String [] args)):

(1)main方法是Java虚拟机来调用的,所以访问权限是public。

(2)Java虚拟机在执行main方法时不必创建对象,因此是方法必须是static。

(3)该方法接受String类型的数组参数

(4)main方法可以直接调用main方法所在类中的静态方法或静态属性,不能直接访问该类中的静态成员。

(4)main动态传值:

Edit configurations中的Program argument中填入参数,参数之间要以空格隔开。

二.代码块:

  • 代码块又称为初始化块,属于类中的成员,类似于方法,将逻辑语句封装在方法体中,通过{}包裹起来。
  • 与方法体不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象显示调用,而是加载类时,或创建对象时隐式调用。
  • 相当于另一种形式的构造器(对构造器的补充机制),可以做初始化的操作,如果多个构造器中都有重复的语句,可以抽取到代码块中,提高代码的复用性。
  • 代码块的执行顺序在构造器之前。

1.基本语法:

[修饰符]{

    代码

};

书写注意事项:

  1. 修饰符可选,要写的话,只能写static
  2. 代码块分两类,使用static修饰的叫静态代码块,没有static修饰的叫普通代码块。
  3. 逻辑语句可以为任何逻辑语句(输入、输出、方法调用、循环、判断) 

2.代码块使用细节与注意事项:

  • static代码块也叫静态代码块,作用就是对类进行初始化,而且它随着类加载而执行,并且只会执行一次。如果是普通代码块,每创建一个对象就执行一次。
  • 如果使用类的静态成员,普通代码并不会执行,而静态代码块会执行。
  • 调用静态代码块和静态属性初始化,静态代码块和静态属性初始化调用的优先级一样,如果多个静态代码块和多个静态变量初始化,则按他们定义的顺序调用。(普通代码块)
  • 构造器最前面其实隐含了super()和调用普通代码块,静态代码块在类加载时执行。
  • 静态代码块只能调用静态成员(静态属性和静态方法),普通代码块可以调用任意成员。

类加载:

  1. 创建对象实例(new)
  2. 创建子类对象实例,父类也会被加载。
  3. 使用类的静态成员时(静态属性、静态方法)

创建一个子类对象时,调用顺序如下:

三.单例模式(在程序运行过程中,只能创建一个对象实例):

(1)饿汉式单例模式步骤:

私有化构造器->类的内部创建对象(静态对象)->向外暴漏一个静态的公共方法->通过公共方法获取对象。

public class Stringto{
    public static void main(String[] args){
        girlfriend g = girlfriend.getInstance();//通过方法获取对象
        girlfriend g2 = girlfriend.getInstance();//g与g2是同一个对象
    }
}
class girlfriend{
   private static name;
   private static girlfriend gf = new girlfriend("小静");//类加载时完成静态属性初始化,只会初始化一次
   private girlfriend(String name){
        this.name = name;
   }
   public static girlfriend getInstance(){//只有使用静态对象,才能不创建对象直接调用该方法
          return gf;
   }
}

(2)懒汉式:


public class Stringto{
    public static void main(String[] args){
        Cat c1 = Cat.getInstance();
        Cat c2 = Cat.getInstance();//c1与c2两个对象相同。
    }
}class Cat {
   private String name;
   public static int n1 = 99;
   private static Cat cat;
   private Cat(String name){
         this.name = name; 
   }
   public static Cat getInstance(){  
         if(cat == null){
            cat == new Cat("小可爱");
         }
         return cat;
   }
}
//懒汉式只有当用户使用getInstance时,才返回cat对象。后面再次调用时,会返回上次创建的cat对象。

(3)区别:

  1. 饿汉式在类加载就创建了对象实例,懒汉式是在使用时才创建。
  2. 懒汉式存在线程安全问题,饿汉式存在资源浪费的可能。
  • 30
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值