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

建设部网站注册规划师查询数字营销案例

建设部网站注册规划师查询,数字营销案例,wordpress 外贸网站建设,wordpress single.php目录 一、包装类 1、基本数据类型和对应的包装类 2、装箱和拆箱 3、自动装箱和自动拆箱 二、什么是泛型 三、引出泛型 1、泛型的语法 四、泛型类的使用 1、语法 2、示例 3、类型推导(Type Inference) 六、泛型如何编译的 1、擦除机制 2、为什么不能实例化泛型类… 目录 一、包装类  1、基本数据类型和对应的包装类 2、装箱和拆箱 3、自动装箱和自动拆箱 二、什么是泛型 三、引出泛型 1、泛型的语法 四、泛型类的使用 1、语法 2、示例 3、类型推导(Type Inference) 六、泛型如何编译的  1、擦除机制 2、为什么不能实例化泛型类型数组 七、泛型的上界 1、语法 2、示例 八、泛型方法 1、定义语法 2、示例 一、包装类  在Java中由于基本类型不是继承自Object为了在泛型代码中可以支持基本类型Java给每个基本类型都对应了一个包装类型。 1、基本数据类型和对应的包装类 除了 Integer 和 Character 其余基本类型的包装类都是首字母大写。 2、装箱和拆箱 简单的说装箱就是自动将基本数据类型转换为包装器类型拆箱就是自动将包装器类型转换为基本数据类型。 int i 10; // 装箱操作新建一个 Integer 类型对象将 i 的值放入对象的某个属性中 Integer ii Integer.valueOf(i); Integer ij new Integer(i); // 拆箱操作将 Integer 对象中的值取出放到一个基本数据类型中 int j ii.intValue(); 3、自动装箱和自动拆箱 可以看到在使用过程中装箱和拆箱带来不少的代码量所以为了减少开发者的负担java 提供了自动机制。 int i 10; Integer ii i; // 自动装箱 Integer ij (Integer)i; // 自动装箱 int j ii; // 自动拆箱 int k (int)ii; // 自动拆箱 从字节码内容可以看出在装箱的时候自动调用的是Integer的valueOf(int)方法而在拆箱的时候自动调用的是Integer的intValue方法。 其他的比如Double、Character等也是类似的大家可以自己动手尝试一下。 因此可以用一句话总结装箱和拆箱的实现过程 装箱过程是通过调用包装器的valueOf( )方法实现的而拆箱过程是通过调用包装器的 xxxValue方法实现的。xxx代表对应的基本数据类型。 现在我们来看一道题试着思考下列代码的输出结果是什么 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 这是因为在Integer这个包装类中它所能存储的数值的范围是在 -128~127 之间的而 a、b 均在这个范围内因此比较a和b的时候比较的是数值的大小此时a b因此输出true。 但是 c 和 d 均超出了Integer所能的范围因此此时为了存储 c 和 d 会自动new对象来分别存储它们此时也就相当于我们比较的是引用类型 因此在c  d 这个比较中比较的是它们的地址从而导致输出结果为false 二、什么是泛型 一般的类和方法只能使用具体的类型: 要么是基本类型要么是自定义的类。如果要编写可以应用于多种类型的代码这种刻板的限制对代码的束缚就会很大。                                                                                       ----- 来源《Java编程思想》对泛型的介绍。 泛型是在JDK1.5引入的新的语法通俗讲泛型就是适用于许多许多类型。从代码上讲就是对类型实现了参数化。 三、引出泛型 现在我们有这么一个任务 实现一个类类中包含一个数组成员使得数组中可以存放任何类型的数据也可以根据成员方法返回数组中某个下标的值 那么此时我们该如何实现这段代码呢思路如下 思路 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);} } 通过以上代码实现后我们会发现一下几个问题 1. 任何类型数据都可以存放 2. 这段代码会发生报错这是因为ret字符串是String类型的但是myArrary这个数组却是Object类型的因此我们需要对其进行强制转换。虽然在这种情况下当前数组任何数据都可以存放但是更多情况下我们还是希望他只能够持有一种数据类型。而不是同时持有这么多类型。所以泛型的主要目的就是指定当前的容器要持有什么类型的对象。让编译器去做检查。此时就需要把类型作为参数传递。需要什么类型就传入什么类型。 1、泛型的语法 class 泛型类名称类型形参列表 { // 这里可以使用类型参数 } class ClassNameT1, T2, ..., Tn {} class 泛型类名称类型形参列表 extends 继承类/* 这里可以使用类型参数 */ { // 这里可以使用类型参数 } class ClassNameT1, T2, ..., Tn extends ParentClassT1 { // 可以只使用部分类型参数} 那么此时我们利用泛型就可以将之前的那段代码改成这个样子 class MyArrayT {public T[] array (T[])new Object[10];//1public T getPos(int pos) {return this.array[pos];}public void setVal(int pos,T val) {this.array[pos] val;} } public class TestDemo {public static void main(String[] args) {MyArrayInteger myArray new MyArray();//2myArray.setVal(0,10);myArray.setVal(1,12);int ret myArray.getPos(1);//3System.out.println(ret);myArray.setVal(2,Hello);//4} } 现在我们对代码进行一下分析 1. 类名后的 T 代表占位符表示当前类是一个泛型类 除此之外我们还可以了解一个常见的规范 【规范】类型形参一般使用一个大写字母表示常用的名称有  2. 不能new泛型类型的数组 那么这也就意味着 T[] ts new T[5];//是不对的 3. 类型后加入 Integer 指定当前类型 4. 不需要进行强制类型转换 5. 代码编译报错此时因为在注释2处指定类当前的类型此时在注释4处编译器会在存放元素的时候帮助我们进行类型检查。 四、泛型类的使用 1、语法 泛型类类型实参 变量名; // 定义一个泛型类引用 new 泛型类类型实参(构造方法实参); // 实例化一个泛型类对象 2、示例 MyArrayInteger list new MyArrayInteger(); 这里我们的第二个里面的Integer是可以省略的也就是说我们可以将代码改成这个样子 MyArrayInteger list new MyArray(); 注意泛型只能接受类所有的基本数据类型必须使用包装类 3、类型推导(Type Inference) 当编译器可以根据上下文推导出类型实参时可以省略类型实参的填写 MyArrayInteger list new MyArray(); // 可以推导出实例化需要的类型实参为 Integer 小结 1. 泛型是将数据类型参数化进行传递 2. 使用 T 表示当前类是一个泛型类。 3. 泛型目前为止的优点数据类型参数化编译时自动进行类型检查和转换。 六、泛型如何编译的  1、擦除机制 那么泛型到底是怎么编译的泛型本质是一个非常难的语法要理解好他需要一定的时间打磨。现在我们来通过命令javap -c 查看字节码文件所有的T都是Object。在编译的过程当中将所有的T替换为Object这种机制我们称为擦除机制。 Java的泛型机制是在编译级别实现的。编译器生成的字节码在运行期间并不包含泛型的类型信息。其它有关泛型擦除机制的文章介绍https://zhuanlan.zhihu.com/p/51452375 2、为什么不能实例化泛型类型数组 我们先来看这么一段代码 class MyArrayT {public T[] array (T[]) new Object[10];public T getPos(int pos) {return this.array[pos];}public void setVal(int pos, T val) {this.array[pos] val;}public T[] getArray() {return array;}public static void main(String[] args) {MyArrayInteger myArray1 new MyArray();Integer[] strings myArray1.getArray();} }此时代码会进行报错 关于报错的原因通俗讲就是返回的Object数组里面可能存放的是任何的数据类型可能是String可能是Person运行的时候直接转给Integer类型的数组编译器认为是不安全的。 现在我们来看一下正确的方法【了解即可】 class MyArrayT {public T[] array;public MyArray() {}/*** 通过反射创建指定类型的数组* param clazz* param capacity*/public MyArray(ClassT clazz, int capacity) {array (T[])Array.newInstance(clazz, capacity);}public T getPos(int pos) {return this.array[pos];}public void setVal(int pos,T val) {this.array[pos] val;}public T[] getArray() {return array;} } public static void main(String[] args) {MyArrayInteger myArray1 new MyArray(Integer.class,10);Integer[] integers myArray1.getArray();} 七、泛型的上界 在定义泛型类时有时需要对传入的类型变量做一定的约束可以通过类型边界来约束。 1、语法 class 泛型类名称类型形参 extends 类型边界 { ... } 2、示例 public class MyArrayE extends Number { ... } 这段代码表示只接受 Number 的子类型作为 E 的类型实参 MyArrayInteger l1; // 正常因为 Integer 是 Number 的子类型 MyArrayString l2; // 编译错误因为 String 不是 Number 的子类型 那么当我们没有指定E的边界的时候又该怎么判断范围呢 没有指定类型边界 E可以视为 E extends Object 八、泛型方法 1、定义语法 方法限定符 类型形参列表 返回值类型 方法名称(形参列表) { ... } 2、示例 public class Util {//静态的泛型方法 需要在static后用声明泛型类型参数public static E void swap(E[] array, int i, int j) {E t array[i];array[i] array[j];array[j] t;} }
http://www.dnsts.com.cn/news/279459.html

相关文章:

  • 旅游网站开发盈利模式网站推广的主要途径
  • 旅游电子商务网站推广策略分析论坛类的网站怎样做
  • 犀牛云网站做的怎么样新手网络设计师人生规划
  • 网站备案接口上海市官方网站
  • 服装网站建设与规划python兼职网站开发
  • 旅游网站规划设计深圳营销网站建设公司哪家好
  • 南京建设网站企业wordpress 信息流
  • 石家庄网站开发公司已有网站做google推广
  • 网站开发雷小天制作个人主页
  • 南昌制作手机网站服装网站设计欣赏
  • python是做网站的吗做漫画网站的需求
  • 北京网站开发工程师招聘网宣传h5是什么意思
  • 图案设计制作seo全网营销
  • 一级a做爰片免费网站 新闻吸引客流的25个技巧
  • 保定模板建站软件上海装修公司排名前十强排行榜
  • 菏砖网站建设百度文库官网
  • 医院网站站群建设方案做婚姻网站流程
  • 怎么做php登陆网站湖南工商网址
  • 数字资产币币交易所网站开发东莞网站自动化推广
  • 苏州网站优化维护网站建设推广谷得网络
  • 南京百度竞价推广公司排名企业网站制作优化
  • 做详情页比较好的网站宁波本地模板网站建设平台
  • 常州建设银行网站首页天猫商城在线购物
  • 任意的关键词或网站做引流网站图片上的分享怎么做
  • 能够做二维码网站wordpress 新网站 代码
  • 上海网站建设咨北京大兴做网站公司
  • 网站制作小工具期末作业做网站的心得体会
  • 建筑网站水泡网网站建设方案word
  • ip做网站域名实验室网站建设
  • 网站数据库 数据库空间购买租用wordpress 插件站