当前位置: 首页 > news >正文

中国空间站航天员深圳网络营销推广中心

中国空间站航天员,深圳网络营销推广中心,网站显示手机中病毒要按要求做,渭南做网站哪家好1、包装类 1.1 包装类 在Java中,每一个基本数据类型都有一个对应的包装类: 在SE的学习中我们已有过简单了解。 我们可以注意到,除了int类型的包装类为Integer,char类型的包装类为Character外,其余基本类型的包装类均…

1、包装类

1.1 包装类

在Java中,每一个基本数据类型都有一个对应的包装类:

在SE的学习中我们已有过简单了解。

我们可以注意到,除了int类型的包装类为Integer,char类型的包装类为Character外,其余基本类型的包装类均将首字母大写即可。

1.2 装箱和拆箱

装箱(装包):把基本数据类型变为包装类类型的过程,叫做装箱。

拆箱(拆包):把包装类类型变为基本数据类型的过程,叫做拆箱。

装箱又分为 自动装箱和显示装箱。

拆箱又分为 自动拆箱和显示拆箱。

1.2.1 装箱

装箱(装包):把基本数据类型变为包装类类型的过程,叫做装箱。

装箱分为 自动装箱和显示装箱。

1.2.1.1 自动装箱&显示装箱
public static void main(String[] args) {Integer a = 10;//自动装箱int b = 10;Integer c = Integer.valueOf(b);//显示装箱}

我们可以将数据直接赋值给包装类类型来自动装箱,也可以通过包装类中的方法来显示装箱。

1.2.2 拆箱

拆箱(拆包):把包装类类型变为基本数据类型的过程,叫做拆箱。

拆箱分为 自动拆箱和显示拆箱。

1.2.2.1 自动拆箱&显示拆箱
public static void main(String[] args) {Integer a = 10;//自动装箱(先装好箱,再来拆箱)int a1 = a;//自动拆箱int a2 = a.intValue();//手动拆箱double a3 = a.doubleValue();//手动拆箱}

1.2.3 自动拆箱&自动装箱 底层原理

其实不管是自动装箱,还是自动拆箱,底层都是帮我们调用了valueOf或者intValue/doubleValue/..... 方法:

1.3 包装类面试题 --->缓存数组

我们先来看以下代码:

读到这里,大家可以先猜测一下结果。

结果是出人意料的:

为什么会出现以上的结果的?明明两组数据都是包装类啊,为什么一组结果是true,而另一组结果是false呢?

要解决问题,我们就需要找到问题的主要矛盾。

我们可以发现,这几行代码,仅仅只发生了装箱。那我们就去看装箱是怎么操作的,也就是valueOf的源码是怎么工作的:

我们发现,当我们传入的值满足一个范围的时候,返回了一个数组中的值,而不满足这个范围的时候,则新返回了一个对象,既然返回了一个新对象,新对象用 == 来进行比较,那结果必然是false!

那这个范围是多少呢?

我们可以看到,范围为[-128,127] 。

也就是说,当我们要装箱的数据在这个范围当中时,是直接从一个数组中拿的数据,而这个数组就是缓存数组

缓存数组中共有256个数字,数组下标的范围为[0,255] ,存储着如下的数据:

所以当传入的数据在[-128,127]这个范围时,是直接从这个缓存数组中拿到的数据。

2、泛型

2.1 什么是泛型

顾名思义,泛型就是适用于许多许多类型。

在我们之前的学习中,我们可以将一个数据当做参数传到一个方法中,而泛型,是将一个数据类型当做参数传入,我们需要什么类型,就传入什么类型。

2.2 泛型的语法

类名后的 <E> 代表占位符,表示当前类是一个泛型类。
new关键字后<>中的类型实参可以不写,Java会根据第一个传入的参数自动的来推导出这个类型。
<>中参数传入规范:

2.3 泛型的使用

我们将Integer作为参数传入,那我们用E来接收的参数的类型必须为整型,不能再传入其他类型,如:字符串、字符型......:

这里就会帮我们进行自动类型检查,如果不是对应的类型,就会报错。

我们接收数据时也不需要强制类型转换,会进行自动类型转换

注意!注意!注意!!!

实例化对象时,<>中传入的类型只能为类类型,不能为普通数据类型!!!

泛型代码:

class myArray<E> {public Object[] array = new Object[10];public void setValue(int pos,E val) {array[pos] = val;}public E getValue(int pos) {return (E)array[pos];}
}
public class Test {public static void main(String[] args) {myArray<Integer> Array = new myArray<>();Array.setValue(0,10);//自动类型检查Array.setValue(1,100);//自动类型检查//Array.setValue(2,"dings");自动类型检查 发现错误Integer ret1 = Array.getValue(0);//自动类型转换System.out.println(ret1);}
}

2.4 裸类型(Raw Type) (了解)

裸类型是一个泛型类但没有传入类型实参,例如 Array  就是一个裸类型
我们发现,我们明明定义的是一个泛型类,但是我们实例化对象时并没有传入类型参数,却也没有发生报错,这是为什么呢?
答: 泛型是在JDK5引入的裸类型是为了兼容老版本的 API 保留的机制,所以不会报错。

2.5 泛型是如何进行编译的?

2.5.1 擦除机制

泛型是编译时期的一种机制,在运行的时候没有泛型的概念,也就是说,JVM当中没有泛型的概念。

在编译完成后,我们定义的<>中的T、E......等等,都会被擦除并且替换为Object,编译器生成的字节码在运行期间并不包含泛型的类型信息,这就是擦除机制

关于擦除机制的介绍:擦除机制

2.5 泛型的上界

在定义泛型类时,有时需要对传入的类型变量做一定的约束,可以通过类型边界来约束。

2.5.1 语法

2.5.2 示例一

语法:

我们对泛型类定义了上界为Number ,那传入的类型只能是Number或者是Number的子类。

代码示例:

ps:没有指定类型边界 E,可以视为 E extends Object

2.5.3 复杂示例二

例如:

那传入的类类型只能是实现了Comparable接口的类。

为什么要这样规定呢?

因为,我们使用的是泛型类,一旦我们要在类中进行数据的比较,那我们比较方法是未被定义的,就是说我们在写下这段代码时,还不知道传入的E会是什么类型,在方法中不能直接使用 >或者<来直接进行比较。于是,我们规定传入的类必须实现了Comparable接口,那就可以直接调用CompareTo方法来进行数据的比较了。

代码示例:

class A<E extends Comparable<E>> {//要求传入的类必须实现了Comparable接口,下面用来数据之间的比较public E findMax(E[] array) {//利用compareTo进行比较,找到数组中的最大值int max = 0;for (int i = 0; i < array.length; i++) {if (array[max].compareTo(array[i]) < 0) {max = i;}}return array[max];}
}
public class Student implements Comparable<Student>{//实现了Comparable接口public String name;public int age;public Student(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}@Override//重写compareTo方法,规范比较行为public int compareTo(Student o) {return this.age - o.age;}public static void main(String[] args) {Student[] students = new Student[]{new Student("dinsg",10),new Student("fdd",100),new Student("kasg",21),new Student("hau",1)};A<Student> aaa = new A<>();Student maxStudent = aaa.findMax(students);System.out.println(maxStudent);}
}

2.6 泛型方法

未完待续....

http://www.hkea.cn/news/22006/

相关文章:

  • 一_建设网站前的市场分析奶茶软文案例300字
  • 做网站智能工具江阴企业网站制作
  • 怎么看网站有没有做推广大数据营销系统多少钱
  • 广东工厂搜索seoseo平台优化服务
  • 网站开发平台 eclipseseo网站推广案例
  • 什么网站做调查能赚钱关键词优化报价推荐
  • 网站开发职业认知小结开发一个app平台大概需要多少钱?
  • 装修公司全包项目seo搜索引擎实训心得体会
  • 爱站网是干什么的长沙关键词排名首页
  • wordpress 教垜四川seo推广公司
  • 东莞市阳光网青岛seo服务
  • 网站弹窗在中间位置企业培训师
  • 整站下载器 安卓版域名解析查询站长工具
  • 跨境自建站模板seo推广是做什么
  • 网站建设与网页设计报告网络营销师报名入口
  • 生成前端页面的网站东莞网络营销全网推广
  • 网站及单位网站建设情况免费男女打扑克的软件
  • 公司有网站有什么好处网上开店如何推广自己的网店
  • 海口网站建设策划关键词排名优化工具有用吗
  • 请问哪里可以做网站汕头seo
  • 访问国外网站速度慢苏州关键词seo排名
  • 做网站备案照片的要求谷歌seo教程
  • wordpress站点全屏新站如何让百度快速收录
  • wordpress 会议 主题推广排名seo
  • 源码开发网站建设sem与seo的区别
  • 如何查网站的空间防恶意点击软件
  • 单位网站建设收费标准互联网推广引流
  • 网站有中文源码加英文怎么做关键词歌词完整版
  • 建设网站企业银行做网站的平台
  • 如何进行网站建设分析网站推广app软件