返回顶部
首页 > 资讯 > 精选 >Java的使用优势实例分析
  • 373
分享到

Java的使用优势实例分析

2023-06-27 10:06:05 373人浏览 安东尼
摘要

这篇文章主要介绍了Java的使用优势实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java的使用优势实例分析文章都会有所收获,下面我们一起来看看吧。new个对象new一个对象,是我们在编程中最常用的操作

这篇文章主要介绍了Java的使用优势实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java的使用优势实例分析文章都会有所收获,下面我们一起来看看吧。

new个对象

new一个对象,是我们在编程中最常用的操作之一,让我们先看下如何在Javanew一个对象。

List<String> list =new ArrayList<String>();list.add("hello world");

Java中,我们需要定义一个变量,然后通过new关键字声明一个ArrayList<String>的示例,这样我们就可以使用他了。

但是在Kotlinnew一个对象会更简洁。

var list:ArrayList<String> = ArrayList<String>()

直接省略了new关键字即可。

类型推断

对于以上的Kotlin代码,我们完全可以省略掉变量 : 后面的类型声明,因为kotlin可以自己推断出来。

val list = ArrayList<String>()

是不是觉得更简洁了?我们开发的效率也更高了。

空指针安全

Java中,变量,方法的参数等都是可以为null的,但是在Kotlin中默认是不允许的,通过这种强制的限制,更好的避免空指针异常。

var list = ArrayList<String>()list = null

以上代码,在编译期你会得到一个错误提示:

Null can not be a value of a non-null type ArrayList<String>

如果我们的确需要null赋值怎么做呢?在Kotlin中需要开发者自己显示声明才可以。

var list:Array<String>? = null

如上所示,在类型后加 ? 即可。但是注意,我们不提倡这种做法,在实际的开发中,你会发现 ? 大部分都是为了兼容Java代码使用的。

属性

我们通常会把数据和对数据的处理封装到一个类中,如果类中有私有字段,我们还需要提供gettersetter方法提供访问和修改字段的方法。

//Person.javapublic  class Person {  private String name;  public String getName() {    return name;  }  public void setName(String name) {    this.name = name;  }}//Main.javapublic static void main(String[] args) {  Person p = new Person();  p.setName("张三");  System.out.println(p.getName());}

以上是我们通过Java实现的一个Person类,并且定义了 name 私有字段,同时提供了gettersetter方法,这样我们才能够使用它。

通过以上代码,大家可以看到,我们为了实现一个 name 的存储,写了很多代码,如果一个类存在很多字段,我们会写更多的不必要的gettersetter方法。

现在我们看在Kotlin中如何实现上面的功能。

//Person.ktclass Person {  var name:String = ""}//main.ktfun main(){  val p = Person()  p.name = "张三"  println(p.name)}

是的,就是这么简单,只需要这么几行代码,就可以实现和Java一样的功能,因为Kotlin可以帮我们自动的生成gettersetter这些模板代码,就省了我们很多事情,大大的提高了我们的开发效率,并且整个代码也更简洁。

这里需要注意的是,如果字段是val声明的,那么只会生成getter方法,因为val是不可修改的,等价于Java中的final修饰符;如果字段是var的,可以同时生成gettersetter方法,这时候就可以对字段赋值了。

数据类

Kotlin的简洁不仅仅体现在gettersetter方法上,还有数据类。一个数据类是一个数据容器,它用来存放数据。

一个好的数据类的声明,不仅有私有的字段、gettersetter方法,还要有toStringequalshashCode方法的实现,以便对他们进行打印、比较以及更好的储存在map中。

还是以Person类为例,一个合格的数据类代码如下:

public static  class Person {  private String name;  public Person(String name) {    this.name = name;  }  public String getName() {    return name;  }  public void setName(String name) {    this.name = name;  }  @Override  public boolean equals(Object o) {    if (this == o) return true;    if (o == null || getClass() != o.getClass()) return false;    Person person = (Person) o;    return Objects.equals(name, person.name);  }  @Override  public int hashCode() {    return name != null ? name.hashCode() : 0;  }  @Override  public String toString() {    return "Person{" +      "name='" + name + '\'' +      '}';  }}

看下我们Java的实现,需要有这么30多行代码才能实现。如果我们使用Kotlin会是怎样的呢?

data class Person(val name: String) {}

只需要这么一行代码,以上的Java功能都会实现,这里的关键在于一个 data 修饰符,是不是很酸爽。

并发

Kotlin提供了协程来实现并发,相比JavaThreadExecutor等来说,它更轻便,简洁。我们对比下并发的基本实现。

public static void main(String[] args) throws InterruptedException {  new MyThread().start();  System.out.println(Thread.currentThread().getName()+":main");  //保证JVM存活  Thread.sleep(1000);}private static class MyThread extends Thread{  @Override  public void run() {    try {      Thread.sleep(500);      System.out.println(Thread.currentThread().getName()+":Thread");    } catch (InterruptedException e) {      e.printStackTrace();    }  }}

运行查看输出,我们发现MyThread并没有阻塞main的执行,也就是并发了。

main:mainThread-0:Thread

但是要注意到,Java使用了两个线程,一个是main,一个是Thread-0。同样的功能,我们现在使用kotlin实现下:

fun main(){  runBlocking {    launch {      delay(500)      println("${Thread.currentThread().name}:Thread")    }    println("${Thread.currentThread().name}:main")  }}

相比Java来说更简洁,而且我们看下打印的输出:

main:mainmain:Thread

竟然是在同一个线程上实现的并发,少了一个线程的申请开销,效率更高,这也是kotlin提出协程的概念。如果我们不想让它在main线程上执行,可以通过切换调度器来实现。

launch(Dispatchers.IO)

只需要把上面的代码的launch换成launch(Dispatchers.IO)即可,这样调度器就给我们分配了一个IO线程池来执行我们的代码。如果我们使用Java来实现,要自己定义线程池,还要提交Runnable,整个代码是非常多的。

main:mainDefaultDispatcher-worker-1:Thread

kotlin的协程非常强大和简洁,通过以上的例子,不能完全展示它的特性,剩下的如协程上下文、调度器、Flow、通道等能力大家可以自己摸索。

关于“Java的使用优势实例分析”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Java的使用优势实例分析”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: Java的使用优势实例分析

本文链接: https://lsjlt.com/news/309858.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java的使用优势实例分析
    这篇文章主要介绍了Java的使用优势实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java的使用优势实例分析文章都会有所收获,下面我们一起来看看吧。new个对象new一个对象,是我们在编程中最常用的操作...
    99+
    2023-06-27
  • Java的接口使用实例分析
    这篇文章主要介绍了Java的接口使用实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java的接口使用实例分析文章都会有所收获,下面我们一起来看看吧。接口一图流接口的概念以及一些知识点汇总接口(英文:In...
    99+
    2023-06-30
  • Java继承使用实例分析
    本篇内容介绍了“Java继承使用实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!继承继承就是子类继承父类的特征和行为,使得子类对象(实...
    99+
    2023-06-29
  • Java泛型使用实例分析
    本篇内容主要讲解“Java泛型使用实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java泛型使用实例分析”吧!1.概述作为一个面向对象的编程语言,Java可以通过实现一些类,作为我们各种...
    99+
    2023-06-29
  • Java中Pattern使用实例分析
    这篇文章主要介绍“Java中Pattern使用实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java中Pattern使用实例分析”文章能帮助大家解决问题。1. 正则表达式的应用在给用户发送消...
    99+
    2023-07-02
  • Java方法使用实例分析
    这篇“Java方法使用实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java方法使用实例分析”文章吧。一、方法的概念...
    99+
    2023-06-30
  • Node.js中path.join()优势例举分析
    您可能想知道为什么要使用 path.join() 方法而不是字符串拼接。 '/path' + '/' + 'to' + '/' + 'test.txt' // '/path/to...
    99+
    2024-04-02
  • Java新特性使用实例分析
    这篇文章主要介绍“Java新特性使用实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java新特性使用实例分析”文章能帮助大家解决问题。枚举:尽管在 JDK 5 中增加了枚举类型,但是 Cla...
    99+
    2023-06-27
  • Java Map集合使用实例分析
    这篇文章主要讲解了“Java Map集合使用实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java Map集合使用实例分析”吧!Map接口   ...
    99+
    2023-06-30
  • Java数组的使用方法实例分析
    这篇文章主要介绍“Java数组的使用方法实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java数组的使用方法实例分析”文章能帮助大家解决问题。一、前言学习概述:前八天我们学习了语法基础、运算...
    99+
    2023-06-30
  • Java的Lambda表达式使用实例分析
    这篇文章主要讲解了“Java的Lambda表达式使用实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java的Lambda表达式使用实例分析”吧!Lambada 简介lambda 表达...
    99+
    2023-07-05
  • Java泛型使用入门实例分析
    本文小编为大家详细介绍“Java泛型使用入门实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java泛型使用入门实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1、什么是泛型泛型其实就是将类型作为参...
    99+
    2023-06-29
  • Redis的使用实例分析
    这篇文章主要介绍“Redis的使用实例分析”,在日常操作中,相信很多人在Redis的使用实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis的使用实例分析”的疑惑...
    99+
    2024-04-02
  • Vuex的使用实例分析
    这篇文章主要介绍“Vuex的使用实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vuex的使用实例分析”文章能帮助大家解决问题。 Vuex 简介 1. 概...
    99+
    2024-04-02
  • Java正则表达式使用实例分析
    这篇文章主要介绍“Java正则表达式使用实例分析”,在日常操作中,相信很多人在Java正则表达式使用实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java正则表达式使用实例分析”的疑惑有所帮助!接下来...
    99+
    2023-06-29
  • java二叉搜索树使用实例分析
    本篇内容主要讲解“java二叉搜索树使用实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java二叉搜索树使用实例分析”吧!概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性...
    99+
    2023-06-29
  • WebSocket使用实例分析
    本文小编为大家详细介绍“WebSocket使用实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“WebSocket使用实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。...
    99+
    2024-04-02
  • CSS3使用实例分析
    这篇文章主要介绍“CSS3使用实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“CSS3使用实例分析”文章能帮助大家解决问题。 1、前缀-webkit-(ch...
    99+
    2024-04-02
  • class使用实例分析
    这篇文章主要介绍“class使用实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“class使用实例分析”文章能帮助大家解决问题。 看到class实际都是使用...
    99+
    2024-04-02
  • slot使用实例分析
    这篇文章主要介绍“slot使用实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“slot使用实例分析”文章能帮助大家解决问题。   使用slot场景一:  ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作