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

Java中类的初始化过程:(静态成员变量,静态代码块,普通成员变量,代码块初始化顺序)

初始化过程是这样的: 1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 3.其次,...初始化父类的普通成员变量和代码块,在执行父类的构造方法; 4.最后,初始化子类的普通成员变量和代码块,在执行子类的构造方法; 类的加载顺序: 父类静态成员变量、静态块>子类静态成员变量、 静态块>...父类普通成员变量、非静态块>父类构造函数>子类 普通成员变量、非静态块>子类构造函数 静态代码块:随着类的加载而执行,而且只执行一次 非静态代码块:每创建一个对象,就执行一次非静态代码块 关于各个成员简介

50430

Java 类和对象,如何定义Java中的类,如何使用Java中的对象,变量

对象是一个你能够看得到,摸得着的具体实体    如何定义Java中的类:  1.类的重要性:所有Java程序都以类class为组织单元  2.什么是类:类是模子,确定对象将会拥有的特征(属性)和行为(方法...      Telphone phone =new Telphone();  2.使用对象    引用对象的属性:对象名.属性        phone.screen = 5; //给screen属性赋值...5    引用对象的方法:对象.方法       phone.sendMessage() ; //调用对象senMessage()方法  成员变量和局部变量  1.成员变量     在类中定义,用来描述对象将要有什么...  2.局部变量      在类的方法中定义,在方法中临时保存数据  成员变量和局部变量的区别  1.作用域不同:        局部变量的作用域仅限于定义他的方法        成员变量的作用域在整个类内部都是可见的...  2.初始值不相同:          Java会给成员变量一个初始值          Java不会给局部变量赋予初始值,必要初始化  3.在同一个方法中,不允许有同名局部变量;  在不同的方法中,

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

    Java中如何使用引用数据类型中的类呢?

    --------------------------------------- Java中数据类型的分类:   基本数据类型:4类8种。...注意:字符串、Lambda这两种引用数据类型后面会学习到。 --------------------------------------- Java中如何使用引用数据类型中的类呢?...如果希望使用引用类型中的“类”,那么典型用法的一般步骤为: 例如:使用Java中JDK已经写好的扫描器类 Scanner。 步骤1:导包。     指定需要使用的目标在什么位置。...引用数据类型一般需要创建对象才能使用,格式为: 数据类型 变量名称 = new 数据类型(); 例如:       Scanner sc = new Scanner(System.in);...需要使用什么功能,就点儿一个功能名称(方法名),格式为: 变量名称.方法名(); 例如:     a:获取键盘输入的int数字       int num = sc.nextInt()

    3.3K10

    这里有线程池、局部变量、内部类、静态嵌套类和一个莫得名堂的引用,哦,还有一个坑!

    答案我们还是可以从 class 文件中找到: 当我们给 inner 类加上 static 之后,它就不在持有外部内的引用了。 此时我们又可以得到一个结论了: 静态内部类不持有外部类的引用。...比如网上的这个测试案例: Inner 类不是静态内部类,所以它持有外部类的引用。但是,在 Inner 类里面根本就不需要使用到外部类的变量或者方法,比如这里的 data。...非静态的嵌套类被称为内部类(inner classes)。被声明为静态的嵌套类被称为静态嵌套类(static nested classes)。 看到这句话的时候,我一下就反应过来了。...首先,在一个类里面定义另外一个类这种操作,在官方文档这边叫做嵌套类。 没有加 static 的嵌套类被称为内部类,从使用上来说,要实例化内部类,必须首先实例化外部类。...加了 static 的嵌套类被称为静态嵌套类,和 Inner 完全就不沾边。

    55510

    Google C++ 编程风格指南(二):作用域

    最好不要使用 using 指示,以保证名字空间下的所有名称都可以正常使用. // 禁止 —— 污染名字空间 using namespace foo; 在 .cc 文件, .h 文件的函数, 方法或类中,...嵌套类 当公有嵌套类作为接口的一部分时, 虽然可以直接将他们保持在全局作用域中, 但将嵌套类的声明置于 2.1. 名字空间 内是更好的选择....嵌套类可以在外围类中做前置声明, 然后在 .cc 文件中定义, 这样避免在外围类的声明中定义嵌套类, 因为嵌套类的定义通常只与实现相关. 缺点: 嵌套类只能在外围类的内部做前置声明....局部变量 将函数变量尽可能置于最小作用域内, 并在变量声明时进行初始化. C++ 允许在函数的任何位置声明变量. 我们提倡在尽可能小的作用域中声明变量, 离第一次使用越近越好....静态变量的构造函数、析构函数和初始化的顺序在 C++ 中是不确定的,甚至随着构建变化而变化,导致难以发现的 bug.

    79130

    读书笔记 | 类的使用 | Effective Java 3

    如何优化呢? 逻辑拆分,定义抽象基类: 我们可以使用 Java 的类层次结构来解除对标签的依赖。...支持使用静态成员类而不是非静态类 先解释下几种嵌套类的类型 静态成员类 public class Main{ public static class NestClass{} } //在外面使用时候形式如下...非静态类常见使用方法一般是在内部的 Adapter (适配器)类似的功能,以 Set 和 List 为例,内部通过非静态成员来实现它们的迭代器 // Typical use of a nonstatic...在非静态成员类的实例方法中,可以调用宿主实例上的方法,或者使用限定的构造获得对宿主实例的引用。...正如你所预料的那样,该关联在非静态成员类实例中占用了空间,并为其构建添加了时间开销。 那么如何使用更好呢?

    38620

    Oracle Java类和对象

    初始化:新运算符后面是对构造函数的调用,构造函数初始化新对象。 声明变量以引用对象 之前,您了解到要声明变量,您可以编写: type name; 这会通知编译器,您将使用名称引用类型为type的数据。...您可以以相同的方式控制对类和成员的访问:在它们的声明中使用访问修饰符,如public。 通过在成员声明中使用static关键字来指定类变量或类方法。未声明为静态的成员隐式为实例成员。...静态嵌套类 与类方法和变量一样,静态嵌套类与其外部类相关联。与静态类方法一样,静态嵌套类不能直接引用其封闭类中定义的实例变量或方法:它只能通过对象引用来使用它们。内部类和嵌套静态类示例演示了这一点。...匿名类对其成员也有与本地类相同的限制: 不能在匿名类中声明静态初始化器或成员接口。 匿名类可以有静态成员,前提是它们是常量变量。...对构造函数的引用 可以使用名称new以与静态方法相同的方式引用构造函数。

    89200

    不清楚Java内部类的编译原理?读完这篇就够了

    内部类可以分为四种: 成员内部类:和成员变量一个级别 局部内部类:在方法里的内部类(方法域内生效 或者 方法内某一段代码块域内生效) 匿名内部类:基本上属于接口的实现类,一次性使用的场景。...这是如何做到的呢?当某个外围类的对象创建了一个内部类对象时,此内部类对象必定会秘密地捕获一个指向那个外围类对象的引用。然后,在你访问此外围类的成员时,就是用那个引用来选择外围类的成员。...举例子3:静态内部类的创建 /** * * 静态内部类:声明为static的内部类 * 不需要外围类的对象即可以创建嵌套类 * 嵌套类对象不可访问非静态的外围类对象...也就是说,在非静态内部类中不可以声明静态成员,只有将某个内部类修饰为静态类,然后才能够在这 个类中定义静态的成员变量与成员方法。...由于每个类都会产生一个.class文件,其中包含了如何创建该类型的对象的全部信息(此信息产生一个“meta-class”,叫做Class对象),因此,内部类也必须生成一个.class文件以包含它们的Class

    42920

    Java 中文官方教程 2022 版(三)

    您可以通过在声明中使用访问修饰符(如public)来以相同的方式控制对类和成员的访问。 通过在成员声明中使用static关键字来指定类变量或类方法。未声明为static的成员隐式地是实例成员。...new运算符返回一个对创建的对象的引用。您可以将引用分配给变量或直接使用它。 可以通过使用限定名称来引用在声明它们的类之外的代码可访问的实例变量和方法。...静态嵌套类 与类方法和变量一样,静态嵌套类与其外部类相关联。并且像静态类方法一样,静态嵌套类不能直接引用其封闭类中定义的实例变量或方法:它只能通过对象引用使用它们。...内部类和嵌套静态类示例演示了这一点。 注意: 静态嵌套类与其外部类(以及其他类)的实例成员交互方式与任何其他顶层类相同。实际上,静态嵌套类在行为上就像是为了包装方便而嵌套在另一个顶层类中的顶层类。...匿名类在成员方面与局部类具有相同的限制: 您不能在匿名类中声明静态初始化程序或成员接口。 一个匿名类可以有静态成员,只要它们是常量变量。

    34000

    C++ 作用域使用规范建议

    **优点:**命名空间提供了(可嵌套)命名轴线(name axis,注:将命名分割在丌同命名空间内),当然,类也提供了(可嵌套)的命名轴线(注:将命名分割在丌同类的作用域内)。...(3)尽量不要使用全局函数 应该使用命名空间中的非成员函数和类的静态成员函数。这样做的原因是在某些情况下,非成员函数和静态成员函数是非常有用的,将非成员函数置于命名空间中可避免对全尿作用域的污染。...可在被嵌套类中前置声明嵌套类,在.cpp文件中定义嵌套类,避免在被嵌套类中包含嵌套类的定义,因为嵌套类的定义通常只与实现相关。 缺点:只能在被嵌套类的定义中才能前置声明嵌套类。...3.局部变量(Local Variable) (1)将局部变量尽可能置于最小作用域内,在定义时将其显示初始化 C++允许在函数的任何位置声明和定义变量,我们提倡在尽可能小的作用域中定义变量,离第一次使用的位置越近越好...大多数全局变量应该是类的静态数据成员,或者当其只在.cpp文件中使用时,将其定义到不具名名字空间中,或者使用静态关联以限制变量的作用域。

    1.1K20

    Java内部类总结 (吐血之作)

    然而,当内部类是static的时,就不是这样了。嵌套类意味着:   1. 要创建嵌套类的对象,并不需要其外围类的对象。   2. 不能从嵌套类的对象中访问非静态的外围类对象。...通过new 表达式返回的引用被自动向上转型为对Contents的引用。...如果在匿名类中定义成员变量,你同样能够对其执行初始化操作: public class Parcel8 { // Argument must be final to use inside...因为i 被传递给匿名类的基类的构造器,它并不会在匿名类内部被直接使用。下例是带实例初始化的“parcel”形式。注意dest()的参数必须是final,因为它们是在匿名类内被使用的。...问题在于,那个“秘密的”外围类对象的引用必须被初始化,而在被继承的类中并不存在要联接的缺省对象。

    61810

    Google C++编程风格指南(三)之作用域的相关规范

    优点:命名空间提供了(可嵌套)命名轴线(name axis,注:将命名分割在丌同命名空间内),当然,类也提供了(可嵌套)的命名轴线(注:将命名分割在丌同类的作用域内)。...这样做的原因是在某些情况下,非成员函数和静态成员函数是非常有用的,将非成员函数置于命名空间中可避免对全尿作用域的污染。...可在被嵌套类中前置声明嵌套类,在.cpp文件中定义嵌套类,避免在被嵌套类中包含嵌套类的定义,因为嵌套类的定义通常叧不实现相关。 缺点:叧能在被嵌套类的定义中才能前置声明嵌套类。...---- 3.局部变量(Local Variables) (1)将局部变量尽可能置于最小作用域内,在定义时将其显示初始化 C++允许在函数的任何位置声明和定义变量。...大多数全局变量应该是类的静态数据成员,或者当其只在.cpp文件中使用时,将其定义到不具名名字空间中,或者使用静态关联以限制变量的作用域。

    1.2K30

    Java Nested Classes(内部类~第一篇英文技术文档翻译)

    使用嵌套类有以下几个明显的优势: 当仅会在一处用到某个类时,通过嵌套类可以在逻辑上与基类(外部类)保持一种紧密的联系关系:当一个类只会在另一个类中使用,那么就可以把这个类嵌入到另外一个类中,可以使得两者之间有着紧密的联系...静态嵌套类-Static Nested Classes 静态嵌套类不能直接引用外部基类的实例变量和实例方法,对于这样的实例变量仅可以通过对象引用来获取。...通过使用外围基类名称来获取静态嵌套类 OuterClass.StaticNestedClass 如果我们想创建一个静态嵌套类的对象,则可以使用如下的方式 OuterClass.StaticNestedClass...Anonymous Classes 匿名类可以使你的代码看上去更加的精简,可以在声明一个匿名类的同时对它进行初始化,除了没有类名以外,它跟局部类很像,对于只会使用一次的局部类的场景我们可以用匿名类来代替...如果想引用内部类FirstLevel中的x,需要使用this关键字,来代表引用的时内部类中方法外围的x。

    41020

    CCPP中static的用法:全局变量与局部变量

    它也不能在头文件中类声明的外部定义,因为那会造成在多个使用该类的源文件中,对其重复定义。...static被引入以告知编译器,将变量存储在程序的静态存储区而非栈上空间,静态数据成员按定义出现的先后顺序依次初始化,注意静态成员嵌套时,要保证所嵌套的成员已经初始化了。...(3)静态数据成员可以被初始化,但是只能在类体外进行初始化,若未对静态数据成员赋初值,则编译器会自动为其初始化为0 (4)静态数据成员既可以通过对象名引用,也可以通过类名引用。...结论5:类的静态成员变量必须先初始化再使用。 结合上面的五个例子,对类的静态成员变量和成员函数作个总结: 一。静态成员函数中不能调用非静态成员。 二。非静态成员函数中可以调用静态成员。...再给一个利用类的静态成员变量和函数的例子以加深理解,这个例子建立一个学生类,每个学生类的对象将组成一个双向链表,用一个静态成员变量记录这个双向链表的表头,一个静态成员函数输出这个双向链表。

    2.6K20

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

    访问修饰符 访问修饰符 public,private,protected,以及不写(默认)时的区别 定义:Java中,可以使用访问修饰符来保护对类、变量、方法和构造方法的访问。...Java 支持 4 种不同的访问权限。 分类 private : 在同一类内可见。使用对象:变量、方法。...protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。 public : 对所有类可见。...以致于即使没有创建对象,也能使用属性和调用方法! static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。...进入下一个循环条件) return 程序返回,不再执行下面的代码(结束当前的方法 直接返回) 在 Java 中,如何跳出当前的多重嵌套循环 在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号

    32920

    C#学习笔记三: C#类型详解..

    上面说的是怎么区分哪些C#值类型和C#引用类型,而使用上也是有区别的。所有值类型的数据都无法为null的(这里可空类型是可以为空的),声明后必须赋以初值;引用类型才允许 为null。...1.3引用类型中嵌套定义值类型 如果类的字段类型是值类型,它将作为引用类型实例的一部分,被分配到托管堆中。但那些作为局部变量 (例如下列代码中的c变量)的值类型,则仍然会分配到线程堆栈中。...装箱操作可以具体分为以下3个步骤: (1)内存分配: 在托管堆中分配好内存空间以存放复制的实际数据  (2)完成实际数据复制:将值类型实例的实际数据复制到新分配的内存中 (3)地址返回: 将托管堆中的对象地址返回给引用类型变量...2、如果存在多个静态类,那么初始化的静态成员的顺序会根据引用的顺序,先引用到的先进行初始化,但如果类的静态成员的初始化依赖于其他类的静态成员,则会先初始化被依赖的静态成员。   ...3、而带有静态构造函数的类的静态字段,只有在引用到的时候才进行初始化。

    1.3K140

    Java基础知识总结(超详细整理),java从入门到精通pdf「建议收藏」

    static关键字: 静态变量: 使用static修饰的成员变量叫做静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。...静态代码块: 是一个以static为前导的代码块,一般用于为类的工作做一些初始化工作,如初始化一些静态变量。一个类中可以有许多静态初始化块,并且它们可以出现在类体的任何地方。...,final 类中的所有成员方法都会被隐式的指定为 final 方法; 修饰符变量:该变量为常量,,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能让其指向另一个对象...将类中成员变量private,提供public的get和set方法来控制属性的存取动作,以保证对私有属性操作的安全性: 继承 继承extends:多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中...抽象类的使用: 因为抽象类不是一个具体的类,所以无法实例化,但是抽象类可以用于声明变量 抽象类可以被继承,在子类中实现抽象类的所有抽象方法,以达到抽象类的具体化 发布者:全栈程序员栈长,转载请注明出处

    54950

    JVM之栈

    对一个函数而言,它的参数和局部变量越多,使得局部变量表膨胀,它的栈帧就越大,以满足方法调用所需传递的信息增大需求。进而函数调用就会占用更多的栈空间,导致其嵌套调用次数就会减少。...,出了后,此槽位就空出来,被c使用 4.1.3、静态变量与局部变量的对比 参数表分配完毕之后,再根据方法体内定义的变量的顺序和作用域分配 类变量有两次初始化的机会,第一次是在“准备阶段”,执行系统初始化...,对类变量设置零值,另一次则是在“初始化”阶段,赋予程序员在代码中定义的初始值 和类变量初始化不同的是,局部变量表不存在系统初始的过程,这意味着一旦定义了局部变量则必须人为的初始化,否则无法使用。...虚方法表会在类加载的链接阶段被创建并开始初始化,类的变量初始值准备完成之后,JVM会把该类的虚方法表也初始化完毕。...:Double类型 areturn:引用类型 return:返回值类型为void的方法、实例初始化方法、类和接口的初始化方法 异常退出: 在方法执行过程中遇到异常(Exception),并且这个异常没有在方法内进行处理

    9800

    【笔记】《C++Primer》—— 第19章:特殊工具与技术

    ,避免了名称冲突的问题 默认情况下枚举值从0开始,逐个加1,值不一定唯一 枚举成员是const的,因此我们初始化时必须用const,使用的时候也可以当作const使用 枚举类的成员初始化后就必须使用同枚举类的成员才能赋值了...,也很好猜到其意义就是进一步的封装,其概念都比较朴素 嵌套类的特点是其名字在外层类之外就不可见了,需要用作用域符来访问 嵌套类和外层类之间没有权限特权,完全可以当作一个独立的类使用 嵌套类必须在类内声明...,因此我们一般不会定义很大型的局部类 局部类不能使用其所在的函数中的局部变量,只能访问这个函数外层的类型名,静态变量,枚举成员 同样局部类和函数之间没有权限特权,但是局部类一般被声明为public的,因为在这么小的作用域中封装只会显得碍手碍脚...局部类内还可以嵌套类,但是嵌套类可以定义在局部类外部,但是必须定义在与局部类相同的作用域内 局部类内的嵌套类本质也属于一个局部类,所以嵌套类自身的成员必须定义在嵌套类内部 19.8 固有的不可移植的特性...bitCount就是其包含的二进制位数 连续定义的位域会被编译器压缩在一个整数的相邻位中,但是如何压缩是机器相关的 位域通常是使用位运算符来操作的 程序中可能有一些变量并不由程序自身控制,例如与时钟相关的变量

    85340

    CC++结构体完全攻略

    虽然今天结构体较少使用,但知道它们是什么,以及如何使用它们仍然很重要,这并不仅仅是因为可以在较老的程序中遇到它们,还因为在某些情况下,类的实例无法使用,这时必须使用结构体。...初始化列表 初始化结构体变量成员的最简单的方法是使用初始化列表。初始化列表是用于初始化一组内存位置的值列表。列表中的项目用逗号分隔并用大括号括起来。...: cin >> Payroll.empNumber; //错误 结构体嵌套 正如一个类的对象可以嵌套在另一个类中一样,一个结构体的实例也可以嵌套在另一个结构体中。...当某些属性相关并形成对象属性的逻辑子组时,将它们绑定在一起并使用嵌套结构体是有意义的。请注意下面程序内部结构体中属性的相关性,它使用了嵌套结构体。...可以改写程序 1 以允许 getItemData 函数创建 Invltem 结构体的局部实例,将数据值放入其成员变量中,然后将其传递回 main,而不是将其作为引用变量从 main 接收。

    99310
    领券