简单泛型

一般的类和方法,只能使用具体的类型:要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。----《java Generics FAQ》

  多态算是一种泛化机制。例如,将方法的参数类型设为基类,那么该方法就可以接受从这个基类中导出的任何类作为参数。

泛型——java SE5,实现了参数化类型的概念,使代码可以应用于多种类型。

容器类——促成泛型出现的原因。

java SE5之前:

  public class Holder2{

    private Object a;

    public Hodler2(Object a){

      this.a=a;

    }

    public void set(Object a){

      this.a=a;

    }

    public Object get(){

      return a;

    }

  }

  Hodler2可以存储任何类型的数据,但是一个Hodler2对象却可以存储多种不同类型的数据。而通常我们只会使用容器来存储一种类型的数据。  

泛型的目的之一就是用来指定容器要持有什么类型的数据,而且由编译器来保证类型的正确性。

java SE5之后:

  public class Hodler3<T>{

    public T a;

    public Hodler3(T a){

      this.a=a;

    }

    public void set(T a){

      this.a=a;

    }

    public T get(){

      return a;

    }

  }

  将需要使用的类型参数,用尖括号括起,放在类名后面。

1、元组类库

  仅一次方法调用就能返回多个对象的决解方法——创建一个对象,用它来持有想要返回的多个对象。

  元组——将一组对象直接打包存储于其中的一个单一对象。这个容器对象允许读取其中元素,但是不允许向其中存放新的对象。

  2维元组:

    public class TwoTuple<A,B>{

      public final A first;

      public final B second;

      public TwoTuple(A a,B b){

        first=a;

        second=b;

      }

      public String toString(){

        return "("+first+","+second+")";

      }

    }

    如果使用具有不同元素的元组,就强制要求他们另外创建一个新的TwoTuple对象。

  使用继承机制实现长度更长的元组

    public class ThreeTuple<A,B,C> extends TwoTuple<A,B>{

      public final C third;

      public ThreeTuple(A a,B b,C c){

        super(a,b);

        third=c;

      }

      ...

    }

  使用元组:

    static TwoTuple<String,Integer> f(){

      return new TwoTuple<String,Integer>("hi",47);

    }

2、一个堆栈类

   public class LinkedStack<T>{

     private static class Node<U>{

       U item;

       Node<U> next;

       Node(){

         item=null;

         next=null; 

       }

       Node(U item,Node<U> next){

         this.item=item;

         this.next=next;

       }

       boolean end(){      //末端哨兵

         return item==null&&next==null;

       }

     }

     private Node<T> top=new Node<T>();

     public void push(T item){

       top=new Node<T>(item,top);

     }

     public T pop(){

       T result=top.item;

       if(!top.end())

         top=top.next;

       return result;

     }

   }

3、RandomList——每次调用select方法时,他可以随机地选取一个元素

  public class RandomList<T>{

    private ArrayList<T>storage=new ArrayList<T>();

    private Random rand=new Random(47);

    public void add(T item){

      storage.add(item);

    } 

    public T select(){

      return storage.get(rand.nextInt(storage.size()));

    }

  }

------------------------------------------------------------from:http://lavasoft.blog.51cto.com/62575/18771/-----------------------------------------------------------------------------------

附:java中final的作用——

  1、final修饰类——

    final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。

  2、final方法——

    如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。

    final方法的使用原因:

      把方法锁定,防止任何继承类修改它的意义和实现。

      高效。编译器遇到调用final方法时候会转入内嵌机制,大大提高执行效率。

  3、final变量——

    用final修饰的成员变量表示常量,值一旦给定就无法改变。

  4、final参数——

    当函数的参数为final时,可以读取不可修改。

注意:final类不能用于修饰构造方法。

   父类private成员方法是不能被子类方法覆盖的,因此private类型的方法默认都是final类的。

java中static的作用——

  1、static变量

    被static修饰的变量称为静态变量或类变量。没被static修饰的变量称为实例变量。两者区别:

      静态变量在内存中只有一个拷贝(节省内存),JVM只为静态变量分配一次内存,在加载类的过程中完成静态变量的内存分配。可用类名直接访问,也可通过对象访问(不推荐)。

      对于实例变量,每创建一个实例就会为示例分配一次内存,实例变量在内存中有多个拷贝,互不影响。

  2、静态方法

      静态方法可以通过类名调用,任何实例也可以调用,因此静态方法中不能用this和super关键字。不能直接访问所属类的实例变量和实例方法,只能访问所属类的成员变量和成员方法。

      因为static方法独立于任何实例,因此static方法必须被实现,不能时abstract。

  3、静态代码块

      static代码块也叫静态代码块,不在任何的方法体内,JVM加载类时会执行这些代码块,如果静态代码块有多个,JVM将会按照它们在类中出现的顺序依次执行,每个代码块只会被执行一次。

注意:static变量之前加private修饰,表示这个变量不能在其他类中通过类名直接引用。

  4、final+static——“全局变量”

     对于变量,表示一旦给值就不能修改,并且通过类名来访问。

     对于方法,表示不可覆盖,并且可以通过类名来访问。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

转载于:https://www.cnblogs.com/Wan-notes/p/6795308.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

weui-react项目实战新心得

weui-react简介 weui是微信官方制作的一个基础样式UI库&#xff0c;打造与原生微信同样的视觉和交互体验&#xff0c;整个UI库包括网页版和小程序版&#xff0c;网页版包括传统的javascript版和react版本。 个人对react的偏爱超过传统js版本&#xff0c;就用了react版本做为自己…

《ASP.NET Core 6框架揭秘》实例演示[10]:Options基本编程模式

依赖注入使我们可以将依赖的功能定义成服务&#xff0c;最终以一种松耦合的形式注入消费该功能的组件或者服务中。除了可以采用依赖注入的形式消费承载某种功能的服务&#xff0c;还可以采用相同的方式消费承载配置数据的Options对象&#xff0c;这篇文章演示几种典型的编程模式…

实现仿简书选取内容生成分享图片效果

前几天脑子里忽然闪过简书的图片分享效果&#xff0c;感觉很简洁也很漂亮&#xff0c;想着能不能用自己方式实现一下呢&#xff0c;于是今天就有了这篇文章。好了&#xff0c;先看下效果图吧&#xff1a; 项目地址: https://github.com/zhangke301... 欢迎star、issues~ 实现这…

千万级可观测数据采集器--iLogtail代码完整开源

2022年6月29日&#xff0c;阿里云iLogtail开源后迎来首次重大更新&#xff0c;正式发布完整功能的iLogtail社区版。本次更新开源全部C核心代码&#xff0c;该版本在内核能力上首次对齐企业版&#xff0c;开发者可以构建出与企业版性能相当的iLogtail云原生可观测性数据采集器。…

Java8新特性--CompletableFuture

并发与并行 Java 5并发库主要关注于异步任务的处理&#xff0c;它采用了这样一种模式&#xff0c;producer线程创建任务并且利用阻塞队列将其传递给任务的consumer。这种模型在Java 7和8中进一步发展&#xff0c;并且开始支持另外一种风格的任务执行&#xff0c;那就是将任务的…

python list对象

def append(self, p_object): # real signature unknown; restored from __doc__ """ L.append(object) -> None -- append object to end """ passappend函数将字符串插入到列表自身的末尾def clear(self): # real signature unknown; resto…

用 MAUI 在Windows 和 Linux 绘制 PPT 图表

我在做一个图表工具软件&#xff0c;这个软件使用 MAUI 开发。我的需求是图表的内容需要和 PPT 的图表对接&#xff0c;需要用到 OpenXML 解析 PPT 内容&#xff0c;读取到 PPT 图表元素的内容&#xff0c;接着使用 MAUI 渲染层绘制图表元素。图表工具软件需要在 Windows 平台和…

初窥Servlet

1. Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术。sun公司在其API中提供了一个servlet接口&#xff0c;用户若想要发一个动态web资源&#xff0c;只需要完成以下两步即可&#xff1a; 1&#xff09;编写一个servlet&#xff0c;即实现servlet接口的Java类…

聊聊接口性能优化的11个小技巧

前言 接口性能优化对于从事后端开发的同学来说&#xff0c;肯定再熟悉不过了&#xff0c;因为它是一个跟开发语言无关的公共问题。 该问题说简单也简单&#xff0c;说复杂也复杂。 有时候&#xff0c;只需加个索引就能解决问题。 有时候&#xff0c;需要做代码重构。 有时…

三元表达式,递归,匿名函数,内置函数

一 、三元表达式 只应用于条件成立返回一个值&#xff0c;条件不成立返回另一个值。   示例&#xff1a;    nameinput(姓名>>: )    resSB if name alex else NB    print(res) 注&#xff1a;通常使用场合为特别简单一眼读懂的地方。二…

ElasticSearch远程随意代码运行漏洞(CVE-2014-3120)分析

原理 这个漏洞实际上非常easy&#xff0c;ElasticSearch有脚本运行(scripting)的功能&#xff0c;能够非常方便地对查询出来的数据再加工处理。 ElasticSearch用的脚本引擎是MVEL&#xff0c;这个引擎没有做不论什么的防护&#xff0c;或者沙盒包装&#xff0c;所以直接能够运行…

《Effective Java》—— 对于所有对象都通用的方法

本节主要涉及Object中通用的一些方法&#xff0c;比如equals,hashCode,toString,clone,finalize等等 覆盖equals时请遵守通用约定 equals方法实现的等价关系&#xff1a; 自反性&#xff1a;对于所有的非null&#xff0c;aa对称性&#xff1a;ab,则ba传递性&#xff1a;ab,bc,则…

.net core实现读取自定义配置文件

背景在.net core类库中读取配置文件&#xff0c;正常来讲我们在应用程序目录下有个appsettings.json文件对于相关配置都会放在这个json文件中&#xff0c;但是要是建立一个类库项目&#xff0c;对于一些配置比如密钥或者其他需要硬编码的数据放在JSON文件中&#xff0c;在.net …

Java中ArrayList,LinkedList,Vector三者的异同点及其使用场景和ArrayList的一些常用方法

相同点&#xff1a;三者存储的都是有序&#xff0c;可重复的数据。 异&#xff1a; ①&#xff1a;ArrayList底层存储类型是Object数组&#xff0c;而LinkedList底层是双向链表 ②&#xff1a;ArrayList和Vector调用创建空参构造器创建对象时&#xff0c;默认的size是10&…

第二百四十六节,Bootstrap弹出框和警告框插件

Bootstrap弹出框和警告框插件 学习要点&#xff1a; 1.弹出框 2.警告框 本节课我们主要学习一下 Bootstrap 中的弹出框和警告框插件。 一&#xff0e;弹出框 弹出框即点击一个元素弹出一个包含标题和内容的容器。 基本用法 注意&#xff1a;必须在js结合popover()方法使用 da…

Intellij IDEA2017 的控制台里不识别maven命令问题处理

2019独角兽企业重金招聘Python工程师标准>>> cmd里运行 mvn -v可以显示出maven的版本信息&#xff0c;可是在IDEA的控制台里却提示不识别maven命令&#xff0c;此情况以管理员的身份运行IDEA即可。 转载于:https://my.oschina.net/u/2364025/blog/1788797

使用IDEA 提交代码到svn

2019独角兽企业重金招聘Python工程师标准>>> 新手第一次使用教程&#xff1a; 一、安装svn TortoiseSVN是个客户端&#xff0c;需要安装VisualSVN服务端。 二、IDEA配置&#xff08;Ctrl alt S&#xff09; 需要配置服务端svn.exe文件。 三、上传代码 svn路径&…

如何在 BackgroundService 获取 ASP.NET Core 启动地址

前言上次&#xff0c;我们介绍了《如何获取 ASP.NET Core 启动地址》。但是&#xff0c;如果要在 BackgroundService 中获取启动地址可不那么容易&#xff0c;因为 BackgroundService 在 app 启动前就开始执行了:var builder WebApplication.CreateBuilder(args); builder.Ser…

JDK8 循环遍历list

简介 Java 8 API添加了一个新的抽象称为流Stream&#xff0c;可以让你以一种声明的方式处理数据。Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。 这种风格将要处理的元素集合看作一种流&#xff0c; 流在管道中传输&…

2016 校园招聘求职经历(二)

概述 航信是一家国企&#xff0c;给人的印象是比较踏实&#xff0c;不过也感觉缺乏活跃性。我是航信第一批校招去&#xff0c;同样它也是我面试的第一家公司。 宣讲会 9月27日&#xff0c;下午2&#xff1a;30开始宣讲会&#xff0c;大约持续了30分钟左右&#xff0c;整个感觉是…