Java中私有构造器的作用

【Java安全】Java反射机制-调用构造器 Java反射(Reflection)是Java非常重要的动态特性,通过使用反射我们不仅可以获取到任何类的成员方法(Methods)、成员变量(Fields)、构造方法(Constructors)等信息,还可以动态创建Java类实例、调用任意的类方法、修改任意的类成员变量值等。Java反射机制是Java语言的动态性的重要体现,也是Java的各种框架底层实现的灵魂。2023年11月27日 杭州 github:zangcc 阅读详情
在Java中,所有的类成员都可以设置访问控制关键字,包括:private,public,protected,package,来对类成员的访问权限进行控制。
 
构造器作为Java类的一个特殊的成员同样可以设置关键字来控制其访问权限。在大多数情况下,我们一般把构造器设置为公有成员,即public的,在默认情况下,如果不写任何关键字,其访问权限也是public。这样,在我们新建一个类的对象的时候,构造器会创建对象后被自动调用,发生在其他类成员被设置为默认初始值之后,当然如果有字段初始器和初始化块的话,构造器的调用会发生在此之后。构造器的主要作用是在new将对象的引用返回之前初始化对象。
 
言归正传,什么叫私有构造器。所谓私有构造器,就是用private关键字声明的构造器。与一般公有构造器最大的区别在于,其访问权限是private,于是它只能被包含它的类自身所访问,而无法在类的外部调用,故而可以阻止对象的生成。所以,如果一个类只有一个私有构造器,而没有任何公有构造器,是无法生成任何对象的。
 
那么无法生成对象的带有私有构造器的类究竟有什么作用呢?这样的类在实际应用中最常用的是作为工具类,如字符串的验证、枚举转换之类的,通常只做成静态接口被外部调用即可。这里先插入一点关于静态方法的说明。静态方法是用static关键字声明的方法,可以用类来直接调用而无需用从类中实例化出来的具体对象来调用,因此这样的方法也被称为类方法。static方法只能访问类中的static字段和其他的static方法,这是因为非static成员必须通过对象的引用来访问。举一个例子:
public class A{
       private A(){} ///私有构造类,阻止实例的生成
       public static bool validataString(String str);
}
那么在外部使用的时候,只需要通过类名,而不是对象实例来调用validataString方法,如A.validataString(str);可以直接调用此方法。阻止生成对象可以防止不可预期的结果。
Java私有构造器使用方法示例 主要介绍了Java私有构造器的含义、关键字,同时通过实例向大家展示其使用方法,需要的朋友可以参考下 立即下载

相关推荐

TortoiseGit之配置密钥

基于github的开发必须要用到rsa密钥,因此需要用到TortoiseGit的putty key generator工具,来生成既适用于github的rsa密钥也适用于TortoiseGit的ppk密钥。

欧文的博客 2079

java私有构造器的几个用途

引言:在java中一个类的构造方法一般都是公共的public,毕竟你创建类就是为了能够让别人声明出该类的一个实例对象,如果使用private对构造方法进行修饰的话就使用者就无法通过构造方法创建该类的一个实例对象了。但是私有的构造方法仍然有其用途。 具体可以使用在下面几个方面: 1. 用在工具类中 在java.lang.Math类中可以看到如下代码 private Math() {} 并且在Math类中没有其他构造方法,因此用户无法自己创建一个实例化的Math对象。从Math类的源码中可以发现里面的成员属性

weixin_44184990的博客 2129

中标麒麟,postgres报错invalid value for parameter "timeZone":"Asia/Beijing"

在中标麒麟服务器上,安装postgres,启动tomcat容器时,报invalid value for parameter "timeZone":"Asia/Beijing"。 查看postgres运行日志,也报同样的错误。 报错原因:服务器的时区,在Postgres支持的时区目录中找不到。当时在服务器上信息为Beijing 解决步骤: 1. cat /etc/sysconfig/cloc

u010213931的博客 7924

java构造器:

在 Java 中,构造器(Constructor)是一种特殊的方法,用于创建和初始化对象。构造器的名称与类名相同,它没有返回类型(包括void),也不需要使用return命令来返回值。在创建对象时,new关键字会自动调用对应类的构造器来创建对象并执行初始化操作。在上面的示例中,ClassName类有一个私有成员变量num,并定义了一个构造器,它接受一个整数参数,并在对象创建时将其赋值给成员变量num。voidthis()如果一个类需要进行特殊处理的初始化操作,就需要定义相应的构造器来完成这些操作。

qq_38040571的博客 1378

onnxruntime模型部署(一)-pythonAPI

简单模型的onnx模型的导出,以及onnxruntime推理引擎的模型部署

qq_45983373的博客 4059

别再为调试发愁!STM32CubeMX+FreeRTOS下,串口printf打印的保姆级配置指南(基于STM32F429)

本文详细介绍了在STM32CubeMX和FreeRTOS环境下实现稳定串口printf打印的配置方法。通过硬件选型、基础配置、线程安全的重定向实现以及高级调试技巧,帮助开发者解决多任务环境下的串口输出问题,提升调试效率。特别适用于STM32F429开发板用户。

weixin_42527401的博客 273

《Effective Java》第三条 用私有构造器或者枚举类型强化Singleton属性

Singleton其实就是单例,即一个类在一个应用程序中只被实例化一次,只有一个对象。本节讨论三种实现方式。

baidu_40120883的博客 837

STM32F103C8T6用官方bootloader实现IAP升级操作方法

在使用STM32F103C8T6单片机IAP功能时,可以自己写bootloader程序,也可以使用官方bootloader文件。下面说一下使用官方bootloader的使用方法。 首先下载官方bootloader文件 目前使用的是这个版本,打开文件夹,选择适合自己编译器的工程。 目前使用的是keil,所以打开MDK-ARM文件夹 打开IAP工程 打开后根据自己的单片机型号,对工程进行简单的修...

HXYDJ的博客 1万+

java笔记|私有构造方法

学习笔记,仅供参考,欢迎指针

weixin_73317584的博客 1165

MIT 6.824分布式 LAB4A:ShardCtrler

lab 4要求实现一个使用raft共识算法的分片存储系统。而在lab 4a中,我们仅需实现分片控制器的功能。lab4中的分片存储系统有多个分片,这些数据分布在众多分片上,而每个分片都对应着一个集群组,可能一个集群组负责多个分片,一个集群组内的所有服务器都会使用raft共识算法进行状态的复制。而本实验的重点为分片控制器,主要负责的工作是对集群组和分片之间关系的管理,我们仅需在/src/shardctrler文件夹中对client.go,server.go,common.go这三个文件进行修改即可。注意事项(实

MarksSa的博客 832

带有HSE组件的S32系列芯片中各子系统如何依次启动?

仔细阐述了上电后各个子系统的启动顺序,并给出了详细的启动步骤流程图。

车载系统攻城狮 1702

Java基础小细节-构造器

1.同一个".java"文件中的类,只有主类加public,其余类不需要修饰符 2.类外不可以访问private成员 3.构造器:实例化对象的同时,进行初始化 4.没有引用 指向 堆内存,堆里的 对象内存 就变成了垃圾 5.构造器是特殊的方法 没有返回值 方法名和类名一样 一般public修饰,也可以private 如果用户不定义,系统会自动提供一个无参的【默认构造器】 默认构造器不做任...

Java小菜鸟滴博客 168

热力学仿真软件:ANSYS CFX_(15).旋转机械仿真

创建旋转域在中选择需要设置为旋转域的区域。选择选项。设置旋转速度在设置中,指定旋转速度(单位为弧度/秒)。也可以选择选项,并输入具体值。设置旋转轴在设置中,指定旋转轴的方向和位置。通常旋转轴的方向可以使用单位向量来表示,例如[0, 0, 1]表示沿Z轴旋转。旋转轴的位置可以通过指定一个点的坐标来确定,例如[0, 0, 0]表示旋转轴通过原点。旋转机械的仿真在ANSYS CFX中是一个复杂但重要的过程。

kkchenjj的博客 1159

Java进阶——反射(二):获取类的构造器及其作用

调用上述方法后会将类的每一个构造器封装成Constructor对象,然后将这些对象放到构造器数组里。获取有参构造器时要加上.Class,加上后才表示类型的意思。

lyx200154的博客 438

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

getConstructor()与getDeclaredConstructor()方法的区别及setAccessible()方法的作用(超详细)

今天在使用反射创建java对象的时候,遇到了点小问题,查看API文档关于getConstructor()和getDeclaredConstructor()方法写的解释模糊不清,就写了几个测试,验证了getConstructor()与getDeclaredConstructor()方法的区别: 首先上代码: @Getter@Setter public class HelloWorld { pri...

iwlnner的博客 9764

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

JavaSE:构造器

Java构造器

敢问路在何方,路在脚下 351

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【Java基础】Java 构造器

在 Java 的世界里,对象的创建与初始化是编程的基础操作。而构造器(Constructor)作为实现这一操作的关键元素,扮演着至关重要的角色。构造器,也被称作构造方法,是一种特殊的方法,专门用于在创建对象时对对象进行初始化操作。[访问修饰符] 类名([参数列表]) {// 构造器的方法体// 构造器在上述代码中,Person类有一个构造器,它接受两个参数name和age,并将这两个参数的值赋给类的成员变量。构造器是 Java 中创建和初始化对象的重要机制,它具有独特的语法和特点。

小李同学的博客 759

Java高级-03.反射-获取构造器对象并使用

【代码】Java高级-03.反射-获取构造器对象并使用。

程小白的博客 993

java构造器使用

/* 类的结构之三:构造器(或构造方法、constructor)的使用 construct:建设、建造。 construction:CCB constructor:建设者 一、构造器的作用: 1.创建对象 2.初始化对象的信息 二、说明: 1.如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器 2.定义构造器的格式:权限修饰符 类名(形参列表){} 3.一个类中定义的多个构造器,彼此构成重载 4.一旦我们显式的定义了类的构造器之后,系统就不

qq_45608338的博客 337

构造器Constructor

构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。 构造器用来确保每个对象都会得到初始化。当对象被创建时,如果该类具有构造器,java就会在用户有能力操作对象之前自动调用相应的构造器,所以保证了初始化地进行。在java中创建和初始化被捆绑在了一起,两者不能分离。注意构造器没有返回值,与返回值为空(void)明显不同。如果不想被实例化,可

792

子类到底能不能继承父类的私有属性?

最后关于Java中子类能否继承父类的私有变量和方法?当然是以 Java 官方文档解释说明为准,这里我们明确一下“继承”一词的概念,在 Java 中,继承一词的意义是有限制的。一个子类只能继承其父类可访问的成员,并且该子类没有覆盖或者说隐藏父类中的那些可访问成员。所以,一个类的成员就是指在这个类中所声明的属性和方法,再加上从其父类继承而来的属性和方法。也就是说,子类是不能继承父类的私有成员的。虽然子类不继承父类中的私有成员,但是在父类中的这些私有成员仍然是子类对象的一部分。......

学习 记录 总结 分享 9774

Java重点之-构造器的梳理

构造器 构造器的作用 构造器作为Java类的一个特殊的成员同样可以设置关键字来控制其访问权限。在大多数情况下,我们一般把构造器设置为公有成员,即public的,在默认情况下,如果不写任何关键字,其访问权限也是public。这样,在我们新建一个类的对象的时候,构造器会创建对象后被自动调用,发生在其他类成员被设置为默认初始值之后,当然如果有字段初始器和初始化块的话,构造器的调用会发生在此之后...

lds_include 451

Effective Java:第四条--通过私有构造器强化不可实例化的能力

本文探讨了如何确保工具类(Utility Class)不能被实例化。工具类(如Math、Arrays等)仅包含静态方法和字段,实例化毫无意义。默认情况下,编译器会生成公有构造器,导致类可被错误实例化。文章指出将类声明为abstract是错误做法,因其可被继承。正确方法是为工具类添加私有构造器,并在其中抛出AssertionError,同时建议用final修饰类以防止继承。这种设计既阻止了外部实例化,又明确了工具类的设计意图,是最可靠的实现方式。

m0_46557728的博客 846

JAVA基础7-构造器

在类的构造器中,可以显示使用this(形参列表),调用本类指定的其他构造器。我们将类的属性私有化,通过set方法进行设置,通过get方法获取。如果没有显示定义类的构造器的话,则系统默认提供一个空参的构造器。构造器调用时只能出现在首行,并且只能声明一个调用其他构造器。this在表示当前对象时,可以调用类的属性,方法,构造器。//这里在方法里面调用类的方法。也就是在方法内部需要调用该方法的对象时,用this。一个类中如果有多个构造器,那么构造器之间为重载。在构造器内部使用,表示构造器正在初始化对象。

2401_87252899的博客 427

java中构造器的定义与使用

一、构造器的作用: * 1.创建对象 * 2.初始化对象的信息 * * 二、说明: * 1.如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器 * 2.定义构造器的格式:权限修饰符 类名(形参列表){} * 3.一个类中定义的多个构造器,彼此构成重载 * 4.一旦我们显式的定义了类的构造器之后,系统就不再提供默认的空参构造器 * 5.一个类中,至少会有一个构造器。 public class PersonTest { public static...

woahxy的博客 1075
上一篇: Java关于字符串String的工具方法
下一篇: loushang5关于多表关联查询结果,如何映射实体bean
qq839276655
博客等级 码龄11年 4粉丝 9原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值