泛型

类加载器、反射

杀马特。学长 韩版系。学妹 提交于 2019-12-17 10:32:26
第1章 类加载器 当你的文件编译的时候会产生class文件,当运行文件的时候class文件会被加载到方法与数据共享区,这个时候,当一进入方法与数据共享区的时候会由 类的加载器 负责在堆里面创建一个对象(字节码文件对象) New的是和这个不一样的,new可以new很多个,但是字节码文件对象我们控制不了,是又累的加载器创建的( 只创建一个 ) 静态同步方法中的锁对象是 类名.class ,因为他优先于静态 1.1 类的加载 l 加载 就是指将class文件读入内存,并为之创建一个Class对象。( 文件字节码 ) 任何类被使用时系统都会建立一个Class对象 l 连接 验证 是否有正确的内部结构,并和其他类协调一致 准备 负责为类的静态成员分配内存,并设置默认初始化值(静态初始化) 解析 将类的二进制数据中的符号引用替换为直接引用( int a=1/a是符号引用,1是直接引用 ) l 初始化 就是我们以前讲过的初始化步骤 1.2 类初始化时机 1. 创建类的实例( new一个类的对象的时候 ) 2. 类的静态变量,或者为静态变量赋值( 访问某个类的静态变量或者给他赋值的时候 ) 这个时候Demo01进内存,Math也进内存,并且创建字节码文件对象( 访问静态 ) 3. 类的静态方法( 只要用到类的静态变量就进内存 ) 4. 使用反射方式来强制创建某个类或接口对应的java.lang

Java中的泛型方法

妖精的绣舞 提交于 2019-12-17 06:18:57
泛型是什么意思在这就不多说了,而Java中泛型类的定义也比较简单,例如:public class Test<T>{}。这样就定义了一个泛型类Test,在实例化该类时,必须指明泛型T的具体类型,例如:Test<Object> t = new Test<Object>();,指明泛型T的类型为Object。 但是Java中的泛型方法就比较复杂了。 泛型类,是在实例化类的时候指明泛型的具体类型;泛型方法,是在调用方法的时候指明泛型的具体类型。 定义泛型方法 语法格式如下: 调用泛型方法 语法格式如下: 说明一下,定义泛型方法时,必须在返回值前边加一个<T>,来声明这是一个泛型方法,持有一个泛型T,然后才可以用泛型T作为方法的返回值。 Class<T>的作用就是指明泛型的具体类型,而Class<T>类型的变量c,可以用来创建泛型类的对象。 为什么要用变量c来创建对象呢?既然是泛型方法,就代表着我们不知道具体的类型是什么,也不知道构造方法如何,因此没有办法去new一个对象,但可以利用变量c的newInstance方法去创建对象,也就是利用反射创建对象。 泛型方法要求的参数是Class<T>类型,而Class.forName()方法的返回值也是Class<T>,因此可以用Class.forName()作为参数。其中,forName()方法中的参数是何种类型,返回的Class<T>就是何种类型

Java中的泛型和包装类

拜拜、爱过 提交于 2019-12-17 04:27:42
泛型 包装类 泛型 1、泛型的定义: public class MyArrayList<E> { private E[] array; ... } <>是泛型的标志 E是类型变量,变量名一般要大写 E在定义时是形参,代表 MyArrayList最终传入的类型,现在还不知道 2、泛型的意义: public class MyArrayList<T> { public T[] elem; public int usedSize; public MyArrayList() { //this.elem = new T[10]; this.elem = (T[])new Object[10]; //注意要这样写 this.usedSize = 0; } public void add(T data) { this.elem[this.usedSize] = data; this.usedSize++; } public T get() { return this.elem[this.usedSize-1]; } } 当我们编写这样的代码: MyArrayList<String> myArrayList = new MyArrayList<>(); myArrayList.add("Java"); myArrayList.add(2); //报错 String ret = myArrayList

TypeScript 入门笔记

夙愿已清 提交于 2019-12-17 01:32:49
1、原始数据类型 JavaScript 的类型分为两种:原始数据类型和对象数据类型。原始数据类型包括布尔值、数值、字符串、null、undefined 以及 ES6 中的 Symbol。 前五种数据类型在 TypeScript 中的应用。 注意布尔值:在 JavaScript 中,boolean 是一种基本的数据类型,Boolean 是一个将布尔值打包的布尔对象。在 TypeScript 中,boolean 也是基本数据类型,但是 Boolean 是构造函数。 2、在 TypeScript 中: * 二进制或八进制表示的数字会被编译成十进制。 * 可以用 void 表示没有返回值的函数。 * 任意值(Any)用来 表示允许赋值为任意类型。在任意值上可以访问任何属性和方法。未指定类型的无初始值的变量会被识别为任意值。 * 联合类型(使用 | 分隔)表示取值可以为多种类型中的一种。当 ts 不确定一个联合属性的变量是哪个类型的时候,只能访问联合类型里的共有属性和方法。 3、对象的类型——接口 接口名一般首字母大写 <template> interface InterfaceName { readonly propName: type; // 用 readonly 定义只读属性 propertyName1: type1; // : 表示该属性必需 propertyName2?:

C#集合

梦想的初衷 提交于 2019-12-17 00:44:30
集合 (Collection)类是专门用于数据存储和检索的类。这些类提供了对 栈(stack) 、 队列(queue) 、 列表(list) 和**哈希表(hash table)**的支持。大多数集合类实现了相同的接口集合类服务于不同的目的,如为元素动态分配内存,基于索引访问列表项等等。这些类创建Object类的对 象的集合。在C#中,Object类是所有数据类型的基类。 常用的集合类 类 描述和用法 动态数组(ArrayList) 它代表了可被单独索引的对象的有序集合。它基本上可以替代一个数组。但是,与数组不同的是,您可以使用索引在指定的位置添加和移除项目,动态数组会自动重新调整它的大小。它也允许在列表中进行动态内存分配、增加、搜索、排序各项。 哈希表(Hasht able) 它使用键来访问集合中的元素。当您使用键访问元素时,则使用哈希表,而且您可以识别一个有用的键值。哈希表中的每一项都有一个键/值对。键用于访问集合中的项目。 排序列表(Sorte dList) 它可以使用键和索引来访问列表中的项。排序列表是数组和哈希表的组合。它包含一个可使用键或索引访问 各项的列表。如果您使用索引访问各项,则它是一个动态数组(ArrayList),如果您使用键访问各项,则 它是一个哈希表(Hashtable)。集合中的各项总是按键值排序。 堆栈(Stack) 它代表了一个后进先出的对象集合

java基础-泛型

て烟熏妆下的殇ゞ 提交于 2019-12-17 00:39:09
泛型 泛型 : 要解决的是类型安全问题 使用 : 在类型后面<泛型类型> **1.Collection集合和Map集合的区别是什么? Map集合存放的对象有什么特点? 列出Map中常用的方法,包括对象的保存,提取等. Collection 集合保存的是一个一个的对象 Map 集合保存的是一对一对的对象, 键值对映射对象, 键到值是单向一对一映射, 键必须唯一, 无序. Map<K, V> map = ?; // K是键对象的类型, V是值对象的类型 V put(K key, V value); // put(1,”1”); put(1,”one”); 返回值是老值对象 V get(K key) Set keySet(); Set<Entry<K, V>> entrySet() V remove(K key); 2. 如何使用迭代器遍历一个集合? 写出代码. 并加上注释, 说明注意点. // 获取到迭代器对象, 从集合对象的方法获取 Collection col = ?; Iterator it = col.iterator();// 注意点1: 迭代器的使用必须马上进行. while (it.hasNext()) { T t = it.next();// 注意点2: next方法在循环中只能调用一次 // 访问t } HashSet和TreeSet分别是用什么方式判断两个对象重复?

初学Windows Phone:MVVM Light Toolkit

微笑、不失礼 提交于 2019-12-16 23:48:13
MVVM Light Toolkit是Silverlight开发中用到的最多的MVVM框架,虽然之前做了一些这方面的开发,但是一直都没有很好的研究,今天就做一个系统的学习,记录备查(主要因为本人E文太烂,看E文太废劲了)。 MVVM Light Toolkit的最新消息可以参考http://mvvmlight.codeplex.com/ 1.下载安装 基本要求就不多说了,可以参考:http://www.galasoft.ch/mvvm/installing/ “安装的先决条件”部分。 如果之前安装过其它版本,要先卸载掉,参考:http://www.galasoft.ch/mvvm/cleaning/ 我安装的是 MVVM Light Toolkit V4 beta 1(下载地址: http://mvvmlight.codeplex.com/releases/view/73208),下载完成后进行安装,除把安装路径改成合适的地方外,其它选项都是默认设置。过程如图 2.相关介绍 GalaSoft.MvvmLight 类库 ViewModelBase 类是ViewModels的基础类,在开发中ViewModls类都要继承自它。 Messenger类 用于应用程序的通信。接收者仅接受注册过的消息类型。此外,目标类型可以被指定,用Send<TMessgae,TTarget>(TMessage

java泛型详解

家住魔仙堡 提交于 2019-12-16 22:26:51
泛型 集合类的抽象数据类型的一个关键特性是我们应该可以用它们存储任意类型的数据。一种特别的Java机制可以做到这一点,它就是泛型。泛型也被称为“参数化类型”。就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。在每份API中,类名后的记号将E定义为一个类型参数,它一个象征性的占位符,表示的是用例将会使用的某种具体数据类型。 例如: public class ArrayStack<E> implements Stack<E>{} 在实现Stack时,我们并不知道E的具体类型,但是用例可以用我们的栈处理任意类型的数据,甚至是在我们的实现之后才出现的数据类型。在创建栈时,用例会提供一种具体的数据类型。我们可以将E替换为任意引用数据类型( E出现的每个地方都是如此)。 一些常用的泛型类型变量: E:元素(Element) K:关键字(Key) N:数字(Number) T:类型(Type) V:值(Value) 使用泛型的意义在于: 1,适用于多种数据类型执行相同的代码(代码复用) 2, 泛型中的类型在使用时指定,不需要强制类型转换(类型安全,编译器会检查类型) 泛型的使用方式分别为泛型类、泛型接口、泛型方法 泛型类:是在实例化类的时候指明泛型的具体类型; 泛型方法

19.1泛型

半世苍凉 提交于 2019-12-16 19:08:05
要点提示: 泛型可以使我们在编译时而不是在运行时检测出错误。 泛型可以参数化类型。这个能力可以使我们定义带反省类型的类或方法,然后编译器会用具体的类型来替换他。 使用Java 泛型的动机是在编译时检测出错误。 从jdk5开始,Java允许定义泛型类,泛型接口和泛型方法。 来源: https://www.cnblogs.com/cglib/p/11989374.html

泛型和Object的区别?

徘徊边缘 提交于 2019-12-16 10:45:27
泛型声明 public <T> T doSomeThing(T t){ return t; } Object声明 public Object doSomeThing(Object obj){ return obj; } 泛型引用 String result = doSomeThing("参数是String"); Object引用 String result = (String)doSomeThing("参数是String"); 使用泛型,有2个好处: 1.不需要做强制类型转换 2.编译时更安全。如果使用Object类的话,你没法保证返回的类型一定是Foo,也许是其它类型。这时你就会在运行时得到一个类型转换异常(ClassCastException) 来源: https://www.cnblogs.com/uzxin/p/12047316.html