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

使用Sun专有的Java类是不好的做法?

使用Sun专有的Java类是不好的做法,因为这样会导致代码的不可移植性和兼容性问题。Java设计之初就是为了保证跨平台的兼容性和可移植性,因此在编写Java代码时,应该尽量避免使用特定于某个实现的类或API。

如果需要使用特定的Java类或API,应该尽量使用Java标准库中的类和API,或者使用开源库和框架,这样可以确保代码的可移植性和兼容性。此外,如果需要使用特定于某个实现的Java类或API,应该使用反射或动态加载的方式来加载这些类或API,以确保代码的可移植性和兼容性。

总之,使用Sun专有的Java类是不好的做法,应该尽量避免使用特定于某个实现的类或API,以确保代码的可移植性和兼容性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java 使用 Lombok 的 @ExtensionMethod 注解实现向现有的类添加新的方法

Java 使用 Lombok 的 @ExtensionMethod 注解实现向现有的类添加新的方法 一、前言 我学习 Flutter 时发现 Dart 从2.7版本开始引入了扩展方法(Extension...扩展方法允许我们向现有的类添加新的方法,而无需修改原类或创建子类,这对于增强系统库类特别有用。...扩展方法允许我们向现有的类添加新的方法,而无需修改原类或创建子类。这对于增强系统库类特别有用!...三、Lombok的@ExtensionMethod注解 Java + Lombok 第一个参数是对应的类型,便可支持直接调用! 1....概述 Lombok是一个流行的Java库,通过减少样板代码来简化代码编写。其中一个强大的功能就是@ExtensionMethod注解,它可以增强代码的可读性和简洁性。

10010
  • Java项目中使用最多的排名前100的类,你用的最多的是哪些

    从事Java软件开发工作很大程度是要利用各种类库的api,有组织曾经从10000个开放源码的Java项目中,统计API类的使用频率;下面的列表显示了前100名。...网络配图 下面是前100名列表(括号中的数字是使用频率,范围是从1 - 10000) java.util.ArrayList (6958) java.io.IOException (6866) java.util.List...java.util.Set (3915) java.util.Arrays (3884) java.util.Iterator (3856) java.util.Collections (3643) java.util.Date...(1005) java.util.concurrent.ConcurrentHashMap (1001) java.awt.event.ActionEvent (995) 一个类的使用频率反映了它的受欢迎程度和重要性...,一个Java开发人员,开始学习类最有效的方法就是利用API,这是大多数开发人员看法,而且从类的使用频率上可以反映Java开发的趋势,比如在这前100名类中,我们可以看出Android开发是非常受欢迎的

    1.1K60

    JDK17中的密封类sealed和permits使用指南:什么是Java中的sealed和permits?

    Java中的sealed和permits使用指南 摘要 在现代软件开发的多样化领域中,Java作为一种广泛使用的编程语言,持续不断地演进和创新。...无论你是刚刚开始接触Java的新手,还是寻求进阶知识的资深开发者,本文都将为你提供有价值的见解和指导。‍‍ 正文 什么是sealed类?...关键字是与sealed类紧密结合的另一特性。...通过使用sealed类和permits关键字,你可以确保只有预先定义好的类(如Circle和Square)能够继承Shape类。...这样,我们可以确保图形库中的形状类型是受控的。 小结 Sealed类和permits关键字提供了一种强大的方法来精确控制Java中的类继承。

    1.5K10

    Java这些冷知识你知道吗?

    apple的jvm等在内,都做得不行,所以jvm主要是整合淘汰掉这些做得不好的jvm(s),整合成一个统一的openjdk。...app的做法,后来vc,delphi之类的其实都是抄袭或者说借鉴apple的smalltalk的做法,jobs说微软从头到尾都在抄袭apple是空穴来风,这里空穴来风跟王垠使用的空穴来风是一个意思,有趣的是...3)jee也是一个或者说是一堆标准,知乎上有些人把maven,jenkins都算做jee是不对滴,jee的标准核心是ejb,其实就是一个xml配置化的java文件,这个标准在4的时候,达到了顶峰状态,几乎所有的挨踢大厂都主动支持该标准...8)maven上的jars数量前两天突破800万,其他语言的类库,排名第二的是npm,大概数量是maven的十分之一,也就是几十万,不知道现在突破100万没有,然后是gem,也就是ruby那个,大概是十几万...10)微软也曾经是jcp甚至是java的主要贡献者,但是利益驱使下,想扩展java,从而破坏java跨平台的特性,所以跟sun闹翻,其本质原因就是想让客户写的java代码跟windows绑定,sun坚决不同意

    49530

    Java这些冷知识你知道吗?

    apple的jvm等在内,都做得不行,所以jvm主要是整合淘汰掉这些做得不好的jvm(s),整合成一个统一的openjdk。...app的做法,后来vc,delphi之类的其实都是抄袭或者说借鉴apple的smalltalk的做法,jobs说微软从头到尾都在抄袭apple是空穴来风,这里空穴来风跟王垠使用的空穴来风是一个意思,有趣的是...3)jee也是一个或者说是一堆标准,知乎上有些人把maven,jenkins都算做jee是不对滴,jee的标准核心是ejb,其实就是一个xml配置化的java文件,这个标准在4的时候,达到了顶峰状态,几乎所有的挨踢大厂都主动支持该标准...8)maven上的jars数量前两天突破800万,其他语言的类库,排名第二的是npm,大概数量是maven的十分之一,也就是几十万,不知道现在突破100万没有,然后是gem,也就是ruby那个,大概是十几万...10)微软也曾经是jcp甚至是java的主要贡献者,但是利益驱使下,想扩展java,从而破坏java跨平台的特性,所以跟sun闹翻,其本质原因就是想让客户写的java代码跟windows绑定,sun坚决不同意

    1.7K00

    java9迁移注意事项

    迁移种类 1、代码不模块化,先迁移到jdk9上,好利用jdk9的api 2、代码同时也模块化迁移 几点注意事项 不可读类 比如sun.security.x509,在java9中归到java.base模块中...比如sun.misc.Unsafe,原本只想让oracle jdk team来使用,不过由于这些类应用太广泛了,为了向后兼容,java9做了妥协,只是将这些类归到了jdk.unsupported模块...requires java.base mandated opens sun.misc opens sun.reflect 删除的类 java9删除了sun.misc.BASE64Encoder,这种情况只能改用其他...使用services来实现optional依赖 services特别适合用来解耦调用方与实现类依赖的问题,如果接口有多种实现类,调用方不必要requires所有的实现类,只需要requires接口即可...上面的做法是在原来module-info.java里头去做修改,另外一种是在执行java或javac的时候通过指定的命令来修改原来的关系。比如 java ...

    1.4K10

    jnaerator:JNA框架下向动态库传递Java Object(即动态库JNI方式访问java对象)

    熟悉JNA的童鞋都知道,通过JNA可以向动态库传递(或从动态库返回)com.sun.jna.Structure为基类的对象,在动态库一层,会把Structure解析为结构C语言的struct或union...,jnaerator可以将C语言定义的struct或union自动生成继承Structure的 java类。...但有的时候,我们希望java层与动态库直接传递Java对象,动态库以JNI方式访问java层传递的Java对象,或直接返回java对象给java层,JNA可以实现么?...如下是com.sun.jna.Function类的invoke系列方法的其中一个定义,其中options参数允许指定函数调用时的一些特别要求: ?...这些特别要求中就有一个我们本次任务中要用到的选项: com.sun.jna.Library.OPTION_ALLOW_OBJECTS 该选项是个布尔值,为true时允许任何Java对象作为输入参数或返回值

    1.2K20

    【关关的刷题日记60】Leetcode 437. Path Sum III

    关关的刷题日记60 – Leetcode 437. Path Sum III 题目 题目的意思是给定一个二叉树,让我们找到路径节点和等于给定值的路径的个数。...这里的路径不一定是从根节点到叶子节点,可以是其中的一段,但是必须是自上而下的顺序。 思路 思路:这题目不好做,涉及到递归的嵌套。...一棵树中满足路径节点和等于给定值的路径的个数,等于以这棵树的根节点为路径源头的满足要求的个数,加上它的左右子树中满足要求的树的个数。...以这棵树的根节点为路径源头的满足要求的个数的做法,同关关的刷题日记58 – Leetcode 112 Path Sum中的做法一样,只不过不是到叶子节点,才判断节点值是否与sum值相等,而是路径中的任一点都可以...以上就是关关关于这道题的总结经验,希望大家能够理解,有什么问题可以在我们的专知公众号平台上交流或者加我们的QQ专知-人工智能交流群 426491390,也可以加入专知——Leetcode刷题交流群(请先加微信小助手

    77690

    Java面试:2021.05.16(周末愉快!)

    注意:在finally中改变返回值的做法是不好的,因为如果存在finally代码块,try中的return语句不会立马返回调用者,而是记录下返回值待finally代码块执行完毕之后再向调用者返回其值,然后如果在...这里复用代码的方式应该是Has-A关系而不是Is-A关系,另一方面容器都属于工具类,继承工具类本身就是一个错误的做法,使用工具类最好的方式是Has-A关系(关联)或Use-A关系(依赖)。...需要注意的是:子类一定是增加父类的能力而不是减少父类的能力,因为子类比父类的能力更多,把能力多的对象当成能力少的对象来用当然没有任何问题。) 接口隔离原则:接口要小而专,绝不能大而全。...(通过继承来复用代码是面向对象程序设计中被滥用得最多的东西,因为所有的教科书都无一例外的对继承进行了鼓吹从而误导了初学者,类与类之间简单的说有三种关系,Is-A关系、Has-A关系、Use-A关系,分别代表继承...,需要说明的是,即使在Java的API中也有不少滥用继承的例子,例如Properties类继承了Hashtable类,Stack类继承了Vector类,这些继承明显就是错误的,更好的做法是在Properties

    43520

    Java IAQ:很少被回答的问题

    但是要注意来自Sun的警告“:你什么时候应该使用静态导入?一定要谨慎!”...下面是一些针对Java1.5之前版本的解决方案: Just Java的作者Peter van der Linden在他的FAQ中反对上述最后两种做法。...大多数情况下,我也认为Math m = null 是一种糟糕的做法,但我不认同MyStaticMethods 的例子是一种“为了使用可有可无的缩写(不如直接用类别层级的方式进行表示)而导致缺乏面向对象风格的继承做法...我同意MyClass1继承MyStaticMethods这种做法会误导用户以为MyClass1继承了一些来自MyStaticMethods的方法,并且我也赞同这样做会无法继承真正需要的类,这也是不好的。...并且,如果你使用的是JIT类的编译器,那么生成代码也会产生一些额外的字节。 在Sun 的JDK VM中,你也许会感到很吃惊,一个Object会占用16字节,或是4字大小。

    62220

    Java工程师必须要知道的JVM命令行标志

    System.gc();   明确的垃圾收集是一个很不好的想法——就像把你和一条疯狂的斗牛狗锁在一个电话亭里。...所有的清除比一个普通的GC操作要花费数个数量级,这只是个简单的数学问题。   ...除了Sun/Oracle之外,没有任何VM支持所有命令行标志。找出支持标志的最佳方式就是尝试一下,看看它是否能正常工作。如果从技术上讲,这些标志不受支持,那么使用它们就完全由你负责。...不但要报告类何时装入,还要报告类从哪里装入,包括JAR的路径(如果来自JAR)。   jni几乎不用,除非是使用JNI或者本地库。...JVM命令行选项经常会更改,所以定期检查是个好主意。   实际上,命令行标志并非是用来永久使用的。然而,如果使用命令行标志作为一种工具来研究完全不透明的虚拟机的内部工作,仍然是很有用的。

    33920

    简述一下面向对象的”六原则一法则”

    这个世界上任何好的东西都有两个特征,一个是功能单一,好的相机绝对不是电视购物里面卖的那种一个机器有一百多种功能的,它基本上只能照相;另一个是模块化,好的自行车是组装车,从减震叉、刹车到变速器,所有的部件都是可以拆卸和重新组装的...需要注意的是:子类一定是增加父类的能力而不是减少父类的能力,因为子类比父类的能力更多,把能力多的对象当成能力少的对象来用当然没有任何问题。) 接口隔离原则:接口要小而专,绝不能大而全。...Java中的接口代表能力、代表约定、代表角色,能否正确的使用接口一定是编程水平高低的重要标识。) 合成聚合复用原则:优先使用聚合或合成关系复用代码。...(通过继承来复用代码是面向对象程序设计中被滥用得最多的东西,因为所有的教科书都无一例外的对继承进行了鼓吹从而误导了初学者,类与类之间简单的说有三种关系,Is-A关系、Has-A关系、Use-A关系,分别代表继承...,需要说明的是,即使在Java的API中也有不少滥用继承的例子,例如Properties类继承了Hashtable类,Stack类继承了Vector类,这些继承明显就是错误的,更好的做法是在Properties

    80520

    面向对象的六原则一法则

    这个世界上任何好的东西都有两个特征,一个是功能单一,好的相机绝对不是电视购物里面卖的那种一个机器有一百多种功能的,它基本上只能照相;另一个是模块化,好的自行车是组装车,从减震叉、刹车到变速器,所有的部件都是可以拆卸和重新组装的...需要注意的是:子类一定是增加父类的能力而不是减少父类的能力,因为子类比父类的能力更多,把能力多的对象当成能力少的对象来用当然没有任何问题。)- 接口隔离原则:接口要小而专,绝不能大而全。...Java中的接口代表能力、代表约定、代表角色,能否正确的使用接口一定是编程水平高低的重要标识。)- 合成聚合复用原则:优先使用聚合或合成关系复用代码。...(通过继承来复用代码是面向对象程序设计中被滥用得最多的东西,因为所有的教科书都无一例外的对继承进行了鼓吹从而误导了初学者,类与类之间简单的说有三种关系,Is-A关系、Has-A关系、Use-A关系,分别代表继承...,需要说明的是,即使在Java的API中也有不少滥用继承的例子,例如Properties类继承了Hashtable类,Stack类继承了Vector类,这些继承明显就是错误的,更好的做法是在Properties

    44620

    Java的jps命令使用详解

    jps命令简介 jps(Java Virtual Machine Process Status Tool)是JDK提供的一个可以列出正在运行的Java虚拟机的进程信息的命令行工具,它可以显示Java虚拟机进程的执行主类...另外,jps命令只能显示它有访问权限的Java进程的信息。 虽然jps命令的功能比较单一,但它使用的频率却很高。...对于本地虚拟机来说,本地虚拟机唯一ID和操作系统的进程ID(PID,Process Identifier)是一致的,如果同时启动多个Java虚拟机进程,无法根据进程名称确定某个进程,我们就是使用jps命令显示主类名称的功能区分出来...-mlvV:我们可以指定这些参数的任意组合。 -m:显示Java虚拟机启动时传递给main()方法的参数。 -l:显示主类的完整包名,如果进程执行的是JAR文件,也会显示JAR文件的完整路径。...59014 sun.tools.jps.Jps -lm 90267 sun.tools.jstat.Jstat -gc 15729 1000 结尾 虽然jps命令已经推出很久并且使用频率很高,但它仍然是一个

    6.5K41

    吃透这套BAT大厂Java面试题,拿offer成功率再翻一番

    所以 Java 程序运行时比较高效,而且,由于字节码并不专对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同的计算机上运行。...它拥有 JRE 所拥有的一切,还有编译器(javac)和工具(如 javadoc 和 jdb)。它能够创建和编译程序。 JRE 是 Java 运行时环境。... Java 有自动内存管理机制,不需要程序员手动释放无用内存 六、什么是 Java 程序的主类 应用程序和小程序的主类有何不同 一个程序中可以有多个类,但只能有一个类是主类。...在 Java 应用程序中,这个主类是指包含 main()方法的类。而在 Java 小程序中,这个主类是一个继承自系统类 JApplet 或 Applet 的子类。...应用程序的主类不一定要求是 public类,但小程序的主类要求必须是 public 类。主类是 Java 程序执行的入口点。 七.

    51730

    Java类加载原理与ClassLoader使用总结

    其实是因为ClassLoader这个类是一个抽象类,实际在使用时候会写个子类,这个方法会按照需要被重写,来完成业务需要的加载过程。...自定义ClassLoader 在自定义ClassLoader的子类时候,我们常见的会有两种做法,一种是重写loadClass方法,另一种是重写findClass方法。...个人认为比较好的做法其实是只在findClass里重写自定义类的加载方法。...因此我们最好是在双亲委托模型框架内进行小范围的改动,不破坏原有的稳定结构。...当然是有的,前面之所以不能直接用类名引用是因为原生类的类加载器是systemClassLoader,而从class文件创建的类的类加载器是自定义的classLoader,这两个类本质不一样,因此才不能互相强制转换

    28740

    深入探讨 Java 类加载器

    它是 sun.misc.Launcher$AppClassLoader类的实例;第二个输出的是扩展类加载器,是 sun.misc.Launcher$ExtClassLoader类的实例。...它的实现与 FileSystemClassLoader类似。在通过 NetworkClassLoader加载了某个版本的类之后,一般有两种做法来使用它。第一种做法是使用 Java 反射 API。...另外一种做法是使用接口。需要注意的是,并不能直接在客户端代码中引用从服务器上下载的类,因为客户端代码的类加载器找不到这些类。使用 Java 反射 API 可以直接调用 Java 类的方法。...而使用接口的做法则是把接口的类放在客户端中,从服务器上加载实现此接口的不同版本的类。在客户端通过相同的接口来使用这些实现类。网络类加载器的具体代码见 下载。...这与一般类加载器的顺序是相反的。这是 Java Servlet 规范中的推荐做法,其目的是使得 Web 应用自己的类的优先级高于 Web 容器提供的类。

    60320

    深入探讨 Java 类加载器

    它是 sun.misc.Launcher$AppClassLoader类的实例;第二个输出的是扩展类加载器,是 sun.misc.Launcher$ExtClassLoader类的实例。...它的实现与 FileSystemClassLoader类似。在通过NetworkClassLoader加载了某个版本的类之后,一般有两种做法来使用它。第一种做法是使用 Java 反射 API。...另外一种做法是使用接口。需要注意的是,并不能直接在客户端代码中引用从服务器上下载的类,因为客户端代码的类加载器找不到这些类。使用 Java 反射 API 可以直接调用 Java 类的方法。...而使用接口的做法则是把接口的类放在客户端中,从服务器上加载实现此接口的不同版本的类。在客户端通过相同的接口来使用这些实现类。网络类加载器的具体代码见 下载。...这与一般类加载器的顺序是相反的。这是 Java Servlet 规范中的推荐做法,其目的是使得 Web 应用自己的类的优先级高于 Web 容器提供的类。

    77340

    Java编程常见问题汇总3

    这里本意是希望用当前类来加载希望的对象, 但是这里的getClass()可能抛出异常, 特别在一些受管理的环境中, 比如应用服务器, web容器, Java WebStart环境中, 最好的做法是使用当前应用上下文的类加载器来加载...当然这里又涉及到另外一个OO设计的问题, 对外暴露Date实例本身就是不好的做法(一般的做法是在setter方法中设置Date引用参数的clone对象)....使用全局参数配置常量类/接口 ? 很多应用都会定义这样一个全局常量类或接口, 但是为什么这种做法不推荐? 因为这些常量之间基本没有任何关联, 只是因为公用才定义在一起....但是如果其他组件需要使用这些全局变量, 则必须对该常量类产生依赖, 特别是存在server和远程client调用的场景。 比较好的做法是将这些常量定义在组件内部. 或者局限在一个类库内部。...通常绝不要对float和double使用==操作. 而采用大于和小于操作. 如果java编译器能针对这种情况给出警告. 或者在java语言规范中不支持浮点数类型的==操作就最好了。 正确的写法: ?

    51220
    领券