Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >初识Java

初识Java

原创
作者头像
木可大大
发布于 2018-04-25 13:22:17
发布于 2018-04-25 13:22:17
92250
代码可运行
举报
文章被收录于专栏:木可大大木可大大
运行总次数:0
代码可运行

上一期中我们聊到的面向对象的演进过程的3个发展阶段在Java中得到很好的体现,本期我就带着大家领略下Java世界的多姿多彩!

Write Once,run anywhere

为了让Java能够实现跨平台,Java的发明者们增加了一个抽象层,即JVM(Java Virtual Machine,Java虚拟机),自定义一套指令并且和硬件无关,为每个操作系统实现一套JVM,通过JVM实现了Java的跨平台。需要注意的是目前有很多语言都是在JVM上实现的,例如Scala、Groovy、Clojure、JRuby、Jython等,这些语言通过映射到JVM的指令集上就实现了在JVM上运行。

JRE和JDK之间的关系?

JRE(Java Runtime Environment),可以认为就是JVM;JDK(Java Development Kit)是Java开发工具包,它包含javac、jar、JRE,所以JDK是包含jre。

Java SE,Java EE ,Java ME之间是什么关系?

Java SE(Standard Edition,标准版),它提供了Java API;Java EE(Enterprise Edition,企业版),它包含Web相关技术(Jsp、servlet、jdbc、ebj、jtc);Java ME(Mobile Edition,移动版),考虑到SE需要很多计算机的资源,因此ME使用了SE部分功能,它在Iphone和安卓出来之前,Java ME是很火的,目前基本没人在用了。

注解(Annotation)

注解可以改变类型的定义,例如现在比较有名的lombok,它在编译源代码是修改AST(抽象语法树)来实现目标,比如说给POJO自动实现get方法、set方法和toString方法等。具体代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public @Data class Demo{
  private String name;
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface Data{
  String staticConstructor() default " ";
}

源代码编译之后:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Demo{
  private String name;
  public Demo(){
  }
  public String getName(){
    return name;
  }
  public void setName(String name){
    this.name = name;
  }
  public int hashCode(){
    ...
  }
  public String toString(){
    ...
  }

}

泛型(Generics)

为了将代码尽可能的复用,除了使用多态性以外,我们还经常使用泛型。多态是在运行时处理的,而泛型是在编译时就获取到具体的类型,同时,一旦编译完成,所有和泛型有关的类型全部擦除,这样做的好处是使用类型推导避免强制类型转换,和编译期的类型安全检查。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void test(){
  List<Integer> list = Arrays.asList(1,2,3);
  list.add(4);
  int i = list.get(0);
}

类型檫除之后,JVM完成类型转换。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void test(){
  List list = Arrays.asList(1,2,3);
  list.add(4);
  int i = (Integer)list.get(0);
}

反射(Reflection)

上面介绍的注解和泛型都是发生在编译期,而接下来要介绍的反射发生在运行时的。我们知道每个java文件都会被编译成一个.class文件,这些class文件会被JVM装入到虚拟机中,接着,JVM会把类的信息(包括父类、接口、构造函数、方法、属性等)存放到方法区中,所以,在运行时我们可以查看到类的所有信息。常见的方法有:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 获取所有级别的字段
Field[] fields = clz.getDeclaredFields();
// 获取public字段
for(int i =0;i<fields.length;i++) {
  Class type = fields[i].getType();
  System.out.println(type.getName()+" "+fields[i].getName());
}
// 获取构造器
Constructor[] constructors = clz.getDeclaredConstructors();

本期就带领大家熟悉一下Java语言几个重要特性,后面几期会详细介绍这些特性。

欢迎关注微信公众号:木可大大,所有文章都将同步在公众号上。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
5 条评论
热度
最新
有没有词法分析器语法分析器
有没有词法分析器语法分析器
回复回复点赞举报
谢谢楼主分享, 期待楼主有关gc垃圾回收相关的分享
谢谢楼主分享, 期待楼主有关gc垃圾回收相关的分享
回复回复点赞举报
JDK包含JRE的,JDK是开发包,JRE是运行环境
JDK包含JRE的,JDK是开发包,JRE是运行环境
回复回复点赞举报
java还是最好用的语言之一,不可替代
java还是最好用的语言之一,不可替代
11点赞举报
胡说,PHP才是最好的语言
胡说,PHP才是最好的语言
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
深入理解 Java 泛型
泛型要求在声明时指定实际数据类型,Java 编译器在编译时会对泛型代码做强类型检查,并在代码违反类型安全时发出告警。早发现,早治理,把隐患扼杀于摇篮,在编译时发现并修复错误所付出的代价远比在运行时小。
静默虚空
2022/03/23
4420
深入理解 Java 泛型
Java的“泛型”特性,你以为自己会了?(万字长文)
使用Java的小伙伴,对于Java的一些高级特性一定再熟悉不过了,例如集合、反射、泛型、注解等等,这些可以说我们在平时开发中是经常使用到的,尤其是集合,基本是只要写代码没有用不到的,今天我们先来谈谈泛型。
小灰
2022/09/01
4400
Java的“泛型”特性,你以为自己会了?(万字长文)
大白话说Java泛型:入门、使用、原理
远在 JDK 1.4 版本的时候,那时候是没有泛型的概念的。当时 Java 程序员们写集合类的代码都是类似于下面这样: List list = new ArrayList(); list.add("www.cnblogs.com"); list.add(23); String name = (String)list.get(0); Integer number = (Integer)list.get(1); 在代码中声明一个集合,我们可以往集合中放入各种各样的数据,而在取出来的时候就进行强制类型转换。但其
陈树义
2018/04/13
8910
java Type 详解
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/68926515
程序员徐公
2018/09/17
7580
java Type 详解
java泛型详解
语法糖指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。Java中最常用的语法糖主要有泛型、变长参数、条件编译、自动拆装箱、内部类等。虚拟机并不支持这些语法,它们在编译阶段就被还原回了简单的基础语法结构,这个过程成为解语法糖。
leobhao
2022/06/28
3560
Java 中文官方教程 2022 版(六)
大多数情况下,如果您使用单个字符值,您将使用基本的char类型。然而,有时您需要将 char 用作对象—例如,作为期望对象的方法参数。Java 编程语言为此提供了一个包装类,将char包装在Character对象中。Character类型的对象包含一个类型为char的单个字段。这个Character类还提供了许多有用的类(即静态)方法来操作字符。
ApacheCN_飞龙
2024/05/24
2940
Java 中文官方教程 2022 版(六)
java菜鸟教程+视频笔记
参考菜鸟教程:http://www.runoob.com/java/java-collections.html
全栈程序员站长
2022/07/01
1.2K0
java菜鸟教程+视频笔记
Java 中一个天天都在被人使用,但你并不知道为什么的知识点
泛型,就是泛化类型也就是泛化参数类型。平时我们在编写代码的时候,方法的参数在定义的时候都是指定特定的类型,比如 Integer,Double 或者其他自己编写的类。那么泛化类型就是,我们在编写一个方法的时候对于参数的类型不具体指定,而是定义一个通用类型,在使用的时候根据类型自动转化。
Java极客技术
2022/12/02
2430
Java 中一个天天都在被人使用,但你并不知道为什么的知识点
Java 泛型:理解和应用
这就是泛型的概念,是 Java 后期的重大变化之一。泛型实现了参数化类型,可以适用于多种类型。泛型为 Java 的动态类型机制提供很好的补充,但是 Java 的泛型本质上是一种高级语法糖,也存在类型擦除导致的信息丢失等多种缺点,我们可以在本篇文章中深度探讨和分析。
phoenix.xiao
2023/08/28
2860
Java 泛型:理解和应用
【小家Java】你真的了解Java泛型参数吗?细说java.lang.reflect.Type(ParameterizedType、TypeVariable、WildcardType...)
咋一看标题,你可能会说。不就是泛型吗,平时都使用着呢,没什么难的吧。 感觉了解了,但是真正的深入才知道自己了解甚少!
YourBatman
2019/09/03
3.2K0
【小家Java】你真的了解Java泛型参数吗?细说java.lang.reflect.Type(ParameterizedType、TypeVariable、WildcardType...)
一篇文章全面了解Java反射机制【珍藏】
Java的反射机制在实践中可谓无处不在,如果你已经工作几年,还对Java的反射机制一知半解,那么这篇文章绝对值得你读一读。
程序新视界
2020/03/27
3850
Java核心(二)注解
注解是一种特殊的接口,注解继承自 java.lang.annotation.Annotation。
青山师
2023/05/05
2060
Java基础不简单,泛型很重要!
其实在开发中经常会看到泛型的使用,但是很多人对其也是一知半解,大概知道这是一个类似标签的东西。比如最常见的给集合定义泛型。
java技术爱好者
2021/10/13
2700
Java基础不简单,泛型很重要!
Java 泛型
本文介绍了Java中的泛型机制,主要包括泛型的定义、泛型类型的变量、泛型方法以及通配符等内容。同时,还讲解了在 Java 中如何使用泛型,以及需要注意的一些问题。
IT可乐
2018/01/04
1.6K0
Java 泛型
Java 泛型详细解析
实际使用的时候就可以给这个 T 指定任何实际的类型,比如下面所示,就指定了实际类型为 LocalDate,泛型给了我们一个错觉就是通过个这个模板类 Pair<T>,我们可以在实际使用的时候动态的派生出各种实际的类型,比如这里的 Pair<LocalDate> 类。
javadaysdaysup
2024/12/01
3490
Java 泛型详细解析
JAVA泛型通配符T,E,K,V区别,T以及Class<T>,Class<?>的区别
总结下泛型的好处就是 省去了强制转换,可以在编译时候检查类型安全,可以用在类,方法,接口上
Java编程指南
2019/08/02
1.7K0
掌握8条泛型规则,打造优雅通用的Java代码
如果在添加对象时,不小心将不同类型的对象加入集合,那么获取对象强制转换时会发生报错
菜菜的后端私房菜
2024/07/26
1661
Java泛型详解
Java泛型是jdk1.5中引入的一个新特性,泛型提供了编译时的类型检测机制,该机制允许程序员在编译时检测到非法的类型。 泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用。本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理,以及让人苦恼的类型擦除。
Java团长
2018/08/06
6540
深入理解 Java 注解
从本质上来说,注解是一种标签,其实质上可以视为一种特殊的注释,如果没有解析它的代码,它并不比普通注释强。
静默虚空
2019/12/20
1.1K0
深入理解 Java 注解
Java - 泛型
参数化类型:把类型当作参数来传递,这意味着参数化类型不能是基本数据类型,需要用对应的包装类来代替。
雨临Lewis
2022/01/12
5970
相关推荐
深入理解 Java 泛型
更多 >
LV.1
研究院高级工程师
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验