Java学习第十一天

关于Properties类:

代码:

package lesson10;
import java.util.*;
import java.io.*;
class Test 
{
	public static void main(String[] args) throws Exception
	{
		Properties pro1 = new Properties();//由于Properties继承自Hashtable,所以,里面的键值对每次读取顺序可能不一样。
		pro1.setProperty("username","128128001");
		pro1.setProperty("password","inklo888");
		pro1.setProperty("displayname","你人");

		//为了不出现乱码,建议保存为xml,因为可以指定字符集
		pro1.storeToXML(new FileOutputStream("m.xml"),"启动配置","gb2312");
		
		System.out.println(pro1);

		System.out.println("***************************************");

		Properties pro2 = new Properties();
		pro2.setProperty("Gender","男");
		//与storeToXML()相对应,加载时请用loadFromXML()
		pro2.loadFromXML(new FileInputStream("m.xml"));

		System.out.println(pro2);
	}
}


运行结果:

所保存的xml文件内容:

<?xml version="1.0" encoding="GB2312" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>启动配置</comment>
<entry key="password">inklo888</entry>
<entry key="displayname">你人</entry>
<entry key="username">128128001</entry>
</properties>


 泛型:

无论实际参数(实参)是哪种类型,其实都是一个Class对象。例如ArrayList<String> r1 = new ArrayList<String>(); ArrayList<Integer> r2 = new ArrayList<Integer>(); r1.getClass()==r2.getClass() 结果是true。

这也说明在静态属性、静态初始化块、静态方法的声明中,不能使用泛型形参:因为此时可能根本不知道是哪种具体类型。

由于在系统中不会生成真正的泛型,所以 类似 c instanceof  List<String>是错误的。

泛型不能类型转换。例如test(List<Object> lst); 假若使用List<String> lst = new ArrayList<String>();调用test(lst);将出错。List<Object>与List<String>并不兼容。

微笑如果有一个类Person,很显然,他是Object的子类,也是IPerson(假设存在该接口,Person并实现了她)的子类,但对于泛型而言,则不成立。

例如:List<Person>并不是List<Object>或List<IPerson>的子类。

但通配符?是所有泛型的父类。例如test(List<?> lst)可以接受任何List的泛型类型。

但声明一个通配符引用,指向具体泛型,则该通配符引用不能用于执行包含泛型的操作。例如:List<?> lst = ArrayList<Integer>();lst.add(100);执行add时,出错。

其实,通配符?表示Object,所以,所有通过get返回的元素,否认都是Object。{假设返回类型为泛型}。但添加add时则需指明类型。得意

 

package lesson11;
import java.util.*;

class MyList<T>
{
        private static T info001;//error:不能在静态属性声明中使用泛型形参
	private T info ;
	public MyList()
	{
	}

	public MyList(T info)
	{
		this.info = info;
	}

	T getInfo()
	{
		return info;
	}

        //错误,不能在静态方法声明中使用泛型形参
        public static T getType()
        {
          return info;
        }
	
}

class A extends MyList<T>//Error 接口 抽象类 继承(实现),规则一样。
{
}


class A extends MyList<String>//Ok 接口 抽象类 继承(实现),规则一样。
{
}


class A extends MyList//Ok,默认变成Object类型 接口 抽象类 继承(实现),规则一样。
{
}


class Test 
{
	public static void main(String[] args) 
	{
     
	/* MyList hs = new MyList();
	 hs.add("Java高手");
	 hs.add("C#战舰");
	 hs.add("C++期间");
	 //hs.add(100);

	for(int i = 0 ; i < hs.size();i++ )
		{
		 System.out.println((String)hs.get(i));
     	}
		*/

		ArrayList<String> al = new ArrayList<String>();//泛型
		al.add("a");
		//al.add(new Object());
		System.out.println(al.get(0));

		MyList<String> c0 = new MyList<String>("同志们好");
		System.out.println(c0.getInfo());

		MyList c1 = new MyList(1008);//若不指定具体类型,则默认为Object
		System.out.println(c1.getInfo());

	}
}

 

泛型继承(实现)重写方法时,例如class A extends MyList<String>,public String getInfo()正确;但public Object getInfo()错误。要和声明一致!!
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值