首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java下static关键字用法详解

语句块   2. 成员变量(但是不能修饰局部变量)   3. 方法   4. 接口(内部接口)   5....类(只能修饰在类中的类, 即静态内部类)   6. jdk 1.5 中新增的静态导入   那么static 修饰的表示什么呢?...那么在引用static变量的时候,使用(类名.变量名)是首选的方式,因为他不仅强调它是static结构,而且在某些情况下会为编译器进行优化提供更好的机会。   ...;   }   }   Member未实例化: Member实例化之后: ?   ...在static方法的内部不能调用非静态方法,反过来倒是可以的。而且可以在没有创建任何对象的前提 下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。它很像全局方法。

65830

深度解析Java中的5个“黑魔法”

在绝大多数情况下,注释将被用于描述语言结构,例如类,字段,方法等,但是在另一种情况下,可以将注释作为可实现的接口。 在常规的使用方法中,注释就是注释,接口就是接口。...例如,通过静态工厂模式来实例化对象,其实是将类本身的构造方法声明为private,这样就不能直接通过类的构造方法实例化对象了,而必须通过类本身的方法来调用这个被声明为private的构造方法来实例化对象...例如,我们在Person类的构造方法中通过参数name初始化了name成员变量。尽管似乎可以合理地假设所有初始化逻辑都在类的一个或多个构造方法中找到。但对于Java,情况并非如此。...实例化对象时,首先会调用类的初始化器,然后调用类的构造方法。要注意的是,可以在类中指定多个初始化器,在这种情况下,每个初始化器将按着定义的顺序调用。...总结 在本文中,我们研究了Java中的五个隐藏秘密: (1)可扩展的注释; (2)实例初始化可用于在实例化时配置对象; (3)用于初始化的双花括号; (4)可执行的注释; (5)枚举可以实现接口; 尽管其中一些功能有其适当的用途

67710
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    孔乙己的疑问:单例模式有几种写法

    将构造函数私有化。 在类中创建一个本类对象。 提供一个方法可以获取到该对象。 单例模式的十二种写法 一、饿汉式(静态变量) ? 二、饿汉式(静态常量) ? 三、饿汉式(静态代码块) ?...当单例对象有必要实现 Serializable 接口时,即使将其构造函数设为私有,在它反序列化时依然会通过特殊的途径再创建类的一个新的实例,相当于调用了该类的构造函数有效地获得了一个新实例!...因此当我们的单例对象实现了 Cloneable 接口时,尽管其构造函数是私有的,仍可以通过克隆来创建一个新对象,单例模式也相应失效了。 优点:写法比较简单,在类装载的时候就完成实例化。...不同的地方在饿汉式方式是只要Singleton类被装载就会实例化,没有Lazy-Loading的作用,而静态内部类方式在Singleton类被装载时并不会立即实例化,而是在需要实例化时,调用getInstance...Enum是没有clone()方法的 枚举类类型是 final 的「不可以被继承」 构造方法是私有的「也只能私有,不允许被外部实例化,符合单例」 类变量是静态的 没有延时初始化,随着类的初始化就初始化了「

    67630

    Java面试基本问题

    请参考下图,该图显示了不同的原始类型,包装器类和构造函数参数。 Q6。Java中的构造函数是什么? 在Java中,构造函数是指用于初始化对象的代码块。它必须与该类具有相同的名称。...换句话说,采用参数的构造函数称为参数化构造函数。 Q7。Java中的单例类是什么?如何使单例类成为单例? Singleton类是在一个给定的时间在一个JVM中只能创建一个实例的类。...它是一个程序,有助于将Java字节码转换为直接发送到处理器的指令。默认情况下,JIT编译器在Java中启用,并且在调用Java方法时被激活。...在Java中, 局部变量通常在方法,构造函数或块内使用 ,并且仅具有局部作用域。因此,该变量只能在块的范围内使用。拥有局部变量的最大好处是该类中的其他方法甚至都不知道该变量。...3.用于访问基类的方法 4.用于指向当前的类实例 4.用于指向超类实例 5.必须是块的第一行 5.必须是块的第一行 Q25。

    1.1K50

    【1】进大厂必须掌握的面试题-Java面试-基础

    请参考下图,该图显示了不同的原始类型,包装器类和构造函数参数。 Q6。Java中的构造函数是什么? 在Java中,构造函数是指用于初始化对象的代码块。它必须与该类具有相同的名称。...换句话说,采用参数的构造函数称为参数化构造函数。 Q7。Java中的单例类是什么?如何使单例类成为单例? Singleton类是在一个给定的时间在一个JVM中只能创建一个实例的类。...它是一个程序,有助于将Java字节码转换为直接发送到处理器的指令。默认情况下,JIT编译器在Java中启用,并且在调用Java方法时被激活。...在Java中, 局部变量通常在方法,构造函数或块内使用 ,并且仅具有局部作用域。因此,该变量只能在块的范围内使用。拥有局部变量的最大好处是该类中的其他方法甚至都不知道该变量。...3.用于访问基类的方法 4.用于指向当前的类实例 4.用于指向超类实例 5.必须是块的第一行 5.必须是块的第一行 Q25。

    1.7K00

    Java面试基本问题

    请参考下图,该图显示了不同的原始类型,包装器类和构造函数参数。 Q6。Java中的构造函数是什么? 在Java中,构造函数是指用于初始化对象的代码块。它必须与该类具有相同的名称。...换句话说,采用参数的构造函数称为参数化构造函数。 Q7。Java中的单例类是什么?如何使单例类成为单例? Singleton类是在一个给定的时间在一个JVM中只能创建一个实例的类。...它是一个程序,有助于将Java字节码转换为直接发送到处理器的指令。默认情况下,JIT编译器在Java中启用,并且在调用Java方法时被激活。...在Java中, 局部变量通常在方法,构造函数或块内使用 ,并且仅具有局部作用域。因此,该变量只能在块的范围内使用。拥有局部变量的最大好处是该类中的其他方法甚至都不知道该变量。...3.用于访问基类的方法 4.用于指向当前的类实例 4.用于指向超类实例 5.必须是块的第一行 5.必须是块的第一行 Q25。

    1.1K20

    编程思想 之「初始化与清理」

    构造方法 构造方法是一种特殊的方法,它是一个与类同名且没有返回值类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。...构造方法和其他方法一样也可以重载。在 Java 中,任何变量在被使用前都必须先设置初值,构造方法就是专门为类的成员变量赋初值的方法。...构造方法的特殊性主要反映在如下几个方面: 构造方法的作用主要有两个,分别为构造出来一个类的实例和对构造出来的类的实例(对象)进行初始化; 构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void...也没有; 主要完成对象的初始化工作,构造方法的调用是在创建一个对象时使用new操作完成的; 类中必定有构造方法,若不写,系统自动添加无参构造方法; 接口不允许被实例化,因此接口中没有构造方法; 不能被static...显式的静态初始化和非静态的实例初始化类似,都在构造器之前执行初始化动作,两者的区别在于:静态初始化有static关键字修饰且只能被初始化一次;而非静态的实例初始化则可以被初始化多次。

    40020

    JAVA面试备战(十七)--设计模式

    (new Callable())) 创建线程的第三种方式 使用furturetask来适配callable接口 工厂模式和简单工厂模式的区别 1、简单工厂模式中包含判断什么对象的逻辑,而工厂方法模式则需要调用者判断要实例化什么具体类型的工厂进而创建出想要的对象...总结: 在继承类是,务必重写(override)父类中所有的方法,尤其需要注意父类的protected方法(它们往往是让你重写的),子类尽量不要暴露自己的public方法供外界调用。...因为在任何时候只能有一个线程调用 getInstance() 方法。但是同步操作只需要在第一次调用时才被需要,即第一次创建单例实例对象时。这就引出了双重检验锁。...饿汉式单例+ 静态final变量 线程安全 这种方法非常简单,因为单例的实例被声明成 static 和 final 变量了,在第一次加载类到内存中时就会初始化,所以创建实例本身是线程安全的。...尽管您在代码中尽力防止它发生,但其他类加载器也应该能够创建它的另一个实例(前提是这些类加载器不在同一类加载器层次结构中)。

    38820

    JDK内置锁深入探究

    void innerMethod(){ // 处理业务 } 当只在调用入口方法上添加 synchronized 锁,内部调用链所涉及的方法都不添加锁,在线程竞争条件下也是线程安全的。...原因如下:方法调用是以方法栈的形式调用的,在入口方法加锁相当于内部调用链的方法都锁的约束之下,因此是线程安全的。...代码块或者轻量级方法,线程竞争不激烈的场景下,适合自旋锁。 (2)优缺点 自旋锁尽可能的减少线程的阻塞,对于锁的竞争不激烈且占用锁时间非常短的代码块来说性能提升明显。...三、关键字锁 synchronized关键字属于内置锁,可作用于对象和方法。添加到方法上的锁,锁到在哪里? 对于实例方法,锁添加到持有方法的实例上;对于类方法,锁添加到类对象(Class 对象)上。...竞争线程不是随机获取锁,尽管从线程的角度看像是一种“随机”行为,因此它是一把非公平锁。 (2)竞争线程可预测获取锁? (重量级锁)在竞争锁条件下必然存在操作系统级别的(线程阻塞与唤醒)系统调度行为。

    52960

    Java基础:Java类与对象

    static关键字的另一个比较关键的作用就是用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。...在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。 static 注意事项: 静态内容是优先于对象存在的,只能访问静态 。...三、构造器 构造器也被称为构造方法,是一种特殊的方法,调用构造方法可以创建新对象。构造方法可以执行任何操作,实际应用中,构造方法一般用于初始化操作,例如初始化对象的数据域。...因为它是为构建对象的,对象创建完,方法就执行结束; 构造方法名必须和类名保持一致; 只有在创建对象的时候自动调用执行,而且只执行一次 2、 构造方法的重载 一个类中可以有多个构造方法,多个构造方法是以重载的形式存在的...父类的构造方法会先执行,因为子类中所有构造方法的第一行有默认的隐式super(); 语句,它是用来访问父类中的空参数构造方法,进行父类成员的初始化操作 this()是调用本类的构造方法,super()

    45740

    自己平时用到的设计模式总结

    单例模式有以下特点: 1、单例类只能有一个实例 2、单例类必须自己创建自己的唯一实例 3、单例类必须给其他所有对象提供这一实例 下面看一下单例模式的三种写法,除了这三种写法,静态内部类的方式、静态代码块的方式...首先声明就是 在我们项目工程中 我们完全不用使用懒汉式 因为有锁使用的地方就有效率低的存在;  饿汉式 顾名思义,饿汉式,就是使用类的时候不管用的是不是类中的单例部分,都直接创建出单例类,看一下饿汉式的写法...可能有人会觉得奇怪:第3行,CPU执行线程A,实例化一个EagerSingleton,没有实例化完,CPU就从线程A切换到线程B了,线程B此时也实例化这个EagerSingleton,然后EagerSingleton...线程A初次调用DoubleCheckLockSingleton.getInstance()方法,走12行,判断instance为null,进入同步代码块,此时线程切换到线程B,线程B调用DoubleCheckLockSingleton.getInstance...单例模式在Java中的应用及解读 Runtime是一个典型的例子,看下JDK API对于这个类的解释"每个Java应用程序都有一个Runtime类实例,使应用程序能够与其运行的环境相连接,可以通过getRuntime

    67640

    一行代码快速解耦Application逻辑,让Application更简洁好维护

    注意事项: 1.目前只适用于普通开发,组件化插件化没做兼容处理。 2.线程切换也没做考虑,因为一般的第三方库的使用基本都是在主线程,所以没做线程切换,后续有时间会慢慢完善的。...调用方式 2.下面看一下ApplicationHelper这个类做了什么事情: 这是一个单例的类,调用init方法传入上下文,然后调用init开头的方法,比如initNetWork()就表示初始化网络操作的一些逻辑...ApplicationHelper这个类简单介绍 3.ApplicationHelper实现了IInitMethods接口,这个接口主要用来规范有哪些逻辑要处理,它是初始化的所有方法的顶层接口,用于规范有哪些逻辑需要做...IInitMethods接口 4.ApplicationHelper类调用了InitWrapperImpl这个类,通过InitWrapperImpl.getInstance()返回一个实例对象,然后调用了...常量类Contants ---- 6.InitWrapperImpl这个类它是实现了IInitWrapper接口,规范了具体的执行过程公用的一些接口方法。 ?

    32830

    Java(6)-java线程

    java.lang.Thread 类是一个通用的线程类,由于默认情况下 run 方法是空的,直接通过 Thread类实例化的线程对象不能完成任何事,所以可以通过派生 Thread 类,并用具体程序代码覆盖...该方法只能在同步方法中调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonitorStateException异常。...对于下面形式的同步块而言,调用 ClassName 对象实例的并行线程中只有一个线程能够访问该对象。...Thread.sleep()使当前线程在指定的时间处于“非运行”(Not Runnable)状态。线程一直持有对象的监视器。比如一个线程当前在一个同步块或同步方法中,其它线程不能进入该块或方法中。...5、 在一个对象上两个线程可以调用两个不同的同步实例方法吗? 不能,因为一个对象已经同步了实例方法,线程获取了对象的对象锁。所以只有执行完该方法释放对象锁后才能执行其它同步方法。

    3K21

    Java知识面试题复习(二)Java基础语法

    区别是,super()在子类中调用父类的构造方法,this()在本类内调用本类的其它构造方法。...super()和this()均需放在构造方法内第一行。 尽管可以用this调用一个构造器,但却不能调用两个。...以致于即使没有创建对象,也能使用属性和调用方法! static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。...怎么理解 “被类的实例对象所共享” 这句话呢?就是说,一个类的静态成员,它是属于大伙的【大伙指的是这个类的多个对象实例,我们都知道一个类可以创建多个实例!】...因此比较常见的static应用场景有: 1、修饰成员变量 2、修饰成员方法 3、静态代码块 4、修饰类【只能修饰内部类也就是静态内部类】 5、静态导包 static注意事项 1、静态只能访问静态

    32920

    Java基础知识点面试手册

    抽象类 抽象类和普通类最大的区别是: 抽象类不能被实例化,需要继承抽象类才能实例化其子类。...静态语句块 静态语句块在类初始化时运行一次。...初始化顺序 存在继承的情况下,初始化顺序为: 父类(静态变量、静态语句块) 子类(静态变量、静态语句块) 父类(实例变量、普通语句块) 父类(构造函数) 子类(实例变量、普通语句块) 子类(构造函数)...清单 1 中,虽然两个类的功能代码完全一致,但是序列化 ID 不同,他们无法相互序列化和反序列化。 在JAVA中,如何跳出当前的多重嵌套循环?...尽管默认方法有这么多好处,但在实际开发中应该谨慎使用:在复杂的继承体系中,默认方法可能引起歧义和编译错误。如果你想了解更多细节,可以参考官方文档。

    79430

    Java的面向对象

    局部变量与成员变量的区别: 局部变量在方法中、在代码块中,访问局部变量时只能在就近{   }可以访问,局部变量(没有默认值)必须给初始化值;成员变量在类中、方法外,成员变量在类中任何位置都可以访问,成员变量有...属性分为:静态属性(类变量)和非静态属性(实例变量)。 static修饰方法时只能访问被修饰的属性(在静态的方法中不能访问非静态的属性)。 在静态的方法中不能访问非静态的方法。...default关键字 在接口中被default修饰的方法叫默认方法,用于接口中。...优先执行静态块,在以后实战中一般把工厂、数据库的初始化信息。 顺序:静态块(常用)→构造块(不常用)→构造器→方法中的普通块。...重写父类方法: 名字一样只要更改方法体。 继承只能继承父类的属性不能继承父类属性里的具体实例。

    67550

    关于JAVA你必须知道的那些事(二):封装

    而实例化对象则是在堆空间开辟一块空间,它完成了具体对象相关信息的初始化操作。最后通过赋值进行两者绑定。 也就是声明对象和实例化对象是在内存中的不同空间完成的,通过赋值操作,将两者关联。...构造方法的调用必须配合new关键字,不能被对象单独调用。注意,构造方法必须与类同名且没有返回值。 方法名中的参数列表可有可无,但是只能在对象实例化的时候被调用。...静态方法只能直接调用同一个类中的静态成员。如果非要访问,只能通过实例化一个对象后,采用对象.成员方法的方式来访问非静态成员。...记住构造代码块比构造函数优先执行。构造代码块它是在创建对象的时候被调用,优先于构造方法的执行。所以不管构造代码块放在类的其他位置,它都会先于构造函数执行。...(这里的初始化块包括构造初始化块(直接在类中声明)和普通的初始化块(在方法中声明)。

    50810

    欢迎来到我的Java世界“抽象类”

    抽象方法用abstract关键字声明,并且没有方法体(即没有大括号{}包围的代码)。 ②构造方法:抽象类可以有构造方法,但主要用途是供子类在构造实例时调用父类的构造方法,进行初始化操作。...抽象类不能被实例化,因此不能直接调用其构造方法。 ③继承:抽象类的主要用途是被其他类继承。继承抽象类的子类必须实现所有继承的抽象方法,除非子类也是抽象类。...这些构造方法主要用于被子类在创建实例时调用,以便进行初始化操作。 5. 可以有非抽象方法和字段:抽象类不仅限于包含抽象方法,它还可以包含已经实现的方法(即非抽象方法)和字段。...这些方法和字段可以被子类继承和使用。 6. 可以作为类型引用:尽管你不能直接实例化抽象类,但你可以使用抽象类作为类型引用,比如声明类的成员变量、方法的返回类型、方法的参数等。 7....抽象类与接口的区别:虽然抽象类和接口都用于定义类的规范,但它们在实现和使用上有所不同。接口是纯粹的抽象,只能包含抽象方法和常量,而抽象类可以包含已实现的方法和变量。

    10610

    Java设计模式(一)----单例模式

    二.分类 (一)、懒汉式单例 //懒汉式单例类.在第一次调用的时候实例化自己 public class Singleton { // 构造方法私有化 private Singleton...private避免了类在外部被实例化,在同一个虚拟机范围内,Singleton的唯一实例只能通过getInstance()方法访问。...2、资源加载和性能: 饿汉式在类创建的同时就实例化一个静态对象出来,不管之后会不会使用这个单例,都会占据一定的内存,但是相应的,在第一次调用时速度也会更快,因为其资源已经初始化完成, 而懒汉式顾名思义...至于1、2、3这三种实现又有些区别, 第1种,在方法调用上加了同步,虽然线程安全了,但是每次都要同步,会影响性能,毕竟99%的情况下是不需要同步的, 第2种,在getInstance中做了两次null...或者说:一个类或者程序所提供的接口对于线程来说是原子操作,或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题,那就是线程安全的。

    71490

    java设计模式系列:单例模式

    二.分类 (一)、懒汉式单例 //懒汉式单例类.在第一次调用的时候实例化自己 public class Singleton { // 构造方法私有化 private Singleton...private避免了类在外部被实例化,在同一个虚拟机范围内,Singleton的唯一实例只能通过getInstance()方法访问。...2、资源加载和性能: 饿汉式在类创建的同时就实例化一个静态对象出来,不管之后会不会使用这个单例,都会占据一定的内存,但是相应的,在第一次调用时速度也会更快,因为其资源已经初始化完成, 而懒汉式顾名思义,...至于1、2、3这三种实现又有些区别, 第1种,在方法调用上加了同步,虽然线程安全了,但是每次都要同步,会影响性能,毕竟99%的情况下是不需要同步的, 第2种,在getInstance中做了两次null检查...或者说:一个类或者程序所提供的接口对于线程来说是原子操作,或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题,那就是线程安全的。

    28530
    领券