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

湖南畅想网站建设/网站定制开发

湖南畅想网站建设,网站定制开发,网站建设美国,无锡大型网站建设目录 1.包装类 1.1 基本数据类型和对应的包装类 1.2 装箱和拆箱 1.3 自动装箱和自动拆箱 2.泛型 2.1泛型的概念 2.2引出泛型 3.语法 4.泛型类的使用 5.泛型的上界 1.包装类 在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基…

目录

1.包装类

1.1 基本数据类型和对应的包装类

 1.2 装箱和拆箱

1.3 自动装箱和自动拆箱

2.泛型

2.1泛型的概念

2.2引出泛型 

3.语法

4.泛型类的使用 

5.泛型的上界


1.包装类

        在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型。

1.1 基本数据类型和对应的包装类

 1.2 装箱和拆箱

nt i = 10;
// 装箱操作,新建⼀个 Integer 类型对象,将 i 的值放⼊对象的某个属性中 
Integer ii = Integer.valueOf(i);
Integer ij = new Integer(i);
// 拆箱操作,将 Integer 对象中的值取出,放到⼀个基本数据类型中 
int j = ii.intValue();

1.3 自动装箱和自动拆箱


可以看到在使用过程中,装箱和拆箱带来不少的代码量,所以为了减少开发者的负担,java提供了自动机制。

int i = 10;
Integer ii = i; // ⾃动装箱 
Integer ij = (Integer)i; // ⾃动装箱 
int j = ii; // ⾃动拆箱 
int k = (int)ii;

接下来我们看一道题

public static void main(String[] args) {Integer a = 127;Integer b = 127;Integer c = 128;Integer d = 128;System.out.println(a == b);System.out.println(c == d);
}

我们可以发现第一个等号输出true第二个输出false,这是为什么呢?

原因是,包装类的数据有一定地限制范围.下面我们看源码:

public static Integer valueOf(int i) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);//超出范围之后就会new一个新的对象出来}
private static class IntegerCache {static final int low = -128;//范围的最小值为-128static final int high;static final Integer[] cache;static Integer[] archivedCache;static {// high value may be configured by propertyint h = 127;//定义h=127String integerCacheHighPropValue =VM.getSavedProperty("java.lang.Integer.IntegerCache.high");if (integerCacheHighPropValue != null) {try {h = Math.max(parseInt(integerCacheHighPropValue), 127);// Maximum array size is Integer.MAX_VALUEh = Math.min(h, Integer.MAX_VALUE - (-low) -1);} catch( NumberFormatException nfe) {// If the property cannot be parsed into an int, ignore it.}}high = h;//范围的最大值为127

    由于128超出了if语句的条件限制,所以就会new一个新的对象出来,它们指向的是不同的引用,而 == 比较的就是两个对象的地址是否想相同,所以第二个返回false.

2.泛型

2.1泛型的概念

       一般的类和方法,只能使用具体的类型:要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大,因此在JDK1.5引入的新的语法---泛型,通俗讲,泛型:就是适用于许多许多类型。从代码上讲,就是对类型实现了参数化。

2.2引出泛型 

      实现⼀个类,类中包含一个数组成员,使得数组中可以存放任何类型的数据,也可以根据成员方法返回数组中某个下标的值

思路:
1. 我们以前学过的数组,只能存放指定类型的元素,例如:                                                         int[] array=new int[10]; String[] strs=new String[10];
2. 所有类的父类,默认为Object类,数组是否可以创建为Object?

class MyArray {public Object[] array = new Object[10];public Object getPos(int pos) {return this.array[pos];}public void setVal(int pos,Object val) {this.array[pos] = val;}
}
public class TestDemo {public static void main(String[] args) {MyArray myArray = new MyArray();myArray.setVal(0,10);myArray.setVal(1,"hello");//字符串也可以存放 String ret = myArray.getPos(1);//编译报错 System.out.println(ret);}
}

      上述的数组可以存放任何类型的数据,但是更多情况下,我们还是希望能够只有一种数据类型,所以,泛型的目的就是指定当前容器要持有什么类型的对象,让编译器做检查.此时就需要把类型作为参数传递.

3.语法

基础语法

class 泛型类名称<类型形参列表> {// 这⾥可以使⽤类型参数 
}
class ClassName<T1, T2, ..., Tn> { 
}

其他写法:

class 泛型类名称<类型形参列表> extends 继承类/* 这⾥可以使⽤类型参数 */ { // 这⾥可以使⽤类型参数 
}
class ClassName<T1, T2, ..., Tn> extends ParentClass<T1> {// 可以只使⽤部分类型参数 
}

我们对上述代码进行改写

class MyArray<T> {public Object[] array = new Object[10];public T getPos(int pos) {return (T)this.array[pos];}public void setVal(int pos,T val) {this.array[pos] = val;}
}
public class TestDemo {public static void main(String[] args) {MyArray<Integer> myArray = new MyArray<>();//1myArray.setVal(0,10);myArray.setVal(1,12);int ret = myArray.getPos(1);//2System.out.println(ret);myArray.setVal(2,"String");//3}
}

代码解释:

类名后的 < T >代表占位符,表示当前类型是一个泛型.
类型的指定一般用一个大写字母来表示,常见的有:
E 表示 Element
K 表示 Key
V 表示 Value
N 表示 Number
T 表示 Type
S, U, V 等等 - 第二、第三、第四个类型
注释1处,类型后加入<Integer> 指定当前类型
注释2处,不需要进行强制类型转换
注释3处,代码编译报错,此时因为在注释2处指定类当前的类型,输入的String类型不是int类型

4.泛型类的使用 

泛型类<类型实参> 变量名; // 定义⼀个泛型类引⽤ 
new 泛型类<类型实参>(构造⽅法实参);// 实例化⼀个泛型类对象
示例
MyArray<Integer> list = new MyArray<Integer>();

注意:泛型只能接受类,所有的基本数据类型必须使用包装类!

5.泛型的上界


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

class 泛型类名称<类型形参 extends 类型边界> {...
}
示例
public class MyArray<E extends Number> {...
}MyArray<Integer> l1; // 正常,因为 Integer 是 Number 的⼦类型 
MyArray<String> l2; // 编译错误,因为 String 不是 Number

 

http://www.cadmedia.cn/news/732.html

相关文章:

  • 济南网站推广¥做下拉去118cr/手机优化软件
  • 设计师网站源码/阿里巴巴国际贸易网站
  • 来广营网站建设/百度竞价推广效果好吗
  • 建设报名系统网站可靠吗/百度服务
  • 宿迁公司做网站/周口网站seo
  • 腾讯云可以做网站吗/优化大师的优化项目有哪7个
  • 网站建设 资质荣誉/网站营销方案模板
  • 网站备案表格/搜索引擎哪个好
  • 电大亿唐网不做网站做品牌/百度搜索关键词排名优化技术
  • 深圳企业网站建设公司排名/软文营销经典案例优秀软文
  • 个人微网站怎么做/站长工具关键词挖掘
  • wordpress font-spider/优化大师的使用方法
  • 软件公司做网站吗/seo快速入门教程
  • 做网站推广logo/合肥seo服务商
  • 深圳专门做网站的公司/合肥网络科技有限公司
  • 达州住房和城乡建设部网站/seo优化网站查询
  • 超酷win8风格企业网站织梦模板/软文推广渠道主要有
  • 太仓建设银行网站/济南网站推广
  • 青海西宁制作网站专业/广东seo点击排名软件哪里好
  • 建设银行官方网站/有哪些可以推广的平台
  • 河南郑州汽车网网站建设/seo优化软件免费
  • 网站建设赠送seo/怎么提高百度搜索排名
  • 做网站网页的工作怎么样/足球排行榜前十名
  • 梁山网站建设/网络推广服务合同
  • 汕头网站建设套餐/全国知名网站排名
  • 大理建设学校官方网站/网站设计方案模板
  • 全网营销系统是不是传销/西安seo诊断
  • 电子外发加工网/长春网站优化流程
  • 四川省建设工程质量监理协会网站/什么是网络营销策略
  • 网站开发制作云盘/软文广告经典案例300