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

java 枚举(enum) 全面解读

简介 枚举是Java1.5引入的新特性,通过关键字enum来定义枚举类。枚举类是一种特殊类,它和普通类一样可以使用构造器、定义成员变量和方法,也能实现一个或多个接口,但枚举类不能继承其他类....生成的枚举类有 Color $VALUES[];成员变量,外部可以通过values()方法获取当前枚举类的所有实例对象....Class对象 每一个枚举类型极其定义的枚举变量在JVM中都是唯一的 这句话的意思是枚举类型它拥有的实例在编写的时候,就已经确定下,不能通过其他手段进行创建,且枚举变量在jvm有且只有一个对应的实例....反射创建单例对象 解决方案 : 在构造上述中判断,当多于一个实例时,再调用构造函数,直接报错. 反序列化时创建对象 解决方案 : 使用readResolve()方法来避免此事发生....从反编译的Color类中可以发现, 枚举为每一个对象创建一个枚举对象,枚举对象里面至少有 一个String类型(name),和一个int类型(ordinal)再加上对象头部占用的内存.

96610

C++STL中vector使用策略(一)

vector是STL中一种可变大小数组的序列容器。...就像数组一样,vector也采用连续存储空间来存储元素,也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效,但是又不像数组,它的大小是动态改变的。       ...为了可以使用vector,必须在你的头文件中包含下面的代码 #include  创建一个vector // 创建一个type类型的空vector对象a  vector a;...);  //创建一个a的拷贝b  vector b(a); 向vector添加一个数据 /*vector添加数据的缺省方法是push_back()。...= v.end())  {      if(x == *it)//x为要删除的值,不是下标      {        /.erase(it);//容器在删除或插入一个元素后,原来的迭代器会失效

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

    九、运算符重载

    函数返回对象的值(注意是返回对象,而不是引用),通常是修改前的值。这通常通过创建一个临时对象(当前对象的副本)并在修改当前对象之前返回该临时对象来实现。 2....通过重载它,你可以让类的对象支持类似数组的访问方式。...一种常见的方法是定义一个函数或操作符,它接受一个字符串(或字符串字面量转换成的std::string)作为参数,并返回一个经过某种处理的结果。...类型转换重载 在C++中,类型转换重载是通过定义类型转换操作符(conversion operator)来实现的。这种操作符是一个特殊的成员函数,它定义了如何将类的对象或结构体实例转换为另一种类型。...然后,它定义了一个类型转换操作符operator double(),它返回value成员的值。这允许MyClass对象在需要double类型的地方被隐式或显式地转换为double类型。

    16110

    java代码优化:判断内聚到实体对象中和构造上下文对象传递参数

    通过两个常见的java后端实例场景探讨代码优化,代码不是优化出来的,而是设计出来的,我们永远不可能有专门的时间去做代码优化,优化和设计在平时。...DateTimeUtils.isBeforeNowByDay(createTime, 1); }}改动的地方只是直接将 if 判断内聚到了 DO 对象中作为一个方法,外部使用的时候直接调用一下当前对象的这个方法就可以了...案例二:构造上下文对象传递参数在一个任务操作中,我们可能会先查询任务信息,然后参数、逻辑校验这些,接着进行具体的核心发布逻辑操作,最后可能还需要记录操作日志...其实和我们大部分的业务场景很相似,一个接口中我们需要拆解成很多步骤...其实像这种一个接口中我们需要各种传递参数的场景,本身又在一个方法中那就可以通过构造一个统一的上下文对象来解决,如下是优化后的代码:TaskService.javapublic class TaskService...,在获取到结果时直接去 set 上下文对象 TaskContextDTO,其他需要的地方通过 get 就能直接获取到。

    7510

    C++(STL):07---vector之使用方式和常规用法

    也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。 本质讲,vector使用动态分配数组来存储它的元素。...vec.cbegin(); //意思就是不能通过这个指针来修改所指的内容,但还是可以通过其他方式修改的,而且指针也是可以移动的。...因此,在创建 vector 对象时,我们可以直接创建一个空的 vector 容器,并不会影响后续使用该容器。 但这会产生一个问题,即在初始化空的 vector 容器时,不能使用迭代器。...所以,对于空的 vector 容器来说,可以通过调用 push_back() 或者借助 resize() 成员函数实现初始化容器的目的。...:00965560 可以看到,values 容器在增加容量之后,首个元素的存储地址发生了改变,此时再使用先前创建的迭代器,显然是错误的。

    80720

    【Java】基础52:注解,没有想象中那么简单

    ①注解@Target 它的作用在于指明自定义注解可以使用的位置: ElementType.TYPE:可以注释在类上 ElementType.METHOD:可以注释在方法上 ElementType.FIELD...:可以注释在属性上 ElementType.CONSTRUCTOR:可以注释在构造方法上 都是很常见的英语单词,根据其意思就能知道它的作用。...①创建自定义注解 使用@Target让自定义注解可以放在方法上、构造上; 使用@Retention让自定义注解保留到运行时期。 自定义注解中只有一个属性,并且属性名为value,所以可以简写。...②创建Student对象 分别在构造方法上和成员方法上放上自定义的注解,同时给注解的属性赋值。 这样做有什么用? 如果有对应框架的话,我们直接在构造方法上放一个注解,就能够给类的属性赋值了。...①获取Student类对应的Class对象 每个类都有一个对应的Class对象,三种获取Class对象的方式,选择一种即可。

    37720

    JAVA学习笔记(二)

    ---》Test构造方法变成私有的 (Test类不让创建对象了) 2.Test类自已创建自已的对象 (别人拿不了,因为Test不让创建对象,不能通过对象名.属性拿) 3.Test类对外提供一个公共的静态方法...保证对象唯一性思想: 1)不允许其它程序用new来创建对象 2)在该类创建一个本类实例 3)对外提供一个方法,让其它程序可以获取该对象 什么是继承?...2.抽象类通过其子类实例化,而子类需要覆盖掉抽象类中所有的抽象方法后才可以创建对象,否则该子 类也是抽象类。 3.抽象类是由abstract来修饰的。...(内置类,嵌套类) 定义的位置:定义在成员位置上、定义在局部位置上(方法、代码块)、匿名内部类(new A() {...}.show();) 内部类访问特点: 内部类可以直接访问外部类中的成员,包括私有成员...throws什么时用:在方法头抛异常,可以抛多个,用逗号分隔 throw什么用:在方法内部用,抛的是异常的对象,只能抛一个 throw 运行期异常对象()---->方法头部不用必须throws throw

    61410

    Java大型互联网公司经典面试题,论JDK源码的重要性的无限思考

    接着我们回到正题,这里也是今天要讲的第一个知识点:Java的传值在java中,有两种传值方式:一种是按值传递,一种是引用传递!...通过swap方法后:意味着,会同样创建两个变量num1和num2,他们的值是刚刚拷贝过来的ab的值,此时内存中时怎么变化的呢: ?...然后我们发现这个value定义的是final类型的: ? 如果他有一个setValue()的方法的话,那么我们是是不是可以通过这个方法来改变值,但是Integer并没有提供。...实际上面,在java反射中,提供了一个叫设置访问权限的东西,我们进入Field类中看下: ? 然后他里面有一个setAccessible的方法: ? 这个方法就是用来设置成员属性访问权限的。...结果是,a的值确实变了,但是b的值却没有变,首先说明通过这种方式确实可以改变值,但是为什么b的值没有变化呢?。请问为什么?我们再回过头来看看外面的方法,检查一下,我们定义了: ?

    1.1K10

    Oracle 数据库存储结构

    例如,你改变了员工表中某个员工的薪资,会生成一个包含改变向量的重做记录,其中改变向量描述了对员工表数据段的数据块,undo段的数据块,事务表undo段的更改。...当执行恢复操作时,数据库读取重做记录中的改变向量并应用与相关的数据块。 如果数据库出故障,需要恢复已备份的数据据文件,而最近未备份的,丢失的数据则可通过联机重做日志文件获取。...数据文件可以被分成以下组成部分: 1)段(Segment) 段包含一种特殊类型的数据库对象。例如,表段中存放的是数据表,索引段中存放的是索引。一个数据文件可以包含多个段。...每个表空间包含相关的逻辑结构(比如表,视图,其它数据库对象)。例如,所有的应用程序对象可以放进一个单独的表空间,方便维护。 一个表控件由一个或更多个物理数据文件组成。...分配给表空间的数据库对象存放在该表空间的物理数据文件中。 当创建oracle数据库时,会自动创建一些表空间,比如SYSTEM,SYSAUX表空间。 表空间提供了定位物理存储上的数据的一种方法。

    2.1K20

    经典笔试题-Java基础篇

    2)继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。...当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。...然而可以创建一个变量,其类型是一个抽象类,它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例并让它指向具体子类的一个实例。...一个类可以实现多个接口,当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。...【基础】 答:一个内部类对象可以访问创建它的外部类对象的内容。 46、java 中实现多态的机制是什么?

    76220

    第十一章 C++成员函数与静态成员详解

    第十一章 C++成员函数与静态成员详解 1. 概述 在C++中,成员函数是定义在类内部的函数,用于操作类的对象。静态成员是属于整个类而不是类的对象的成员。...void MyClass::memberFunction(int arg) { // 函数体 } 2.2 成员函数的使用 成员函数通过一个特殊的指针this访问调用它的对象。...静态成员函数是一种属于类而不是类的对象的函数。...它可以保证在被调用时不会改变对象的状态。通过在声明和定义中加上const关键字来实现。...它包含一个items向量用于存储添加的物品,并使用itemCount静态成员变量来记录购物车对象的数量。 通过调用成员函数addItem和removeItem,我们可以在购物车中添加和移除物品。

    5900

    2W五千字的C++基础知识整理汇总

    C++总览简介 C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。 C++ 被认为是一种中级语言,它综合了高级语言和低级语言的特点。...当执行离开一个范围时,所有在该范围中创建的自动对象都会被销毁。 C++ 提供了下列的控制语句。...一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。 引用必须在创建时被初始化。指针可以在任何时间被初始化。...类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。函数在一个类中被称为类的成员。 C++ 类定义 定义一个类,本质上是定义一个数据类型的蓝图。...在类对象作用域内,公共成员在类的外部是可访问的。也可以指定类的成员为 private 或 protected。 定义 C++ 对象 类提供了对象的蓝图,所以基本上,对象是根据类来创建的。

    2.6K10

    一文让你学完C++,干货收藏!!!

    C++总览简介 C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。 C++ 被认为是一种中级语言,它综合了高级语言和低级语言的特点。...当执行离开一个范围时,所有在该范围中创建的自动对象都会被销毁。 C++ 提供了下列的控制语句。...一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。 引用必须在创建时被初始化。指针可以在任何时间被初始化。...类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。函数在一个类中被称为类的成员。 C++ 类定义 定义一个类,本质上是定义一个数据类型的蓝图。...在类对象作用域内,公共成员在类的外部是可访问的。也可以指定类的成员为 private 或 protected。 定义 C++ 对象 类提供了对象的蓝图,所以基本上,对象是根据类来创建的。

    3.4K20

    面向对象设计的 10 条戒律

    I.遵循单一职责原则 每个类都应该有一个并且只有一个引起它变化的原因。这不仅适用于类,方法也是如此。...不知道你有没有见到过那些长篇大论的冗余的类和方法,当将它们写到纸上的时候,简直就是懒婆娘的裹脚布——又臭又长?好吧,我们要提出的观点是不要这样做。 该原则的要点就是每个类或方法都有一个存在的理由。...在我们的例子中,开发人员做了这样的事情: ? LoanProcessor的问题是,当有一种新类型的Loan,例如HomeLoan出现的时候,它将不得不改变。结构最好是这样: ?...这个原则真的很简单,只需要问一个问题——如果我要看子类,那么我能不能说“Child是Parent的一种类型?”或者,它更像“Child某种程度上是Parent的一种类型?...V.类遵循松散耦合原则 这与封装正确的行为是相辅相成的。如果行为被很好地封装在类中,那么就只能创建松散耦合的类。我们可以通过依赖于抽象而不是实现来做到松散耦合。

    32920

    一文让你学完C++,干货收藏!!!

    C++总览简介 C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。 C++ 被认为是一种中级语言,它综合了高级语言和低级语言的特点。...当执行离开一个范围时,所有在该范围中创建的自动对象都会被销毁。 C++ 提供了下列的控制语句。...一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。 引用必须在创建时被初始化。指针可以在任何时间被初始化。...类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。函数在一个类中被称为类的成员。 C++ 类定义 定义一个类,本质上是定义一个数据类型的蓝图。...在类对象作用域内,公共成员在类的外部是可访问的。也可以指定类的成员为 private 或 protected。 定义 C++ 对象 类提供了对象的蓝图,所以基本上,对象是根据类来创建的。

    2.3K20

    一文让你学完C++,干货收藏!!!

    C++总览简介 C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。 C++ 被认为是一种中级语言,它综合了高级语言和低级语言的特点。...当执行离开一个范围时,所有在该范围中创建的自动对象都会被销毁。 C++ 提供了下列的控制语句。...一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。 引用必须在创建时被初始化。指针可以在任何时间被初始化。...类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。函数在一个类中被称为类的成员。 C++ 类定义 定义一个类,本质上是定义一个数据类型的蓝图。...在类对象作用域内,公共成员在类的外部是可访问的。也可以指定类的成员为 private 或 protected。 定义 C++ 对象 类提供了对象的蓝图,所以基本上,对象是根据类来创建的。

    3K3029

    大模型LLaMA及其Finetune方法

    Zero-init Attention在计算attention时,使用一个门控网路对prompt向量的信息进行选择,在初始时使用较小的权重,减少其对整个序列的影响。...然后将这个编码通过一个projection层映射后,加到Adapter中的prompt向量上,再利用上述的方法进行LLaMA的finetune。...通过这种方式,可以让LLaMA适应多模态任务,根据图像信息进行表示生成。 下面是本文进行多模态LLaMA finetune后的效果case,可以看到能够比较好的解决多模态问题。...5、总结 本文介绍了大模型LLaMA以及它的finetune方法。大模型是目前NLP发展的趋势,如何在自己的业务场景上finetune大模型,让其对齐下游任务,也是业内目前的一个研究重点。...在LLaMA大模型上的finetune技术探索工作,可以帮助我们进行广泛的大模型应用实践。

    1.2K20

    Java面向对象问题汇总

    1.3、多态 多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法...3、内部类 3.1、什么是内部类 内部类就是定义在另外一个类里面的类。它隐藏在外部类中,封装性更强,不允许除外部类外的其他类访问它。但它可直接访问外部类的成员。...3.2、内部类有哪些 成员内部类: 成员内部类是外围类的一个成员,是依附于外围类的,所以,只有先创建了外围类对象才能够创建内部类对象。...也正是由于这个原因,成员内部类也不能含有 static 的变量和方法; 静态内部类: 静态内部类,就是修饰为static的内部类,该内部类对象不依赖于外部类对象,就是说我们可以直接创建内部类对象,但其只可以直接访问外部类的所有静态成员和静态方法...; 局部内部类: 局部内部类和成员内部类一样被编译,只是它的作用域发生了改变,它只能在该方法和属性中被使用,出了该方法和属性就会失效。

    38030

    Clojure 学习入门(18)—— 数据类型

    如果这些数据类型中的任何一种都不足以表示某种数据结构,那么我们可以通过任何方式来组合它们。 这些数据类型都具有如下性质: 都不可变。...一旦被创建,它们就不可改变,因此对于任何时间的任何线程来讲,访问它们都是安全的。那些被认为是“改变了“它们的操作实际上是返回了一个全新的依旧不可变的对象。 都是持久的。...在很多情况下,这表示它们可以不用更改地传递给那些需要组合数据类型的Java对象和方法。...这不仅仅是一个数学上的描述——它们都是实现了的函数,并且可以通过函数调用来取得元素的值。通过索引来取得值的最简单的方法是:像函数一样调用这个向量,然后将你想要的索引传递给它。...在一个Clojure程序的上下文里,使用映射十分不错,因为可以通过普通的方式来操作它们,而不必为不同的类的对象创建操作的方法。 assoc 映射结合函数assoc接收一个映射和一些键/值对作为参数。

    2.3K10

    2022年Unity面试题分享

    通过这个实现了 IEnumerator接口对象A,可以遍历访问集合类对象中的每一个元素对象 对象A访问MoveNext方法,方法为真,就可以访问Current方法,读取到集合的元素。...定义:运行时,动态获取类型信息,动态创建对象,动态访问成员的过程。 另一种定义:审查元数据并收集元数据的信息。 元数据:编译后的最基本数据单元,就是一堆表,反射就是解析这些元数据。...反射是在运行期间获取到类、对象、方法、数据的一种手段 主要使用类库System.Reflection 反射要点:如何获取类型,根据类型来动态创建对象,反射获取方法以及动态调用方法,动态创建委托 一...【注意】 1、只能从主线程中访问 Unity3D 的组件,对象和 Unity3D 系统调用 2、如果同时你要处理很多事情或者与 Unity 的对象互动,可以用 thread,可以通过排序来解决一个线程改变一个数据的问题...面试题 在父类中提供一个创建对象的方法,在其子类中决定实例化对象的类型。

    4.1K11
    领券