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

网站升级维护需要多久信息流广告代理公司排名

网站升级维护需要多久,信息流广告代理公司排名,广州装修公司口碑最好的是哪家,项目推广平台有哪些目录 一、泛型 1. Java中的泛型是什么 ? 2. 使用泛型的好处是什么? 3. Java泛型的原理是什么 ? 什么是类型擦除 ? 4.什么是泛型中的限定通配符和非限定通配符 ? 5. List和List 之间有什么区别 ? 6. 可以把List传递给一个接受List参数的方法吗#xff1f; 7. Arra…目录 一、泛型 1. Java中的泛型是什么 ? 2. 使用泛型的好处是什么? 3. Java泛型的原理是什么 ? 什么是类型擦除 ? 4.什么是泛型中的限定通配符和非限定通配符 ? 5. List和List 之间有什么区别 ? 6. 可以把List传递给一个接受List参数的方法吗 7. Array中可以用泛型吗? 8. 判断ArrayList与ArrayList是否相等 二、序列化 1. Java序列化与反序列化是什么 2. 为什么需要序列化与反序列化 3. 序列化实现的方式有哪些 3.1 Serializable接口 3.2 Externalizable接口 3.3 两种序列化的对比 4. 什么是serialVersionUID 5. 为什么还要显示指定serialVersionUID的值? 6. Java 序列化中如果有些字段不想进行序列化怎么办 7. 静态变量会被序列化吗? 一、泛型 1. Java中的泛型是什么 ? 泛型是 JDK1.5 的一个新特性泛型就是将类型参数化其在编译时才确定具体的参数。这种参数类型可以用在类、接口和方法的创建中分别称为泛型类、泛型接口、泛型方法。 2. 使用泛型的好处是什么? 远在 JDK 1.4 版本的时候那时候是没有泛型的概念的如果使用 Object 来实现通用、不同类型的处理有这么两个缺点 1每次使用时都需要强制转换成想要的类型 2在编译时编译器并不知道类型转换是否正常运行时才知道不安全。 如这个例子 List list new ArrayList(); list.add(www.cnblogs.com); list.add(23); String name (String)list.get(0); String number (String)list.get(1); //ClassCastException 上面的代码在运行时会发生强制类型转换异常。这是因为我们在存入的时候第二个是一个 Integer 类型但是取出来的时候却将其强制转换为 String 类型了。Sun 公司为了使 Java 语言更加安全减少运行时异常的发生。于是在 JDK 1.5 之后推出了泛型的概念。 根据《Java 编程思想》中的描述泛型出现的动机在于有许多原因促成了泛型的出现而最引人注意的一个原因就是为了创建容器类。 使用泛型的好处有以下几点 1类型安全 泛型的主要目标是提高 Java 程序的类型安全 编译时期就可以检查出因 Java 类型不正确导致的 ClassCastException 异常 符合越早出错代价越小原则 2消除强制类型转换 泛型的一个附带好处是使用时直接得到目标类型消除许多强制类型转换 所得即所需这使得代码更加可读并且减少了出错机会 3潜在的性能收益 由于泛型的实现方式支持泛型几乎不需要 JVM 或类文件更改 所有工作都在编译器中完成 编译器生成的代码跟不使用泛型和强制类型转换时所写的代码几乎一致只是更能确保类型安全而已 3. Java泛型的原理是什么 ? 什么是类型擦除 ? 泛型是一种语法糖泛型这种语法糖的基本原理是类型擦除。Java中的泛型基本上都是在编译器这个层次来实现的也就是说泛型只存在于编译阶段而不存在于运行阶段。在编译后的 class 文件中是没有泛型这个概念的。 类型擦除使用泛型的时候加上的类型参数编译器在编译的时候去掉类型参数。 例如 public class CaculateT {private T num; } 我们定义了一个泛型类定义了一个属性成员该成员的类型是一个泛型类型这个 T 具体是什么类型我们也不知道它只是用于限定类型的。反编译一下这个 Caculate 类 public class Caculate{public Caculate(){}private Object num; } 发现编译器擦除 Caculate 类后面的两个尖括号并且将 num 的类型定义为 Object 类型。 那么是不是所有的泛型类型都以 Object 进行擦除呢大部分情况下泛型类型都会以 Object 进行替换而有一种情况则不是。那就是使用到了extends和super语法的有界类型如 public class CaculateT extends String {private T num; } 这种情况的泛型类型num 会被替换为 String 而不再是 Object。这是一个类型限定的语法它限定 T 是 String 或者 String 的子类也就是你构建 Caculate 实例的时候只能限定 T 为 String 或者 String 的子类所以无论你限定 T 为什么类型String 都是父类不会出现类型不匹配的问题于是可以使用 String 进行类型擦除。 实际上编译器会正常的将使用泛型的地方编译并进行类型擦除然后返回实例。但是除此之外的是如果构建泛型实例时使用了泛型语法那么编译器将标记该实例并关注该实例后续所有方法的调用每次调用前都进行安全检查非指定类型的方法都不能调用成功。 实际上编译器不仅关注一个泛型方法的调用它还会为某些返回值为限定的泛型类型的方法进行强制类型转换由于类型擦除返回值为泛型类型的方法都会擦除成 Object 类型当这些方法被调用后编译器会额外插入一行 checkcast 指令用于强制类型转换。这一个过程就叫做『泛型翻译』。 4.什么是泛型中的限定通配符和非限定通配符 ? 限定通配符对类型进行了限制。有两种限定通配符一种是? extends T它通过确保类型必须是T的子类来设定类型的上界另一种是? super T它通过确保类型必须是T的父类来设定类型的下界。泛型类型必须用限定内的类型来进行初始化否则会导致编译错误。 非限定通配符 ,可以用任意类型来替代。如List? 的意思是这个集合是一个可以持有任意类型的集合它可以是ListA也可以是ListB,或者ListC等等。 5. List? extends T和List ? super T之间有什么区别 ? 这两个List的声明都是限定通配符的例子List? extends T可以接受任何继承自T的类型的List而List? super T可以接受任何T的父类构成的List。例如List? extends Number可以接受ListInteger或ListFloat。 6. 可以把ListString传递给一个接受ListObject参数的方法吗 不可以。真这样做的话会导致编译错误。因为ListObject可以存储任何类型的对象包括String, Integer等等而ListString却只能用来存储String。  ListObject objectList; ListString stringList; objectList stringList; //compilation error incompatible types 7. Array中可以用泛型吗? 不可以。这也是为什么 Joshua Bloch 在 《Effective Java》一书中建议使用 List 来代替 Array因为 List 可以提供编译期的类型安全保证而 Array 却不能。 8. 判断ArrayListString与ArrayListInteger是否相等 ArrayListString a new ArrayListString(); ArrayListInteger b new ArrayListInteger(); Class c1 a.getClass(); Class c2 b.getClass(); System.out.println(c1 c2); 输出的结果是 true。因为无论对于 ArrayList 还是 ArrayList它们的 Class 类型都是一直的都是 ArrayList.class。那它们声明时指定的 String 和 Integer 到底体现在哪里呢 答案是体现在类编译的时候。当 JVM 进行类编译时会进行泛型检查如果一个集合被声明为 String 类型那么它往该集合存取数据的时候就会对数据进行判断从而避免存入或取出错误的数据。 二、序列化 1. Java序列化与反序列化是什么 Java序列化是指把Java对象转换为字节序列的过程而Java反序列化是指把字节序列恢复为Java对象的过程 序列化序列化是把对象转换成有序字节流以便在网络上传输或者保存在本地文件中。核心作用是对象状态的保存与重建。我们都知道Java对象是保存在JVM的堆内存中的也就是说如果JVM堆不存在了那么对象也就跟着消失了。 而序列化提供了一种方案可以让你在即使JVM停机的情况下也能把对象保存下来的方案。就像我们平时用的U盘一样。把Java对象序列化成可存储或传输的形式如二进制流比如保存在文件中。这样当再次需要这个对象的时候从文件中读取出二进制流再从二进制流中反序列化出对象。 反序列化客户端从文件中或网络上获得序列化后的对象字节流根据字节流中所保存的对象状态及描述信息通过反序列化重建对象。 2. 为什么需要序列化与反序列化 简要描述对内存中的对象进行持久化或网络传输, 这个时候都需要序列化和反序列化 深入描述 1对象序列化可以实现分布式对象。 主要应用例如RMI(即远程调用Remote Method Invocation)要利用对象序列化运行远程主机上的服务就像在本地机上运行对象时一样。 2java对象序列化不仅保留一个对象的数据而且递归保存对象引用的每个对象的数据。 可以将整个对象层次写入字节流中可以保存在文件中或在网络连接上传递。利用对象序列化可以进行对象的深复制即复制对象本身及引用的对象本身。序列化一个对象可能得到整个对象序列。 3序列化可以将内存中的类写入文件或数据库中。 比如将某个类序列化后存为文件下次读取时只需将文件中的数据反序列化就可以将原先的类还原到内存中。也可以将类序列化为流数据进行传输。 总的来说就是将一个已经实例化的类转成文件存储下次需要实例化的时候只要反序列化即可将类实例化到内存中并保留序列化时类中的所有变量和状态。 4对象、文件、数据有许多不同的格式很难统一传输和保存。 序列化以后就都是字节流了无论原来是什么东西都能变成一样的东西就可以进行通用的格式传输或保存传输结束以后要再次使用就进行反序列化还原这样对象还是对象文件还是文件。 3. 序列化实现的方式有哪些 实现Serializable接口或者Externalizable接口。 3.1 Serializable接口 类通过实现 java.io.Serializable 接口以启用其序列化功能。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段仅用于标识可序列化的语义。 如以下例子 import java.io.Serializable;public class User implements Serializable {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name name;}Overridepublic String toString() {return User{ name name };} } 通过下面的代码进行序列化及反序列化 public class SerializableDemo {public static void main(String[] args) {//Initializes The ObjectUser user new User();user.setName(cosen);System.out.println(user);//Write Obj to Filetry (FileOutputStream fos new FileOutputStream(tempFile); ObjectOutputStream oos new ObjectOutputStream(fos)) {oos.writeObject(user);} catch (IOException e) {e.printStackTrace();}//Read Obj from FileFile file new File(tempFile);try (ObjectInputStream ois new ObjectInputStream(new FileInputStream(file))) {User newUser (User)ois.readObject();System.out.println(newUser);} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}} }//OutPut: //User{namecosen} //User{namecosen} 3.2 Externalizable接口 Externalizable继承自Serializable该接口中定义了两个抽象方法writeExternal()与readExternal()。 当使用Externalizable接口来进行序列化与反序列化的时候需要开发人员重写writeExternal()与readExternal()方法。否则所有变量的值都会变成默认值。 public class User implements Externalizable {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name name;}public void writeExternal(ObjectOutput out) throws IOException {out.writeObject(name);}public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {name (String) in.readObject();}Overridepublic String toString() {return User{ name name };} } 通过下面的代码进行序列化及反序列化 public class ExternalizableDemo1 {public static void main(String[] args) {//Write Obj to fileUser user new User();user.setName(cosen);try(ObjectOutputStream oos new ObjectOutputStream(new FileOutputStream(tempFile))){oos.writeObject(user);} catch (IOException e) {e.printStackTrace();}//Read Obj from fileFile file new File(tempFile);try(ObjectInputStream ois new ObjectInputStream(new FileInputStream(file))){User newInstance (User) ois.readObject();//outputSystem.out.println(newInstance);} catch (IOException | ClassNotFoundException e ) {e.printStackTrace();}} }//OutPut: //User{namecosen} 3.3 两种序列化的对比 4. 什么是serialVersionUID serialVersionUID 用来表明类的不同版本间的兼容性 Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较如果相同就认为是一致的可以进行反序列化否则就会出现序列化版本不一致的异常。 5. 为什么还要显示指定serialVersionUID的值? 如果不显示指定serialVersionUID, JVM在序列化时会根据属性自动生成一个serialVersionUID, 然后与属性一起序列化, 再进行持久化或网络传输. 在反序列化时, JVM会再根据属性自动生成一个新版serialVersionUID, 然后将这个新版serialVersionUID与序列化时生成的旧版serialVersionUID进行比较, 如果相同则反序列化成功, 否则报错. 如果显示指定了, JVM在序列化和反序列化时仍然都会生成一个serialVersionUID, 但值为我们显示指定的值, 这样在反序列化时新旧版本的serialVersionUID就一致了. 在实际开发中, 不显示指定serialVersionUID的情况会导致什么问题? 如果我们的类写完后不再修改, 那当然不会有问题, 但这在实际开发中是不可能的, 我们的类会不断迭代, 一旦类被修改了, 那旧对象反序列化就会报错. 所以在实际开发中, 我们都会显示指定一个serialVersionUID, 值是多少无所谓, 只要不变就行。 6. Java 序列化中如果有些字段不想进行序列化怎么办 对于不想进行序列化的变量使用 transient 关键字修饰。 transient 关键字的作用是控制变量的序列化在变量声明前加上该关键字可以阻止该变量被序列化到文件中在被反序列化后transient 变量的值被设为初始值如 int 型的是 0对象型的是 null。transient 只能修饰变量不能修饰类和方法。 7. 静态变量会被序列化吗? 不会。因为序列化是针对对象而言的, 而静态变量优先于对象存在, 随着类的加载而加载, 所以不会被序列化. 看到这个结论, 是不是有人会问, serialVersionUID也被static修饰, 为什么serialVersionUID会被序列化? 其实serialVersionUID属性并没有被序列化, JVM在序列化对象时会自动生成一个serialVersionUID, 然后将我们显示指定的serialVersionUID属性值赋给自动生成的serialVersionUID。
http://www.tj-hxxt.cn/news/135447.html

相关文章:

  • 网站公司排行榜长沙微信群
  • 色一把做最好的网站南宁制作网站服务商
  • 武进网站建设机构做名宿比较好的网站
  • 网站收款即时到账怎么做的如何选择南京网站建设
  • 品牌网站建设内容网站开发服务计入什么科目
  • 怎么给网站刷流量wordpress编辑器自动加p标签
  • 唐山公司网站建设 中企动力济南哪家公司做网站好
  • 深圳市网站建设制作设计品牌怎么自己做彩票网站
  • 网站自动更新时间代码wordpress哪个主题适合做网址导航
  • 哪些网站有搜索引擎作弊的呼和浩特公司做网站
  • 青岛设计网站的公司哪家好下载的网站模板怎么编辑
  • 网站建设绿茶a站怎么进
  • 河南商务学校网站建设学建筑设计出来能干嘛
  • 公司网站建设手机端跟PC端陕西网站制作电话
  • 衡阳商城网站制作免费下优化大师
  • 贵阳网站设计报价青岛公司网站建设公司
  • 信息发布网站开发wordpress分类目录双列显示
  • 网站关键词优化案例城市分站cms
  • 网站后台用什么语言xampp wordpress 建站
  • 一个网站能放多少关键词国企招聘网最新招聘2023
  • 怎么评价一个网站做的好否seo 公司
  • 网站开发维护的好处网络营销策略方案
  • 网站后台html模板网站推广多少钱一年
  • 松江醉白池网站建设竖排导航网站
  • 企业网站规划方案图片在线制作二维码
  • 做环保的网站有哪些icp网站备案流程
  • 有什么比较好的画册设计网站西宁制作网站多少钱
  • wordpress 导购站模板面包网站seo
  • 连锁销售网站制作取公司名大全 最新版
  • 让网站排名下降网站如何运营维护