1、泛型 > 泛型一般结合集合类又叫容器类(Colletion)来使用
ArrayList<String> nameList=new ArrayList<String>();
2、泛型的类型可以向上转型
public class 泛型 {
// 泛型
public static void main(String[] args) {
ArrayList<Person> list=new ArrayList<Person>();
list.add(new Teacher("s001"));
}
}
class Person{
String name;
int age;
}
class Teacher extends Person{
String ID;
Teacher(String id){
ID=id;
System.out.println(ID);
}
}
运行结果:s001
list里能容纳Person类型的对象,其中Person的子类Teacher也可以被视为Person类所以也能被容纳进去
二、 java容器类的作用是“保存对象”,可分为:
1.Colletion:Collection是最基本的集合接口,List:“有序” ,Set:"唯一",
2. Map:接口,一组成对的“键值对”对象,允许你使用键来查找值。
java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。
java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。
所有通用的 Collection 实现类(通常通过它的一个子接口间接实现 Collection)应该提供两个“标准”构造方法:一个是 void(无参数)构造方法,用于创建空 collection;另一个是带有 Collection 类型单参数的构造方法,用于创建一个具有与其参数相同元素新的 collection。实际上,后者允许用户复制任何 collection,以生成所需实现类型的一个等效 collection
2.1 添加一组元素
java.util包中的Arrays和Colletions类中有很多方法可以在一个Colletion中添加一组元素。
1.Arrays.asList()方法接受一个数组或者是一个用逗号分隔的元素列表(使用可变参数),并将其转换为一个List对象
数组转list: //Arrays.asList()用法
String[] name={"物流","希沃"};
List<String> nameList=Arrays.asList(name); //使用这种方法得到的List对象nameList不能使用add()方法和remove()方法,除非确定Lis对象长度不再改变否则慎用。
System.out.println(nameList.get(0));
List<Integer> intList =new ArrayList<Integer>(Arrays.asList(1,2,3)); //Colletions构造器可以接受另一个Colletion用它来初始化,asList()获得一个List对象,向上转型为Colletion类型并作为ArrayList构造器的参数初始化。
System.out.println(intList.get(1));
intList.add(4); //正常使用add()
System.out.println(intList.get(3));
2.Colletions.addAll()方法接受一个Colletion对象,以及一个数组或者是一个用逗号分隔的列表,将元素添加到Colletion中
List<String> name=new ArrayList<String>();
System.out.println(name.size());
Collections.addAll(name, "李四","王五");
System.out.println(name.size());
addAll()方法将所有指定元素添加到指定 collection 中
总结动态绑定(多态):动态绑定是指在“执行期间”(而非编译期间)判断所引用的实际对象类型,根据其实际的类型调用其相应的方法。所以实际当中找要调用的方法时是动态的去找的,new的是谁就找谁的方法,这就叫动态绑定。动态绑定帮助我们的程序的可扩展性达到了极致。
多态的存在有三个必要的条件:
要有继承(两个类之间存在继承关系,子类继承父类)
要有重写(在子类里面重写从父类继承下来的方法)
父类引用指向子类对象
重载规则:无论是构造方法还是成员方法重载必须有一个独一无二的参数类型列表,不能根据方法的返回值来区分方法。
如果传入的数据类型(实参)小于方法中声明的形参类型,实参就会被提升。如果是char,会被提升为int型。
public class Text {
public static void main(String[] args) {
int b=1;
Person p=new Person(b);
}}
class Person{
Person(double a){
System.out.println(a);
}
}<br>结果:<br>1.0
Person类的构造方法生命的形参是double类型的,而实际int b=1; Person p=new Person(b); 传给构造方法的是int型,int型会被自动提升为double类型.
foreac遍历、break和countinue以及标签和switch循环
foreach语法,表示不必创建int变量去对由访问项构成的序列进行计数,foreach将自动产生每一项。
例:输出数组的所有元素。
float f[]=new float[5];
f[0]=1.0f;
f[1]=2.0f;
f[2]=3.0f;
f[3]=4.0f;
f[4]=5.0f;
for(float x:f)
System.out.println(x);
解:for(float x:f) foreach语句,定义了一个float类型的变量x,然后将数组f中的每一个元素赋给x。
foreach可用于任何Iterable对象。
switch循环:
int a=1;
switch(a)
{
case 1: System.out.println("aaa123"); break;
default:System.out.println("null");
}<br><br>//a不能是float或者double类型,可以是int、char、String类型
网友评论