onJava8
“onJava8“是我在优快云上开设的专栏,主要用于分享和管理我在学习Java过程中的一些思考和经验。在这个专栏中,我会分享一些Java8的新特性以及如何在项目中应用它们的经验,还会介绍一些Java编程技巧和最佳实践。我希望这个专栏能够帮助更多的人学习和掌握Java编程,同时也欢迎大家在评论区留言
TaylorChyi
| 东北大学 | 软件工程 |
| UCL | Health Informatics |
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
如何在 VSCode 中禁止滚动超出最后一行
在默认的VSCode设置中,当你滚动到一个文件的最后一行时,你还可以继续向下滚动,将最后一行代码滚动到编辑器窗口的上方。VSCode是一款强大的代码编辑器,其自定义设置的灵活性使得每个开发者都能根据自己的习惯配置出最合适的工作环境。通过上述简单的步骤,你就可以实现禁止在VSCode中滚动超出最后一行的设置。点击左上角的 “文件(File)” 菜单,然后选择 “首选项(Preferences)”,在弹出的子菜单中选择 “设置(Settings)”。你只需要取消这个选项的勾选,就可以禁止滚动超出最后一行了。原创 2023-05-14 21:25:15 · 1123 阅读 · 0 评论 -
抽象方法与接口在概念上的异同
在一定程度上,我是否可以理解为一个父类中的抽象方法就是这个父类承诺的这个类的子类们自身要实现的所有方法,如果将接口比喻成一个标签用以表示一个类承诺实现了这个标签所代表的所有方法,那么抽象方法本身也是一种形式的标签。与接口相比,抽象方法在父类中定义,而接口是一种独立的结构,可以被多个类实现。接口也可以看作是一种"标签",表示实现了该接口的类承诺实现了接口中定义的所有方法。标签: #Java #抽象类 #抽象概念 #接口 #约束机制 #继承 #抽象方法 #父类 #子类。时间:2023-04-14。原创 2023-05-13 00:26:04 · 86 阅读 · 0 评论 -
抽象类的目的和作用
在这种模式中,抽象类定义了一个算法的框架,将一些具体的实现步骤延迟到子类中。这样,子类可以在不改变算法结构的情况下,重定义某些特定的实现步骤。:抽象类可以包含一些共享的状态(属性)和方法实现,这些代码可以被子类继承和复用。这样,我们可以把一些通用的功能放在抽象类中,减少重复代码,提高代码的可维护性。:抽象类可以包含抽象方法,这些方法定义了子类应该实现的接口规范。:抽象类可以作为一种多态机制的实现手段。通过让子类重写抽象类中的方法,我们可以在运行时通过抽象类引用实际的子类对象,实现动态绑定和多态行为。原创 2023-05-09 10:28:24 · 897 阅读 · 0 评论 -
在 VS Code 中使用 Spring Boot Extension Pack 创建 Spring Boot 项目
在命令面板中输入 “Spring Initializr”,然后选择 “Spring Initializr: Generate a Maven Project”(或 “Spring Initializr: Generate a Gradle Project”,取决于你喜欢的构建工具)。至此,你已经使用 VS Code 的 Spring Boot Extension Pack 创建了一个 Spring Boot 项目。输入 Group ID,这通常是你的公司或项目的域名反转,例如 “com.example”。原创 2023-05-09 10:26:41 · 1180 阅读 · 0 评论 -
构造器中调用动态绑定方法的隐患
这些bug隐蔽的原因是,程序员可能没有意识到在构造器中调用动态绑定方法会导致这样的问题,而且问题表现为数据不一致,这使得在调试时难以发现问题的根源。因此,在构造器中调用动态绑定方法可能导致难以追踪和定位的bug。如果在构造器中调用了动态绑定方法,就会用到那个方法的重写定义。然而,调用的结果难以预料因为被重写的方法在对象被完全构造出来之前已经被调用,这使得一些 bug 很隐蔽,难以发现。调用构造器中动态绑定方法的结果难以预料,是因为在对象完全构造出来之前,重写的方法就已经被调用。类的构造器尚未执行,原创 2023-04-30 04:38:37 · 112 阅读 · 0 评论 -
多态与接口的实际生产案例
通过这个例子,我们可以看到多态和接口在实际生产中的应用,以及它们是如何提高代码的灵活性和可扩展性的。以下是一个简化的网球场地预约系统的例子,以展示多态和接口在实际生产中的应用。在实际生产中,我们可以利用这种设计更轻松地添加新的支付方式,例如。多态使得我们可以将不同支付方式的实现类对象赋值给。接下来,我们为不同的支付方式创建实现类,例如。类提供了具体的实现。类型的引用,从而在运行时动态调用正确的方法。在这个例子中,我们使用了接口和多态的概念。类添加新的支付方式,而不需要修改。等,只需要创建新的实现类并实现。原创 2023-04-30 04:37:32 · 160 阅读 · 0 评论 -
多态的实现机制
对于继承自父类的方法,子类中若有重写的方法,虚方法表中的对应条目将被子类方法替换。当我们通过一个引用调用一个方法时,JVM会根据引用的实际对象类型查找对应的虚方法表,然后调用表中对应的方法。我注意到上述的代码中 sup.field = 0, sup.getField() = 1,这样我对于 Java 底层实现多态的机制有些迷惑,他是如何确定到底是哪个方法要被执行的呢,是否是有个存储方法的栈之类的呢?要注意的是,多态仅适用于方法调用,不适用于字段访问。然而,只有普通的方法调用可以是多态的。原创 2023-04-30 04:37:01 · 136 阅读 · 0 评论 -
如何查看项目有没有使用spring boot框架
在项目的 pom.xml 文件中查找是否存在 spring-boot-starter-parent 或 spring-boot-starter-web 等 Spring Boot 相关的依赖。在上述示例代码中,可以看到该项目的父依赖为 spring-boot-starter-parent,并且项目依赖了 spring-boot-starter-web,这表明该项目是一个基于 Spring Boot 框架构建的 Web 项目。标签: #java #spring #SpringBoot。原创 2023-04-30 04:36:59 · 3939 阅读 · 0 评论 -
为什么不使用接口实现eat方法
例如,如果Animal类包含一些共享的状态(属性)和方法实现,那么使用继承将使我们能够更轻松地在子类中复用这些共享代码。总之,在确定是否使用接口或继承时,需要考虑类之间的关系、代码重用、以及预期的扩展性。根据具体情况,我们可能会选择实现接口,或者继承一个基类,或者同时使用这两种方法。如果我们认为 Animal 类不需要包含任何默认实现或共享状态(属性),那么使用接口可能是一个更合适的选择。在某些情况下,使用接口确实是一个更好的选择,尤其是当我们希望保证类遵循某个特定的约定(比如具有。原创 2023-04-30 04:34:51 · 138 阅读 · 0 评论 -
为什么Integer.toString(i)是静态方法而不是i.toString()
设计为静态方法,主要是为了解决基本类型与包装类之间的差异,提高性能,并提供更简便的使用方式。是基本类型,而非对象。基本类型没有方法,因此不能像对象一样调用方法(如。类型值转换为字符串表示时,使用静态方法可以避免创建不必要的。:静态方法可以直接使用类名调用,而无需创建对象。标签: #Java #Integer #静态方法。这会产生额外的对象创建和垃圾回收开销。为了解决这个问题,Java提供了。包装类,它包含一些静态方法,如。时间:2023-04-18。原创 2023-04-24 07:12:47 · 254 阅读 · 0 评论 -
访问说明符
默认(没有访问说明符,也称为“包访问级别”或“友元访问级别”):当不使用任何访问说明符时,类、方法或属性对同一个包(package)中的其他类是可见的和可访问的。:受保护访问级别,表示类、方法或属性对同一个包(package)中的其他类和所有子类是可见的和可访问的。访问说明符使得开发人员能够在类的设计中明确地定义哪些部分可以被其他类访问,哪些部分应该对外部隐藏。:公共访问级别,表示类、方法或属性对所有其他类都是可见的和可访问的。:私有访问级别,表示类、方法或属性只能被其所在类访问。原创 2023-04-24 07:12:31 · 282 阅读 · 0 评论 -
简单了解StringBuffer
是一个可变字符串类,用于处理可修改的字符串。与String类不同,允许在原地修改字符串内容,而不是创建新的字符串对象。这在某些场景下,特别是需要频繁修改字符串内容的情况下,可以大大提高性能。原创 2023-04-24 07:10:54 · 181 阅读 · 0 评论 -
默认包访问权限的正确分词
默认包访问权限"应该分词为"默认"和"包访问权限”。在 Java 中,如果没有为类或类的成员指定访问修饰符(如 public、private、protected),那么它们将具有默认的包访问权限。这意味着这些成员只能被同一个包中的其他类访问,而不能被其他包中的类访问。这种访问级别在某些情况下可以为隐藏类的实现细节提供足够的保护。时间:2023-04-12。标签: #Java #概念。原创 2023-04-14 21:08:03 · 181 阅读 · 0 评论 -
客户端程序员概念
当你创建一个类、库或框架时,你可能会为其他程序员提供一组 API(应用程序编程接口),以便他们能够轻松地使用你的代码来实现特定功能。客户端程序员会基于你提供的 API 编写他们自己的代码,而不需要了解你代码的内部实现细节。在这个上下文中,"客户端"并不是指一个运行在用户设备上的应用程序,而是指那些依赖于你提供的代码的其他程序员或他们编写的代码。因此,当我们在之前的回答中讨论客户端程序员时,我们是指那些使用你提供的类、库或框架的其他程序员,他们需要依赖于你提供的 API 来实现他们的需求。原创 2023-04-14 21:07:24 · 243 阅读 · 0 评论 -
为什么在用vscode运行代码的时候没有生成class文件[onJava8] [GPT-4]
文件通常存储在内存中,并不会直接在文件系统中生成。这使得运行 Java 代码更加高效,因为不需要频繁地读写磁盘。这也是为什么你在项目目录下没有看到。请注意,这种做法会在磁盘上生成额外的文件,可能会影响性能。在开发过程中,通常不需要将。在使用 VSCode 编写并运行 Java 代码时,默认情况下,编译生成的。标签: #VSCode #Java #Class。你可以根据自己的需求更改该值。但是,如果你希望查看或保存生成的。现在,在你指定的输出文件夹(如。)中,你应该能够看到生成的。原创 2023-04-14 21:06:49 · 3341 阅读 · 0 评论 -
编写构造器的一条良好规范[onJava8] [GPT-4]
做尽量少的事让对象进入良好状态。如果有可能的话,尽量不要调用类中的任何方法。在基类的构造器中能安全调用的只有基类的。这些方法不能被重写,因此不会产生意想不到的结果。你可能无法永远遵循这条规范,但应该朝着它努力。方法(这也适用于可被看作是。原创 2023-04-14 21:05:40 · 145 阅读 · 0 评论 -
多态与接口的实际生产案例[onJava8] [GPT-4]
通过这个例子,我们可以看到多态和接口在实际生产中的应用,以及它们是如何提高代码的灵活性和可扩展性的。以下是一个简化的网球场地预约系统的例子,以展示多态和接口在实际生产中的应用。在实际生产中,我们可以利用这种设计更轻松地添加新的支付方式,例如。多态使得我们可以将不同支付方式的实现类对象赋值给。接下来,我们为不同的支付方式创建实现类,例如。类提供了具体的实现。类型的引用,从而在运行时动态调用正确的方法。在这个例子中,我们使用了接口和多态的概念。类添加新的支付方式,而不需要修改。等,只需要创建新的实现类并实现。原创 2023-04-14 21:05:02 · 125 阅读 · 0 评论 -
一条通用准则[onJava8] [GPT-4]
使用继承表达行为的差异,使用属性表达状态的变化。原创 2023-04-14 21:04:28 · 93 阅读 · 0 评论 -
Java中static、final和private方法为什么不是动态绑定[onJava8] [GPT-4]
因此,当调用静态方法时,编译器可以在编译时确定要调用哪个类的静态方法。因此,当调用一个private方法时,编译器可以在编译时确定要调用的具体实现。这意味着,当调用一个final方法时,编译器可以确保在编译时确定要调用的具体实现,而无需等到运行时去查找。在Java中,静态方法、final方法和private方法(隐式final)都不是动态绑定的,而是静态绑定的。综上所述,由于静态方法、final方法和private方法在编译时就可以确定具体的实现,它们不需要动态绑定,而是采用静态绑定。原创 2023-04-14 21:03:58 · 270 阅读 · 0 评论 -
向上转型的概念[onJava8] [GPT-4]
因为是从一个更具体的类转化为一个更一般的类,所以向上转型永远是安全的。也就是说,派生类是基类的一个超集。它可能比基类包含更多的方法,但它必须至少具有与基类一样的方法。在向上转型期间,类接口只可能失去方法,不会增加方法。这就是为什么编译器在没有任何明确转型或其他特殊标记的情况下,仍然允许向上转型的原因。继承图中派生类转型为基类是向上的,所以通常称作==时间:2023-04-12。标签: #Java #概念。原创 2023-04-14 21:01:58 · 153 阅读 · 0 评论 -
在开发过程中应该如何管理枚举类型数据[onJava8] [GPT-4]
通过以上方法,我们可以更好地管理项目中的枚举类型数据,提高代码的可读性和可维护性。因此,在实际项目开发中,我们应该根据业务需求和功能模块来组织枚举类型,以提高代码的可读性、可维护性和易用性。文档注释:为每个枚举类型编写文档注释,解释枚举类型的用途和各个值的含义。提高代码可读性:将枚举类型根据业务需求和功能模块分组,有助于提高代码的可读性,使其他开发人员更容易理解项目的业务逻辑。更好的代码组织:将相关的枚举类型放在同一个包中,可以让代码结构更加清晰,便于开发人员快速找到所需的枚举类型。原创 2023-04-12 11:09:47 · 393 阅读 · 0 评论 -
使用 Java 中的 var 关键字简化代码[onJava8] [GPT-4]
时间:2023-04-12标签: #Java #JDK10Java 10 引入了一个新的关键字var,用于支持局部变量类型推断。本文将探讨使用var的优点、局限性以及在实际代码中的应用。原创 2023-04-12 11:13:05 · 751 阅读 · 0 评论 -
基类子对象的概念和示例[onJava8] [GPT-4]
基类子对象是指在派生类对象中,与基类对应的部分。当创建一个派生类的对象时,这个对象实际上包含了基类的一个实例,这个实例被称为基类子对象。换句话说,基类子对象是派生类对象中继承自基类的那部分属性和方法。标签: #Java #继承 #基类 #派生类 #子对象。时间:2023-04-11。原创 2023-04-12 11:14:57 · 463 阅读 · 0 评论 -
为什么称之为基类子对象而不是派生类对象[onJava8] [GPT-4]
而派生类对象是一个更宽泛的概念,它包括了基类子对象和派生类特有的属性和方法。因此,在讨论继承关系中基类在派生类对象中的表现时,我们更倾向于使用“基类子对象”这个术语,以区分它与整个派生类对象的区别。我们称之为基类子对象,是为了强调这部分对象与基类的关联,以及它在派生类对象中的地位。基类子对象是派生类对象的一部分,它体现了继承关系中基类对派生类的影响。首先,我们需要明确一点:基类子对象和派生类对象是不同的概念。标签: #Java #继承 #基类 #派生类 #子对象。时间:2023-04-11。原创 2023-04-12 11:14:09 · 225 阅读 · 0 评论 -
Java 中为什么使用 super 表示父类而不是 base[onJava8] [GPT-4]
Java 的创建者 James Gosling 和他的团队在设计 Java 语言时,选择了"super"作为访问父类成员的关键字。总之,Java 中使用 super 表示父类而不是 base,主要是由于语言设计者的选择和对其他编程语言的区分。Super 这个词在英语中表示"上级"或"超级",在这个语境下,表示"父类"是合适的。这个词简洁、易懂,可以清晰地表达出父类的概念。为什么我们在 java 中使用 super 来表示父类而不是用 base,这是因为什么原因,有什么历史因素或背后的故事么。原创 2023-04-12 11:10:44 · 287 阅读 · 1 评论 -
枚举类型(Enumerate)的实际应用[onJava8] [GPT-4]
使用枚举类型可以增强代码的可读性和健壮性,因为它可以限制变量的取值范围。在系统中,我们需要处理不同状态的订单,例如已提交、已支付、已发货、已完成、已取消等。这时候,我们可以使用枚举类型来表示订单的各种状态。有了枚举类型,我们就能在代码中清晰地表达订单状态的变化,同时也限制了订单状态的取值范围,降低了出错的可能性。在处理支付相关的应用程序中,我们可能需要表示不同的支付方式,例如信用卡、支付宝、微信支付等。总之,枚举类型在日常的 Java 生产工作中非常有用,可以帮助我们编写更可读、更健壮的代码。原创 2023-04-12 11:09:06 · 319 阅读 · 1 评论 -
使用@Override注解的好处[onJava8] [GPT-4]
虽然@Override注解在Java中是可选的,但它可以提高代码的可读性,减少错误,并在重构过程中捕获潜在问题。使用@Override可以确保你的方法确实是重写父类的方法,而不是创建一个新的重载方法。在Java编程中,@Override注解确实是可选的,但它具有一定的好处,可以提高代码的可读性和减少错误。当父类或接口的方法签名发生变化时,使用@Override注解的子类方法会报编译错误。使用@Override注解表明这个方法是重写父类或实现接口的方法,这使得代码阅读者更容易理解代码的结构和意图。原创 2023-04-12 00:41:18 · 365 阅读 · 1 评论
分享