JavaSE(5)泛型、注解和特性

Java从入门到架构师__JavaSE Java语言基础 阅读详情

JavaSE泛型、注解和特性

1、泛型

泛型对于一般开发中作用很大。比如当有一些重复的代码内容需要引用时,就可以参照所谓的模板进行继承。

  • E - Element (在集合中使用,因为集合中存放的是元素)
  • T - Type(Java 类)
  • K - Key(键)
  • V - Value(值)
  • N - Number(数值类型)
  • ? - 表示不确定的 java 类型

下面演示一个例子:

public class Box<T> {
    // T stands for "Type"
    private T t;
    public void set(T t) { this.t = t; }
    public T get() { return t; }
}

在java1.4或者更早前,在集合中存储对象并在使用前进行类型转换是不方便的。而泛型防止了那种情况的发生。它提供了编译期的类型安全,确保你只能把正确类型的对象放入集合中,避免了在运行时出现ClassCastException。

Java泛型的工作机制在于通过类型擦除来实现的,比如说List在运行时就知识显示一个List。这是编译器在编译时擦除了所有类型相关的信息,所以在运行时不存在任何类型相关的信息。而这里之后,你无法在运行时访问到类型参数,因为编译器已经把泛型类型转换成了原始类型。

这里更多的面试问题可以参照这个博客。

2、注解

Java 注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。简单来说,这还是给计算机来解读的而非程序员。

内容更多可以参考如下:blog1

3、Java1.8特性

  • Lambda 表达式 − Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。
  • 方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
  • 默认方法 − 默认方法就是一个在接口里面有了一个实现的方法。
  • 新工具 − 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。
  • Stream API −新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。
  • Date Time API − 加强对日期与时间的处理。
  • Optional 类 − Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异常。
  • Nashorn, JavaScript 引擎 − Java 8提供了一个新的Nashorn javascript引擎,它允许我们在JVM上运行特定的javascript应用。

Lambda表达式

Lambda表达式称为闭包,它允许把函数作为一个方法的参数,并且Lambda表达式可以使得代码更加紧凑。

简单的例子:
// 1. 不需要参数,返回值为 5  
() -> 5  
  
// 2. 接收一个参数(数字类型),返回其2倍的值  
x -> 2 * x  
  
// 3. 接受2个参数(数字),并返回他们的差值  
(x, y) -> x – y  
  
// 4. 接收2个int型整数,返回他们的和  
(int x, int y) -> x + y  
  
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)  
(String s) -> System.out.print(s)

使用 Lambda 表达式需要注意以下两点:

  • Lambda 表达式主要用来定义行内执行的方法类型接口
  • Lambda 表达式免去了使用匿名方法的麻烦,并且给予Java简单但是强大的函数化的编程能力。

方法引用

  • 方法引用通过方法的名字来指向一个方法。
  • 方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
  • 方法引用使用一对冒号 :: 。

具体方法可以参考如下内容:方法引用

默认方法

  • 默认方法就是接口可以有实现方法,而且不需要实现类去实现其方法。
  • 我们只需在方法名前面加个 default 关键字即可实现默认方法。

默认方法语法格式如下:

public interface Vehicle {   
	default void print(){      
		System.out.println("我是一辆车!");   
	} 
}

一个接口有默认方法,考虑这样的情况,一个类实现了多个接口,且这些接口有相同的默认方法,以下实例说明了这种情况的解决方法:

public interface Vehicle {   
	default void print(){      
		System.out.println("我是一辆车!");   
	} 
}  
public interface FourWheeler {   
	default void print(){      
		System.out.println("我是一辆四轮车!");   
	} 
}

Java 8 的另一个特性是接口可以声明(并且可以提供实现)静态方法。例如:

public interface Vehicle {
   default void print(){
      System.out.println("我是一辆车!");
   }
    // 静态方法
   static void blowHorn(){
      System.out.println("按喇叭!!!");
   }
}

Stream API

在 Java 8 中, 集合接口有两个方法来生成流:

  • stream() − 为集合创建串行流。
  • parallelStream() − 为集合创建并行流。
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
  • forEach迭代流
  • map
  • filter
  • limit
  • sorted
  • 并行程序
  • Collectors
  • 统计
  • Stream完整实例

日期时间API

在旧版的Java中日期时间API有以下问题:

  • 非线程安全:Java.util.Date是非线程安全,所有的日期类都会变。
  • 设计很差:Java的日期/时间类的定义并不一致,在java.util和java.sql的包中都有日期类,此外用于格式化和解析的类在java.text包中定义。java.util.Date同时包含日期和时间,而java.sql.Date仅包含日期,将其纳入java.sql包并不合理。
  • 时区处理麻烦:日期类并不提供国际化,没有时区支持,因此Java引入了java.util.Calendar和java.util.TimeZone类,但他们同样存在上述所有的问题。

Java 8 在 java.time 包下提供了很多新的 API。以下为两个比较重要的 API:

  • Local(本地) − 简化了日期时间的处理,没有时区的问题。
  • Zoned(时区) − 通过制定的时区处理日期时间。

4、Java 与 C++ 的区别

  • Java 是纯粹的面向对象语言,所有的对象都继承自 java.lang.Object,C++ 为了兼容 C 即支持面向对象也支持面向过程。
  • Java 通过虚拟机从而实现跨平台特性,但是 C++ 依赖于特定的平台。
  • Java 没有指针,它的引用可以理解为安全指针,而 C++ 具有和 C 一样的指针。
  • Java 支持自动垃圾回收,而 C++ 需要手动回收。
  • Java 不支持多重继承,只能通过实现多个接口来达到相同目的,而 C++ 支持多重继承。
  • Java 不支持操作符重载,虽然可以对两个 String 对象执行加法运算,但是这是语言内置支持的操作,不属于操作符重载,而 C++ 可以。
  • Java 的 goto 是保留字,但是不可用,C++ 可以使用 goto。
YOLOv8的Anchor-Free革新:从中心点预测到动态IoU匹配的全面解析 本文深入解析了YOLOv8采用Anchor-Free(无锚框)设计的核心优势与实现机制。通过摒弃预设锚框,模型直接预测目标中心点与宽高,结合解耦头、动态IoU匹配及Varifocal Loss等创新,显著简化了训练流程并提升了检测精度,尤其在小目标检测和模型泛化能力上表现突出。 阅读详情

相关推荐

ZYNQ新手必看:5分钟搞定SD卡与QSPI Flash双启动模式配置(附常见问题排查)

本文为ZYNQ开发者提供了SD卡与QSPI Flash双启动模式的完整配置指南与深度排错方法。详细解析了从BootROM、FSBL到BOOT.bin的启动链条,并分步讲解了在Vivado/Vitis中的硬件配置、软件工程创建及BOOT.bin文件生成流程。针对SD卡格式化、文件放置以及QSPI Flash烧录中的常见陷阱(如版本差异、时钟配置)给出了具体解决方案和排查清单,帮助开发者快速实现可靠的产品启动与程序固化。

ll5678的博客 931

Java注解和JDK新特性

/ 如果有只有一个配置参数,一般命名为value定义注解的关键字是@interface自定义注解中可以定义多个配置参数,不是成员方法或成员变量;说明参数的名称,以及参数值的类型如果只有一个配置参数,一般命名为value如果配置参数是value,并且只有一个配置参数,value可省略注意:定义注解时,意味着他实现了java.lang.annotation.Anntotation接口,即该注解就是一个Anntotation和implements实现接口的方法不同。

小小前端转型中 1515

别再只调陀螺仪了!用OpenCV实现基于透视变换的EIS防抖,实测效果媲美手机

本文深入探讨了基于透视变换的EIS电子稳像技术,通过OpenCV实现高阶防抖算法,效果媲美主流手机厂商方案。详细解析了传统旋转平移模型的局限性,并展示了透视变换在复杂场景下的优势,包括数学原理、OpenCV实战代码及性能优化技巧,为视频防抖提供了专业解决方案。

weixin_42613501的博客 450

JAVA注解和C#特性

关键词: C#: Attribute:特性(HTML标签叫属性) Property:属性 Usage:使用、用法、习惯、惯例 AttributeUsage:特性用法(个人翻译) Obsolete:过期 (C#中代表过期,不推荐使用) Conditional:条件JAVA: Annotation:注释 Deprecated:反对,不赞成(JAVA代表过期,不推荐使用) Supres

qqqqqqqq188的专栏 7324

基于FMCW技术的毫米波雷达测速原理与应用

调频连续波(FMCW)技术是毫米波雷达中实现高精度测速的核心方法之一。本文详细介绍了FMCW测速的基本原理、信号处理流程以及在实际应用中的关键技术。通过分析FMCW雷达的多普勒效应和频率差测量方法,本文展示了如何利用FMCW技术实现目标速度的高精度检测。此外,本文还探讨了FMCW测速在自动驾驶、智能交通和工业自动化等领域的应用案例,为毫米波雷达开发者提供了理论支持和实践指导。

不谈枯燥公式,只聊雷达趋势。用大白话解读毫米波里的黑科技。 1137

安装部署 Guacamole 远程桌面网关

Guacamole 是Apache基金会提供的一组基于web的远程桌面访问工具,支持 VNC、RDP、SSH、 Telnet 等协议,支持远程透传音视频。

UsamaBinLaden6976498的专栏 1963

c#特性 java注解,Java注解全面了解

开发工具使用的是IntelliJ IDEA一. 神马是注解?注解(也称为元数据),为我们的代码添加信息提供了一种形式化的方法,使我们在某些时刻可以方便的使用这些数据。注解在一定程度上把数据与源码文件结合在一起,同时也是对来自C#之类的其它语言对java造成的语言特性压力所做出的一种回应。注解是从Java SE5(JDK5,下文的JDK指的是>=JDK5)引入的特性,它可以帮助我们减轻编写“样...

weixin_36105296的博客 851

Unity中实现HLS视频加密与流式播放的完整方案

本文详细介绍了在Unity中实现HLS视频加密与流式播放的完整方案。针对Unity原生VideoPlayer无法直接支持实时解密的问题,提出了基于HLS协议与AES-128加密的成熟解决方案,并重点阐述了如何利用AVPro Video插件进行集成。文章涵盖了从密钥生成、使用FFmpeg进行视频加密切片,到在Unity中动态加载密钥并播放加密流的全流程,为保护付费课程、独家动画等视频内容提供了安全且高效的实践路径。

weixin_29290963的博客 393

1、SpringBoot注解及特性介绍

@SpringBootApplication : SpringBoot应用标注在某个类上说明这个类是SpringBoot的主配置 类,SpringBoot就应该运行在这个类的main方法来启动SpringBoot应用。@SpringBootConfiguration: SpringBoot配置类,标注在某个类上表明这个类是一个SpringBoot的配置类@Configuration: 配置类来...

m0_38089730的博客 317

MOSFET高频响应实战:如何用LTspice仿真内部电容效应(附模型文件)

本文深入解析MOSFET高频响应中的内部电容效应,通过LTspice仿真工具详细展示如何提取模型参数并优化高频特性。从栅极相关电容到结电容的物理本质,再到实战案例中的开关损耗分析和频率响应扫描,提供全面的设计优化方法,帮助工程师有效应对高速开关电路中的电容挑战。

weixin_33725722的博客 390

github创建账号第一步始终出错

github创建账号总结:第一次注册GitHub,填好用户名邮箱密码后进入下一步就卡在哪里,上面还提示Unable to verify your captcha response等,进入网址的解决办法以及下载其他的浏览器也无法解决,用手机浏览器抱着试一试的心态竟然成功了,分享给大家。手机下载谷歌浏览器,进入GitHub正常注册,能向下继续,邮箱验证完以后再用电脑登陆就ok啦

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 4376

注解和泛型

注解和泛型 回顾: 线程状态: new,runnable,blocked,waiting,TimedWaiting,终止 等待唤醒/线程通信: 生产者和消费者 线程池: ​ 缓存,定容,定时,单一 匿名内部类: ​ new 父类/接口(){ ​ 复写父类或者接口中的方法 ​ } 教学目标 掌握注解的本质 注解的分类 自定义注解 注解的属性设置 元注解 注解解析 泛型的作用 自定义泛型 泛型的使用 泛型的继承关系以及上下限 一,注解 1.1 注解的概念 **为什么要学习注解?**注

CxnKh的博客 996

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Java1.0-13各版本特性

不知道你有没有想过这些问题: 为什么 JDK1.4 与 JDK 5.0 的命名规则不一样?JDK 8 增加了哪些新特性?现在最新的 Java 版本是多少? 一直都是写业务代码,都没研究过 Java 的曾经与现在。为了提高下自己的职业素养,查了资料: JDK 1995 年 发布了 Beta 版,1996 年 1 月 发布了 1.0 版本,直到 2019 年 9 月发布了 JDK 13,J...

ConstXiong 690

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java发展历史

java发展历史

ZSDLZ37的博客 340

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【JavaSE】泛型

尚硅谷JavaSE笔记——泛型。个人实践总结,知识记忆架构不一定适合所有人,建议先阅读文章目录

知识输出、记录学习 462

java泛型和注解

在开发中对象的引用传递是最常见的,但是如果在泛型类的操作中,在进行引用传递时泛型类型必须匹配才可以传递,否则是无法传递的。预定义注解是指 Java 语言中已经定义好的注解,可以直接使用。Java SE 提供了许多预定义注解,这些注解在 JDK 中已经实现,并且提供相应的处理器对注解进行处理,@Override重写,@Deprecated标记一些过时的方法,这些都是预定义注解,就是javaJDK本身就有的注解0自定义注解字面意思就是自己按照java提供的语法自己定义意注解。

m0_64405349的博客 255

JavaSE——神奇特性之泛型

了解过JDK的发展历程,我们可以大概了解到,从JDK1.0开始,每个版本几乎都有提供新特性,从JDK1.5以后引入了三大特性,分别是泛型、枚举、注解,其中泛型是一个非常重要的实现技术,他可以帮我们解决程序的参数转换问题 提到参数转换,我们来看这样一个例子,你就明白参数转换的重要性 class Point{ private Object x; private Object y; ...

CHAOQIWEN的博客 324

JavaSE泛型小结

JDK1.5新特性: 可变参数(不会发生数组越界异常) 1.可变参数会自动包装成数组,使用时当作数组使用 2.方法有多个参数时,可变参数需要放到参数列表最后(否则会报错) 3.方法的可变参数最多有一个 4.可变参数不传值时,包装了一个空数组 foreach(增强的for循环) for(元素类型 变量名:集合类型){…} 泛型 JDK1.5以后引入三大常用新特性:泛型、枚举、注解。 泛型是一件很重...

tt 博客 355

JDK1.5 新特性【泛型】

JDK1.5 新特性-泛型

功不唐捐,玉汝于成 567

【JavaSE】注解

尚硅谷JavaSE笔记——注解。个人实践总结,知识记忆架构不一定适合所有人,建议先阅读文章目录

知识输出、记录学习 1512

[JavaSE]泛型

目录 预备知识: jdk1.5新特性:泛型 枚举 注解/可变参数/foreach循环/静态导入/向上转型(90%):父类 父类引用=子类实例   //以物换物/向下转型(1%):子类 子类引用=(子类)父类实例 泛型类:(T/E/KV) 泛型方法(泛型类与泛型方法共存时/规范) 通配符 (?/?extends类:/T extends 类:/? extends 类:/? super 类:...

weixin_42645168的博客 568

一篇快速搞懂 JavaSE 高级特性(代码块,注解,枚举,异常处理,多线程,集合框架,泛型,反射,IO ......)

耗费5w字图文结合详细讲述了JavaSE的高级特性知识,涉及到各种常用技术,一篇搞懂Java常用重难点知识(多线程、锁、泛型、集合源码、File类和IO流、枚举类等等),适合对遗忘的知识点快速回顾以及对Java进行复习。

qq_53569667的博客 918

【泛型、反射、注解】

泛型、反射、注解

weixin_41573113的博客 251

Java学习笔记之注解、泛型与反射

Java学习笔记之注解、泛型与反射 注解 注解概述 JDK 5.0开始,JAVA增加了对元数据(MetaData)的支持,也就是Annotation(注解) Annotation其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过使用Annotation,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。代码分析工具、开发工具和部署工具可以通过...

ruozhuliufeng的博客 645

Java基础系列十 注解、泛型、反射、序列化和常用类

Java基础系列第十章 注解:基本注解、元注解、自定义注解,泛型,反射,序列化与反序列化,常用类:Math类、Number类、Vector类

702

重学JavaSe后的补充

文章目录1.三元运算符:2.基本数据类型转换:1)自动类型转换:2)强制类型转换:3.if-else和switch的区别:switch使用时的注意事项:4.三种循环的区别:5.break关键字的常见用法:6.continue关键字的用法: 1.三元运算符: 需要三个数据才可以进行操作的运算符。 格式:数据类型 变量名称 =条件判断 ? 表达式a :表达式b int a=10; ...

Zzh1110的博客 1万+
上一篇: JavaSE基础(4)继承
下一篇: HotRing冷热页面识别论文解读
Xiao艾扶
博客等级 码龄7年 187粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xiao艾扶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值