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

【Java 虚拟机原理】Java 类中的类加载初始化细节 ( 只使用类中的常量时加载类不会执行到 ‘初始化‘ 阶段 )

, 解析 ) -> 初始化 这个完整的流程 ; 如 : 如果是 public final static 修饰的常量值 , 在编译阶段 , 就会将该值放到常量池中 ; 在类加载的过程中 , 只要执行到...加载 -> 连接 ( 验证 , 准备 , 解析 ) 阶段 , 就可以完成常量池的初始化 , 即使没有执行 初始化 这个步骤 , 也不影响使用类中的常量值 ; 在 连接 的 准备 阶段 , 为 普通 的...静态变量 进行 默认赋值 , 但是针对 静态常量 , 直接进行 指定赋值 ; 但是 普通的 静态变量 的 指定赋值 , 是在 初始化 阶段 完成的 ; 类 在 " 初始化 " 阶段 , 调用 静态代码块...静态代码块 没有被执行 , 说明 类加载 的流程中 , " 初始化 " 步骤 , 没有被执行 ; 找到 Student.class 字节码文件 , 然后使用 javap -v -Student.class...[] 数组类型的 类加载初始化 , 但是不会触发 Student 类的初始化操作 ; 如果调用数组中的元素时 , 就需要初始化 Student 类 ; Student 类 : public class

3.6K20

Python 关于面向对象的 6 个问题

5、有以下继承关系: A,B(A),C(A),D(B,C) 那么 D 在初始化的时候,A,B,C 的初始化顺序是怎么样的?A 是否会初始化两次? 以下是我的回答,供参考。 0....什么是类和对象 先说对象,对象通常有两层意思,指行动或思考时作为目标的事物或特指恋爱的对方。在编程的世界里,对象就是客观世界中存在的人、事、物体等实体在计算机逻辑中的映射。...编程时,你可以将对象映射成任何你想映射的东西,只不过,映射的如果更符常规时,代码更容易使用和理解,也更有利于后续的快速迭代和扩展。在 Python 的世界里,万物皆对象。...Python 以以下形式约定保护/私有的属性/方法: __ 表示私有 _ 表示保护 除前两者外就是公有 所谓约定,就是你看到双下划线或单下划线开头的变量或方法时就自觉不要在类的外部修改或访问它,换句话说...有以下继承关系: A,B(A),C(A),D(B,C) 那么 D 在初始化的时候,A,B,C 的初始化顺序是怎么样的?A 是否会初始化两次?

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

    【Python基础编程】掌握类、对象与实例化的核心技巧

    它们在类的构造函数 __init__ 中定义,并且每个对象可以有不同的属性值。 实例方法 是定义在类中的函数,用于操作对象的实例属性或执行与对象相关的操作。...四、类中的self 在 Python 中,self 是一个非常重要的概念,它在类的方法中扮演着关键角色。self 是实例对象的引用,允许实例方法访问和修改实例的属性和其他方法。...在 Python 中,你可以用其他名称代替 self,但使用 self 是 Python 社区的惯例,能够提高代码的可读性和一致性。...self 不是 Python 关键字:self 并不是 Python 的保留字,它只是类方法中的一个普通参数。你可以用其他名称,但通常推荐使用 self。...self 是约定的名称:虽然你可以使用其他名称,但 self 是 Python 社区的约定,能够提高代码的可读性。

    12110

    python面向对象笔记

    __(self, name): # 建议所有私有成员在这里初始化(不管是已定义的,还是"动态"添加的) self.name = name # 动态添加的私有成员...,python里就一个版本,但是通过可变参数来实现(后面还要细讲) 3、动态语言,实例在运行过程中,可随时动态添加属性 另外注意:不要轻易使用__(二个连续的下划线)做为方法或变量的前缀或后缀,"__XXX...__"在python里通常有特定含义,如果使用"__"开头的变量或写法,可能会遇到各种奇葩问题。...的别名,这样调用add(1,2)时,类似于静态方法调用,1会认为是第一个参数self,所以输出就成了2....3.3 接口、abc模块、属性 3.1中抽象类/方法是通过抛出异常来实现的,有点粗暴,下面介绍一种更优雅的方法,python内置的abc模块 from abc import * # 接口示例 class

    75830

    玩转Python属性和方法,成为高手不再难!

    在Python中,有两种类型的属性:实例属性和类属性。1.1 实例属性实例属性属于类的实例,每个实例都有自己的副本。可以在类的init方法中进行初始化。...方法是类中定义的函数,用于执行特定的操作。在Python中,有三种类型的方法:实例方法、类方法和静态方法。...在使用装饰器时,要根据具体的需求选择合适的装饰器类型,以提高代码的可读性和可维护性。4. 属性和方法的继承在Python中,子类可以继承父类的属性和方法。...它们是Python中用于实现类的特殊行为的方法。5.1 init方法init方法是构造函数,在创建对象时自动调用,用于对对象进行初始化。(以下示例在实例方法部分已经有过示例,这里不再重复。)...希望通过本文的讲解,你对Python的面向对象编程有了更深刻的理解,并能在实际开发中灵活应用这些知识。

    34420

    Python 中5种下划线的含义都是什么?

    今天给大家科普一波,单下划线和双下划线在Python变量和方法名称的含义。有一些含义仅仅是依照约定,被视作提示,而有一些含义是由Python解释器严格执行的。...你们是否想知道Python变量和方法名称中各种单下划线和双下划线的含义是什么?...一 单前导下划线:_var 1 说明 当涉及到变量和方法名称时,单个下划线前缀有一个约定俗成的含义。 下划线前缀的含义是:以单个下划线开头的变量或方法仅供内部使用。 该约定在PEP8中有定义。...这不是Python强制规定的,Python不像Java那样在“私有”和“公共”变量之间有很强的区别。 这就像有人提出了一个小小的下划线警告标志,说: “嘿,这不是真的要成为类的公共接口的一部分。..._bar的行为方式相同 - 它以_bar的形式显示在类上。 就像我之前说过的,在这种情况下,前导下划线仅仅是一个约定。 给程序员一个提示而已。 然而,对于self.

    1.3K40

    Python类对象

    python类对象 python类对象支持两种操作:属性引用和实例化。 属性引用 使用 Python 中所有属性引用所使用的标准语法: obj.name。...因此在这个示例中,可以通过以下语句获得一个经初始化的新实例: x = MyClass() 当然,__init__() 方法还可以有额外参数以实现更高灵活性。...然而,在以下讨论中,我们使用方法一词将专指类实例对象的方法,除非另外显式地说明。) 实例对象的有效方法名称依赖于其所属的类。 根据定义,一个类中所有是函数对象的属性都是定义了其实例的相应方法。...数据属性可以被方法以及一个对象的普通用户(“客户端”)所引用。 换句话说,类不能用于实现纯抽象数据类型。 实际上,在 Python教程 中没有任何东西能强制隐藏数据 --- 它是完全基于约定的。...这也不过就是一个约定: self 这一名称在 Python 中绝对没有特殊含义。

    75830

    Python中下划线的5种含义

    单下划线和双下划线在Python变量和方法名称中都各有其含义。有一些含义仅仅是依照约定,被视作是对程序员的提示 - 而有一些含义是由Python解释器严格执行的。...单前导下划线 _var 当涉及到变量和方法名称时,单个下划线前缀有一个约定俗成的含义。 它是对程序员的一个提示 - 意味着Python社区一致认为它应该是什么意思,但程序的行为不受影响。...下划线前缀的含义是告知其他程序员:以单个下划线开头的变量或方法仅供内部使用。 该约定在PEP 8中有定义。 这不是Python强制规定的。..._bar 23 你会看到_bar中的单个下划线并没有阻止我们“进入”类并访问该变量的值。 这是因为Python中的单个下划线前缀仅仅是一个约定 - 至少相对于变量和方法名而言。...它适用于在类上下文中使用的两个下划线字符开头的任何名称。 有很多要吸收的内容吧。 老实说,这些例子和解释不是从我脑子里蹦出来的。我作了一些研究和加工才弄出来。

    1.6K70

    软件测试|什么是Python构造方法,构造方法如何使用?

    图片构造方法(Constructor)是面向对象编程中的重要概念,它在创建对象时用于初始化对象的实例变量。在Python中,构造方法是通过特殊的名称__init__()来定义的。...本文将介绍Python构造方法的基本概念、语法和用法。什么是构造方法?在面向对象编程中,构造方法是一个特殊的方法,用于在创建对象时初始化对象的状态。它在对象创建的过程中自动调用,负责为对象设置初始值。...构造方法的名称在大多数编程语言中是固定的,例如在Python中,构造方法的名称是__init__()。这个名称是Python的约定,用于表示构造方法的特殊性质。...总结构造方法是面向对象编程中的重要概念,它在创建对象时用于初始化对象的状态。Python中的构造方法是通过特殊名称__init__()来定义的,它接受self参数和其他需要的参数。...构造方法的代码块用于执行初始化操作,例如为实例变量赋值或执行其他必要的操作。通过使用构造方法,我们可以方便地在创建对象时进行初始化,并确保对象的状态正确设置。

    18810

    软件测试|什么是Python构造方法,构造方法如何使用?

    构造方法(Constructor)是面向对象编程中的重要概念,它在创建对象时用于初始化对象的实例变量。在Python中,构造方法是通过特殊的名称__init__()来定义的。...本文将介绍Python构造方法的基本概念、语法和用法。 什么是构造方法? 在面向对象编程中,构造方法是一个特殊的方法,用于在创建对象时初始化对象的状态。...构造方法的名称在大多数编程语言中是固定的,例如在Python中,构造方法的名称是__init__()。这个名称是Python的约定,用于表示构造方法的特殊性质。...总结 构造方法是面向对象编程中的重要概念,它在创建对象时用于初始化对象的状态。Python中的构造方法是通过特殊名称__init__()来定义的,它接受self参数和其他需要的参数。...构造方法的代码块用于执行初始化操作,例如为实例变量赋值或执行其他必要的操作。 通过使用构造方法,我们可以方便地在创建对象时进行初始化,并确保对象的状态正确设置。

    27330

    关于Python的前后、单双下划线作用,看完这篇文章,吊打面试官!

    重磅干货,第一时间送达 ? 来源:清风python python的各种下划线 在Python中,可能最常见的就是各种常量、变量、函数、方法前后添加的那些下划线了。...单前导下划线 单前导下划线(_xxx),作为Python的命名约定,表示仅供内部使用。但注意这个命名约定,在类中你使用单前导线声明的变量,**依然可以在外部直接访问。**那这种命名约定还有什么意义呢?...虽然使用起来矛盾,但是面试阴人必备有木有? 单末尾下划线 单末尾下划线(xxx_),按照PEP8规定,单末尾下划线也是一个约定 用来避免与python关键字产生命名冲突。...例如:我们使用Beautifulsoup进行网页解析,通过类方法定位时,会找某个标签它的存在class=‘xxx’的情况,此时css的class与Python中的类重名,需要在class后添加单下划线进行区分...双前导和双末尾下划线 日常开发中,最好避免在自己的程序中使用以双下划线(“dunders”)开头和结尾的名称,因为它是Python语言定义的一种特殊方法(魔法方法),我们熟知的__init__ 、__dict

    3.4K10

    Python中 5 种不同的下划线含义你都知道吗?

    前言 本文将介绍Python中单下划线和双下划线("dunder")的各种含义和命名约定,名称修饰(name mangling)的工作原理,以及它如何影响你自己的Python类。...单下划线和双下划线 在Python变量和方法名称中都各有其含义。有一些含义仅仅是依照约定,被视作是对程序员的提示 - 而有一些含义是由Python解释器严格执行的。...单前导下划线 _var 当涉及到变量和方法名称时,单个下划线前缀有一个约定俗成的含义。它是对程序员的一个提示:意味着Python社区一致认为它应该是什么意思,但程序的行为不受影响。...下划线前缀的含义是告知其他程序员:以单个下划线开头的变量或方法仅供内部使用。该约定在PEP 8中有定义。 这不是Python强制规定的。...它适用于在类上下文中使用的两个下划线字符开头的任何名称。 有很多要吸收的内容吧。 老实说,这些例子和解释不是从我脑子里蹦出来的。我作了一些研究和加工才弄出来。

    89131

    掌握 Python 中下划线的 5 个潜规则

    前言 本文将介绍Python中单下划线和双下划线("dunder")的各种含义和命名约定,名称修饰(name mangling)的工作原理,以及它如何影响你自己的Python类。...单下划线和双下划线 在Python变量和方法名称中都各有其含义。有一些含义仅仅是依照约定,被视作是对程序员的提示 - 而有一些含义是由Python解释器严格执行的。...单前导下划线 _var 当涉及到变量和方法名称时,单个下划线前缀有一个约定俗成的含义。它是对程序员的一个提示:意味着Python社区一致认为它应该是什么意思,但程序的行为不受影响。...下划线前缀的含义是告知其他程序员:以单个下划线开头的变量或方法仅供内部使用。该约定在PEP 8中有定义。 这不是Python强制规定的。...它适用于在类上下文中使用的两个下划线字符开头的任何名称。 有很多要吸收的内容吧。 老实说,这些例子和解释不是从我脑子里蹦出来的。我作了一些研究和加工才弄出来。

    53920

    如何理解“面向对象”编程思想

    在 Python 中“类”和“类的实例”都称为 对象 ( Object ),因为 Python 的类是更顶级的 type 实例化后的对象,也就是常说的“Python 里万物皆对象”;而在 Java 等静态语言中...下边我们把“女娲造人”这个神话故事,用 Python 的面向对象代码来叙述一遍: 假设我们是女娲(程序设计者),我们突然有个想法,想造一群和自己差不多的小人,小人需要有男女两种性别,外观和行为也有一些差异...还有一点,上面定义属性时,我们把 self...._name 前边加了下划线,是因为 Python 里用下划线来约定这是一个受保护变量(对应 Java 中的 protected ),我们不希望外界能直接访问 name 这个属性,必须要通过对象调用 introduce_self...import random class Female(Human):     def __init__(self, name):         # 调用父类的初始化方法,依然有名字、两只手、两条腿

    93420

    初学Python语言者必须理解的下划线

    下划线(_)在Python语言中有特殊作用。 在大多数编程语言中,下划线是命名变量或者函数名称时的连字符,但是,在Python语言中,不仅如此。...用在交互模式中 在Python交互模式总,如果调用_,会显示最近的表达式的值。这个功能在标准的交互模式中都有,你也可以在其它Python交互式解析器中使用。...,PEP8是Python开发的公约,它约定了4中命名方式。...当程序运行的时候,Python解析器会对以双下划开始的类中的属性、方法名称重命名,从而避免不同的类中同样名称之间的冲突,基本规则是在双下划线开始的名称前面增加形如“_ClassName”样式的前缀。..._namne这种方式私有化,是约定的私有化,不是真正的私有化;__name这种方式真正实现了“私有化”,但在编程中是否采用,有不同的观点。或者说对于“私有化”,在Python中是有不同理解的。

    71720

    Python面向对象编程(OOP) 快速入门

    继承实现了代码重用,并且是多态的基础; 多态提高了代码的灵活性、扩展性; 封装隐藏内部细节,更好地保护数据。抽象是OOP的基础,有好的抽象能力才能设计出好的基类,好的函数层级...... 1....但是后面进行操作的时候,就会比较混乱。 因此,我们用类实现“软件工程师”:在__init__中初始化他的信息(属性)。...print(se1) __eq__(self, other) :比较两个对象相等时自动调用,该函数应该返回一个布尔类型值 类中的静态方法 使用@staticmethod修饰。...重写(override) 和父类方法 同名时会覆盖掉父类方法, 注意:初始化方法__init__重写时必须调用父类的初始化方法super().__init__。...__xx以双下划线开头的变量会被重命名为_ClassName__xx,避免意外访问。 虽然有这些约定,但是实际上Python没有实现真正的私有变量。外部还是可以访问所有变量。 5.

    51820

    Python+Selenium笔记(三):使用unittest

    Assert:用来校验实际结果与预期结果是否一致。 (四)   TestCase类 通过继承TestCase类并且在测试类中为每一个测试添加测试方法来创建单个测试或者一组测试。...(五)   使用unittest (1)       定义一个继承于TestCase 类的子类。 (2)       在类中定义setUp()方法。...(3)       编写测试方法 (4)       代码清理(在类中定义tearDown()方法) (5)       运行测试 说明: 1、  一个测试用例是从setUp()方法开始执行的,我们可以用这个方法在每个测试开始前去执行一些初始化的任务...一旦测试被执行,在setUp()方法中定义的值将不再需要,所以最好的做法是在测试执行完成的时候清理掉由setUp()方法初始化的数值。...3个字符(0),并添加到列表small_cate中 small_cate.append(str(s.text)[:-3]) #检查表达式是否为true(此处检查编程语言下的小类是否与预期结果一致)

    88340

    怎么理解面向对象?

    在 Python 中“类”和“类的实例”都称为 对象 ( Object ),因为 Python 的类是更顶级的 type 实例化后的对象,也就是常说的“Python 里万物皆对象”;而在 Java 等静态语言中...下边我们把“女娲造人”这个神话故事,用 Python 的面向对象代码来叙述一遍: 假设我们是女娲(程序设计者),我们突然有个想法,想造一群和自己差不多的小人,小人需要有男女两种性别,外观和行为也有一些差异...还有一点,上面定义属性时,我们把 self...._name 前边加了下划线,是因为 Python 里用下划线来约定这是一个受保护变量(对应 Java 中的 protected ),我们不希望外界能直接访问 name 这个属性,必须要通过对象调用 introduce_self...import random class Female(Human): def __init__(self, name): # 调用父类的初始化方法,依然有名字、两只手、两条腿

    47130

    Python入门之@classmethod与@staticmethod

    @staticmethod ========================================   Python面向对象编程中,类中定义的方法可以是 @classmethod 装饰的 类方法...,对于未绑定方法,调用 A.m1 时必须显示地传入一个实例对象进去,而 a.m1是已经绑定了实例的方法,python隐式地把对象传递给了self参数,所以不再手动传递参数,这是调用实例方法的过程。...A.m1(a, 1) == a.m1(1) #上面的等式左右两边的意义是相同的 如果未绑定的方法 A.m1 不传实例对象给 self 时,就会报参数缺失错误,在 py3 与 py2 中,两者报的错误不一致...,python2 要求第一个参数self是实例对象,而python3中可以是任意对象。...A.m2(1) == a.m2(1) # 上面的等式左右两边的意义是相同的 这使得我们可以在实例方法中通过使用 self.m2()这种方式来调用类方法和静态方法。

    1.6K60
    领券