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

关于 java 中的 set,get方法,而为什么不推荐直接使用public

我不知道有没有人遇到过,有一段时间,我都觉得那些 set,get的用处何在,我直接写一个public直接拿不就行了,多爽,但是随着使用的频繁,越来越想去搜索一下这个问题,而不是按照官方的推荐,前辈们的使用都是建议...这里引入其中的一句话: 在任何相互关系中,具有关系所涉及的各方都遵守的边界是十分重要的事情,当创建一个类库时,就建立了与客户端程序员之间的关系,他们同样也是程序员,但是他们是使用你的类库来构建应用...,或者构建更大的类库的程序员。...如果所有的类成员对任何人都是可用的,那么客户端程序员就可以对类做任何事情,而不受约束。即使你希望客户端程序员不要直接操作你的类中的某些成员,但是如果没有任何访问控制,将无法阻止此事发生。...补充说明,set字面意思设置,get获取,我们了解一下java面向对象编程的封闭性与安全性,private 修饰的set get方法将方法封闭在了一个特定类中,其他类就无法对其变量进行方法,这样就提高了数据的安全性

1.5K20

数据库不推荐使用外键的9个理由

来源:www.jdon.com/49188 我的经验告诉我,很多数据库(大多数我曾经使用的)不包含外键时并不总是一件坏事。在这篇文章中,我想把重点放在为什么的原因上。 为什么这是一个问题?...2.表格关系不清晰 数据库中缺少外键的另一个不太明显的负面影响是,不了解该模式的人很难找到正确的表并找出表关系。这可能会导致严重的数据库查询和报告问题。 为什么数据库可以没有外键?...让我们来看看数据库可以没有外键的原因。首先一个简短的免责声明(因为文章引发了一些关于LinkedIn群体的争议): 下面的理由绝不鼓励不要在数据库中使用外键约束。...这些工具负责参照完整性,并与RDBMS一起创建更高级别的数据库引擎。这些框架可以自己创建数据库表,而不总是创建外键。使用这些工具的开发人员很少会干扰自动生成的模式,并且不需要外键。...一个完美的自我解释的设计可能会使他们过时。但这只是我的理论。 正文结束 【推荐阅读】 Java高效开发12个精品库 所有和Java中代理有关的知识点都在这了。 (完) ?

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

    数据库不推荐使用外键的 9 个理由

    2.表格关系不清晰 数据库中缺少外键的另一个不太明显的负面影响是,不了解该模式的人很难找到正确的表并找出表关系。这可能会导致严重的数据库查询和报告问题。 为什么数据库可以没有外键?...让我们来看看数据库可以没有外键的原因。首先一个简短的免责声明(因为文章引发了一些关于LinkedIn群体的争议): 下面的理由绝不鼓励不要在数据库中使用外键约束。...这些工具负责参照完整性,并与RDBMS一起创建更高级别的数据库引擎。这些框架可以自己创建数据库表,而不总是创建外键。使用这些工具的开发人员很少会干扰自动生成的模式,并且不需要外键。...SQL Server就是一个很好的例子 - 它不能在同一台服务器上的两个数据库上创建key。而且这种架构在大型系统中很常见。...这需要一些努力,但是却没有带来直接的好处。一些架构师和数据库管理员只是忽略了这一部分。 9.保持模型的秘密 也许这是一个很遥远的问题,但也许有时候是因为人们不希望别人知道太多太容易。

    1.7K30

    关于Spring中的@Async注解以及为什么不建议使用 - Java技术债务

    只适用于不需要多线程的地方。 ConcurrentTaskExecutor:Executor的适配类,不推荐使用。如果ThreadPoolTaskExecutor不满足要求时,才用考虑使用这个类。...,指在@Async注解在使用时,不指定线程池的名称,@Async默认异步配置使用的是SimpleAsyncTaskExecutor,该线程池默认来一个任务创建一个线程,若系统中不断的创建线程,最终会导致系统占用内存过高...,不允许使用系统默认的线程池,推荐通过ThreadPoolExecutor的方式,这样的处理方式让开发的工程师更加明确线程池的运行规则,规避资源耗尽的风险。...在泰山版《阿里巴巴开发手册》规定开发中不建议使用 Async 注解,这是为什么?在实际开发中,异步编程已经成为了一个必备的技能。...可能会导致死锁问题:如果异步操作中包含了阻塞操作,可能会导致线程池中的线程被阻塞,从而导致死锁问题。 综上所述,直接使用 Async 注解可能会导致各种问题,因此不建议直接使用 Async 注解。

    16210

    GitHub使用AI来推荐项目存储库中的开放问题

    根据GitHub高级机器学习工程师Tiferet Gazit的说法,GitHub去年进行分析和手工整理,创建了一个由300标签名称组成的列表,这些名称被流行的开源库使用。...相比之下,新的人工智能推荐系统基本上是自动的,构建它需要制作一个包含数十万个样本的带注释训练集。...GitHub最初的问题包含了策划列表中大约300个标签中的任何一个,它还补充了一些可能对初学者友好的问题。...在检测并删除重复的问题之后,还进行了多次培训、验证,最终测试集被跨存储库分离以防止类似内容的数据泄漏,GitHub只使用经过预处理和去噪的问题标题和主体来训练人工智能系统,以确保它在问题打开后立即检测到正确的问题...将来,GitHub打算向它的存储库建议添加更好的信号,并为维护人员和测试人员提供一种机制,以在他们的存储库中批准或删除基于AI的建议。

    1.6K30

    如何使用构建在 Redis 之上的 BullMQ 库在 Node.js 中实现一个消息队列。

    在这篇文章中,我们将使用建立在Redis之上的BullMQ库,在Node.js中实现一个消息队列。我们将实现两个消息队列。一个用于为特定订单添加退款任务。...对于通知任务,我们将使用另一个队列。步骤1:设置项目创建一个新文件夹 "messaging_queue" 并通过 npm init 初始化项目,并添加依赖项。...文件,编写代码实现 refundQueue 并添加函数将退款任务添加到 refundQueue 中。...步骤6:Docker设置为了运行BullMQ的代码,我们需要在本地计算机上运行一个Redis服务器。因此,我们将使用Docker。...确保您的系统已安装Docker,并创建一个 docker-compose.yml 文件。

    77900

    C++又一坑:动态链接库中的全局变量

    原先的这个静态的模块中的静态全局变量是有构造函数的,也就是构造函数干了点事情。 我们都知道,程序载入在进入主函数前会依次初始化全部的全局和静态变量。载入动态链接库时也不例外。...这时候矛盾就来了,二进制b在进入主函数前会初始化模块a中的全局变量,执行构造函数;然而载入动态链接库c时,也会启动对c内的全局变量进行初始化,也会执行同一个对象的构造函数。...,在Linux中多个动态链接库和主程序引用的同一个全局变量(地址相同),但是每一个二进制实例都会完成一次构造。...这也就意味着,在Linux中,载入的动态链接库实际上可以直接使用外部框架或者其他模块的全局数据,但是在Windows下确是隔离的,不能直接访问到。...PS: 如果不是直接使用的全局变量,而是直接使用函数接口,并且返回一个static的局部变量这种方式,测试结果也是一样的; 而且如果不是通过dlopen动态加载,而是通过编译时链接进去的话,也是构造了两次

    7.2K31

    小心两个共享库共用同一个静态库

    小心两个共享库共用同一个静态库.pdf 注:以下内容仅针对Linux/GCC环境,不涵盖Windows,包括Cygwin环境。...下载测试代码: x.zip(和帖子的略不同,x.zip包中的全局变量是个类对象,带有构造和析构函数) 推荐阅读:http://blog.chinaunix.net/uid-20682147-id-351108....html(Linux上制作可执行的共享库示例) 问1:如果测试中的全局变量global_var是个带构造和析构的类对象,会如何?...原因是在使用dlopen动态加载共享库时,如果静态库中包含有全局变量,可能会出现名同地址不同的全局变量。 解决办法:总是使用RTLD_GLOBAL加载共享库,而不是RTLD_LOCAL。...//int flag = RTLD_LOCAL|RTLD_NOW;  // 如果是RTLD_LOCAL则静态库中定义的全局变量在共享库中名同地址不同         call_foo

    2.7K50

    解决make编译链接动态库错误:libxx.so: undefined reference to xx

    1 场景再现 为了能快速定位出错的位置,自己写了一个很简单的测试程序test.c,该程序调用了libsrcpbl.so动态库中的一个自定义的公共头文件pbl_global.h。...用nm libsrcpbl.so命令查看一下链接的动态库,结果如下: ##### 使用nm查看动态库 [root@typecodes test]# nm -A /root/gcc_test/tcp_msg...[root@typecodes test]# 根据上图中的信息,结合前文《Unix系统中nm命令展示目标文件符号的方法》nm命令的man手册关于符号U的说明,推测可能原因:libsrcpbl.so动态库文件中存在...libsrcpbl.so动态库的一个源程序中,通过引用头文件pbl_global.h,然后直接使用了这个外部全局变量gcProgramName,因此需要在tst.c对这个变量进行定义。...1、链接的动态库中存在只做了声明的自定义的函数/全局变量,但是在其它对象文件中没有实现定义; 2、链接生成的目标文件中引用了某动态库的自定义函数/全局变量,但是没有通过`-lXX`选项链接进来。

    2.3K10

    gcc命令使用_c调用cmd并执行命令

    text链接静态库,代码尺寸变得极大 没有链接动态库 动态链接: 动态链接则是指链接阶段仅仅只加入一些描述信息,而程序执行时再从系统 中把相应动态库加载到内存中去。....data:已初始化的 C 程序全局变量和静态局部变量。 .bss:未初始化的 C 程序全局变量和静态局部变量。 .debug:调试符号表,调试器用此段的信息帮助调试。...,但不是全部,事实上只有 ANSI/ISO C 语言标准中要求进行编译器诊断的 那些情况,才有可能被 GCC 发现并提出警告 b. gcc -Wall illcode.c -o illcode 使用它能够使...GCC 产生尽可能多的警告信息 总结 静态库链接时搜索路径顺序: ld 会去找 GCC 命令中的参数-L 再找 gcc 的环境变量 LIBRARY_PATH 再找内定目录 /lib /usr/lib...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    1.8K40

    深入浅出GCC编译器

    编译时编译器只对单个文件进行处理,如果该文件里面需要引用到其他文件中的符号,比如全局变量或者调用了某个库函数中的函数,那么这时候,在这个文件中该符号的地址是没法确定的,只能由链接器把所有的目标文件链接到一起才能确定最终的地址...编译器不执行循环展开以及函数内联。会尝试更多的寄存器级的优化以及指令级的优化,它会在编译期间占用更多的内存和编译时间。大多数情况下,推荐使用 O2 这一级优化选项就足够了。...因此,用户自定义头文件必须用这种方式引入,系统提供的头文件也可以使用这种方式,但是会增加没必要的搜索,所以不推荐。...libxxx.so 或 libxxx.a ,所以这个参数的使用方法是直接加库名 -lxxx ,具体使用方法将在我Linux专栏的另一篇文章《自己动手做动态库与静态库》中详细介绍。...(5)-L 包含的库路径 指定动态库和静态库的路径,后面直接加路径即可。具体使用方法将在我Linux专栏的另一篇文章《自己动手做动态库与静态库》中详细介绍。

    52910

    静态链接库和动态链接库的区别

    只需要在使用到这些公用函数的源程序中包含这些公用函数的原型声明,然后在用gcc命令生成目标文件时指明静态库名(是mymath 而不是libmymath.a ),gcc将会从静态库中将公用函数连接到目标文件中...、隐式方式使用动态库在程序中隐式使用动态库和使用静态库完全一样,也是在使用到这些公用函数的源程序中包含这些公用函数的原型声明,然后在用gcc命令生成目标文件时指明动态库名进行编译。...使用G++对其进行编译:g++ -fPIC -shared b1.c -o libb.so编译成功!可见GCC和G++对于这种全局变量初始化的方法,支持力度是不一样的。.../main运行的结果中很容易知道,当Linux静态库和Linux动态库同名时, gcc命令将优先使用动态库。...6、查看库中的符号1、使用nm命令可以打印出库中涉及到的所有符号。

    8.4K21

    函数或全局变量重复定义时会怎样?

    而链接过程正是通过符号表中的符号,将不同的目标文件“粘”在一起,形成最后的库或者可执行文件。...关于nm的使用,在《几个命令了解ELF文件的秘密》也有介绍。 除了上面提到的全局符号,目标文件中还有其他符号信息,不过这不是本文关注的重点。...对于多重定义,即标题提到的变量重名时,链接器有它的处理规则: 1.强符号不允许重复 2.有一个强符号和多个弱符号,使用强符号 3.多个弱符号,则随意选择一个 关于第一点,在最开始的例子中你已经见到了,最常见的情况就是你重复定义了变量或者函数等等...而第二点也有示例,示例中,虽然定义了两个num,但是var.c中未初始化的num是弱符号,main.c中的num是强符号,这种情况下编译正常。只是最终会使用强符号的num。...总结 如非特殊需求,应该尽量避免出现全局变量同名,以免造成意料不到的结果,例如使用变量时最小范围定义,即尽可能避免全局变量,或者使用命名空间(如C++中)。

    1.8K30

    C语言volatile关键字详解

    本小白猜测,大佬您是不是没有开启编译器优化,编译器其实是默认不优化的,这对入门者是友好的,但是当进入企业开发中,我们可能就会遇到 leader 在编译源码时,选择了编译器优化,以减少可执行程序大小和提高性能...使用GCC编译器时,在编译脚本命令加入 -On ; n: 0 ~ 3,数字代表优化等级,数字越大,优化级别越高。...我们都知道,每一个线程虽然共享一个进程的资源,但是每个线程同样拥有自己的私有堆栈,保证每个线程函数中定义的局部变量相互之间不可见;线程间通信是十分简单的,其中一个十分常见的方式就是通过共享全局变量,全局变量对于每一个线程都是可见的...会出现什么问题、怎么解决此类问题、怎么去复现数据不同步问题、想看看博主有多傻逼 都看看 编译器优化对多线程数据同步的影响(volatile详解实验二) 2.3中断函数与主函数共享的全局变量 中断函数和主函数共享的全局变量需要使用...例如: //GPIOE13 ---->LEDD7 //GPIOA28 ----> KEY2 //注意:裸机程序是直接在硬件上运行的程序,是不能使用标准C库。

    46420

    Linux系统下刨析hello world背后的秘密

    它的作用是将头文件的内容包含到本文件中。该头文件中的所有代码都会在#include处展开。可以通过gcc -E helloworld.c在预处理后自动停止后面的操作,并把预处理的结果输出到标准输出。...因此使用gcc -E helloworld.c > helloworld.i,可得到预处理后的文件。...理解了预处理,就明白为什么不能在头文件中定义全局变量,这是因为定义全局变量的代码会存在于所有以#include包含该头文件的文件中,也就是说所有的这些文件,都会定义一个同样的全局变量,这样就会发生冲突。...编译编译过程是对源代码进行语法分析,并优化产生对应的汇编代码的过程。同样使用gcc也可得到汇编代码gcc -S helloworld.c -o helloworld.s。...bss段用于保存没有初始值或初值为0的全局变量和静态变量,当程序加载时,bss段中的变量会被初始化为0。 除此之外还有其他常见的段: debug段:用于保存调试信息,如果不使用-g选项,则不会生成。

    61820

    关于OCR项目的流水账

    关于同步和异步,各取所长才是最合理的选择,判断方法:如果是业务逻辑的实现部分,那么倾向于选择使用同步;如果是业务逻辑完成之后的后续通知部分:强烈建议选择使用异步。...为什么不推荐使用Sarama Go客户端收发消息?...如果 gcc 的版本比较老,就会导致 libstdc++.so.6 与 msgfmt 不兼容。...知道了来龙去脉,不难想到解决方案就是使用新版 gcc,更具体一点说是使用版本不低于 4.9 的 gcc(CentOS 7 上的 gcc 版本一般是 4.8.5),不过不推荐直接从源代码安装新版 gcc,...shell> exit shell> gcc -v gcc version 4.8.5 关于 devtoolset 还有一个冷知识:devtoolset 和 gcc 的版本对应关系如下: devtoolset

    97210

    C语言令人抓狂的一面——全局变量

    只要小心地使用,C语言还是很完美的嘛~ 对于抱这样想法的人,我只想说,请你在夜深人静的时候竖起耳朵仔细聆听,你很可能听到Dennis Richie在九泉之下邪恶的笑声——不,与其说是嘲笑,不如说是诅咒…...另外笔者尝试过将t1.c中的b和c定义前面加上const限定词,编译器仍然默认通过,但程序在main()中第一次调用foo()时触发了Segment fault异常导致崩溃,在foo.c里使用指针改写它也一样...而一些IT界“恐怖分子”也经常**将恶意代码包装成全局变量注入到root权限下存在漏洞的操作序列中,**就像著名的栈溢出攻击那样。...你可以反过来思考一下为何C的胞弟C++推出**“命名空间(namespace)”**的概念,或者你可以使用其它高级语言,对于重定义的全局变量是否能通过编译这一关。...所以请时刻谨记,C是一门很恐怖的语言! 本文整理自网络,版权归原作者所有,如有侵权,请联系删除。 往期推荐 EEPROM 和 flash 这样讲,早就懂了!

    85610

    JenkinsShareLibrary实践之自定义通知器

    共享流水线库是由存储在代码仓库中的代码组成的,该代码仓库由Jenkins自动下载并可供流水线使用。 以上中文描述来自《Jenkins 2权威指南》。...关于jenkins pipeline share library的更多介绍,可以参考官方文档。 1....于是就需要在执行完流水线后进行一定程度的消息推送,在现今的工作流中消息推送无外乎分为两大类:邮件和企业沟通协作软件,相比之下,我们可能更多的会去关注和使用沟通软件来发送消息而不是通过邮件的方式。...---- 4.3 方法的具体实现 定义共享库中src/org/devops目录为共享库方法的主目录,在这个目录下创建一个名为dingmes.groovy的文件作为钉钉消息推送方法的代码文件。...通过调用其他脚本发送,例如python脚本,较复杂,不推荐。

    2.3K40
    领券