网站免费优化,绿色食品销售网站建设,18款禁用软件app排行,搭建网站架构是什么意思乐观学习#xff0c;乐观生活#xff0c;才能不断前进啊#xff01;#xff01;#xff01; 我的主页#xff1a;optimistic_chen 我的专栏#xff1a;c语言 #xff0c;Java 欢迎大家访问~ 创作不易#xff0c;大佬们点赞鼓励下吧~ 文章目录 包装类装箱和拆箱泛型泛型… 乐观学习乐观生活才能不断前进啊 我的主页optimistic_chen 我的专栏c语言 Java 欢迎大家访问~ 创作不易大佬们点赞鼓励下吧~ 文章目录 包装类装箱和拆箱泛型泛型语法擦除机制 泛型的上届泛型方法静态泛型方法 完结 包装类 在Java中由于基本类型不是继承自Object为了在泛型代码中可以支持基本类型Java给每个基本类型都对应了一个包装类型 基本数据类型包装类byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBoolean
装箱和拆箱 装箱操作新建一个 基本类型对象将 i 的值放入对象的某个属性中把基本数据类型变为包装类类型 拆箱操作将 Integer 对象中的值取出放到一个基本数据类型中把包装类类型变为基本数据类型 int a10;
Integer iInteger.valueOf(a);//显示装箱
int ji.intValue();//显示拆箱//在使用过程中装箱和拆箱带来不少的代码量所以为了减少开发者的负担java 提供了自动机制底层帮我们调用了Integer.valueOf()方法
Integer i2(Integer)a;//自动装箱
int j(int)i;//自动拆箱相关题目以下代码的输出结果为
public class Test {public static void main(String[] args) {Integer a 100;Integer b 100;Integer c 200;Integer d 200;System.out.println(a b);System.out.println(c d);}
}也许有些人认为他们是四个各不相同的对象两个式子都返回false。
实际运行后发现输出
实际装箱的源码 结论i应该在一个范围的时候是去数组直接拿值不再这个范围的时候他是返回新的对象。新的对象用等号比较那必然是不一样的。
泛型 泛型是在JDK1.5引入的新的语法通俗讲泛型是适用于许多类型。 从代码上讲就是对类型实现了参数化 一般的类和方法只能使用具体的类型: 要么是基本类型要么是自定义的类。 如果要编写可以应用于多种类型的代码这种刻板的限制对代码的束缚就会很大。
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 Test {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);}
}总结: 虽然在这种情况下当前数组任何数据都可以存放但是更多情况下我们还是希望他只能够持有一种数据类 型。而不是同时持有这么多类型。所以泛型的主要目的就是指定当前的容器要持有什么类型的对象。让编译器去做检查。 此时就需要把类型作为参数传递。需要什么类型就传入什么类型
泛型语法
class 泛型类名称 类型形参列表 {// 这里可以使用类型参数
}
class ClassNameT1, T2, ..., Tn { }泛型类类型实参变量名 new 泛型类类型实参构造方法实参;//定义一个泛型类引用 实例化一个泛型类对象
MyArrayInteger list new MyArrayInteger();//MyArrayInteger list new MyArray(); // 可以推导出实例化需要的类型实参为 Integer注意泛型只能接受类所有的基本数据类型必须使用包装类
总结
泛型是将数据类型参数化进行传递使用 表示当前类是一个泛型类。泛型目前为止的优点数据类型参数化编译时自动进行类型检查和转换
擦除机制 在编译的过程当中将所有的T替换为Object这种机制我们称为擦除机制 Java的泛型机制是在编译级别实现的。编译器生成的字节码在运行期间并不包含泛型的类型信息
泛型的上届
在定义泛型类时有时需要对传入的类型变量做一定的约束可以通过类型边界来约束。 class 泛型类名称类型形参 extends 类型边界{ } public class MyArray E extends Number{ }//只接受 Number 的子类型作为 E 的类型实参 当实现一个泛型类 其中有一个方法 可求数组最大值
class AlgE extends CompareableE{public E findMax(E[] array){E maxarray[0];for(int i1;iarray.length;i){if(max.compareTo(array[i])0){maxarray[i];}}return max;}}public class Test{public static void main(String[] args){Interger[] array{1,2,3,4,5};AlgInteger algnew Alg();int aalg.findMax(array);System.out.println(a);}}E必须是实现了Compareable接口的
泛型方法 方法限定符类型形参列表 返回值类型 方法名称(形参列表{ } class Alg2{public E extends CompareableE E findMax(E[] array){E maxarray[0];for(int i1;iarray.length;i){if(max.compareTo(array[i])0){maxarray[i];}}return max;}
}
public class Test{public static void main(String[] args){Alg2 alg2new Alg2();Interger[] array{1,2,3,4,5};int aalg2.findMax(array);System.out.println(a);}}静态泛型方法
class Alg3{public static E extends CompareableE E findMax(E[] array){E maxarray[0];for(int i1;iarray.length;i){if(max.compareTo(array[i])0){maxarray[i];}}return max;}
}
public class Test{public static void main(String[] args){Interger[] array{1,2,3,4,5};int aAlg3.findMax(array);//通过类名访问System.out.println(a);}}完结
好了到这里Java语法部分就已经结束了~ 如果这个系列博客对你有帮助的话可以点一个免费的赞并收藏起来哟~ 可以点点关注避免找不到我~ 我的主页optimistic_chen 我们下期不见不散~~Java
下期预告: Java【数据结构】- - - List