文件结构
泛型与异常
异常
泛型与异常
异常
Class7b / com.test1 / Test.java /* * 功能:泛型的必要性 */ package com.test1; import java.util.ArrayList; public class Test { /** * @param args */ public static void main(String[] args) { //泛型 //System.out.println("a="+(1>>>2)); ArrayList<Dog> al=new ArrayList<Dog>();//将ArrayList转成对Dog的泛型 //创建一只狗 Dog dog1=new Dog(); //放入到集合 al.add(dog1); //取出 //Dog temp=(Dog)al.get(0); //Cat temp2=(Cat)al.get(0);//类型转换错误 Dog temp=al.get(0);//因为前定义了ArrayList对Dog泛型,所以不报错 } } class Dog { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } class Cat { private String color; private int age; public String getColor() { return color; } public void setColor(String color) { this.color = color; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } Class7b / com.test1 / Test2.java /* * java的反射机制,泛型的经典应用 */ package com.test1; import java.lang.reflect.Method; public class Test2 { /** * @param args */ public static void main(String[] args) { // Gen<String> gen1=new Gen<String>("aaa"); gen1.showTypeName(gen1); Gen<Integer> gen2=new Gen<Integer>(1); gen2.showTypeName(gen2); Gen<Bird> gen3=new Gen<Bird>(new Bird()); gen3.showTypeName(gen3); } } //定义一个类 class Gen<T> //定义的一种未知类型T,即泛型 { private T o;//用泛型定义一个变量(或对象) //构造函数 public Gen(T a) { o=a; } //得到T的类型名称 public void showTypeName(Gen<T> obj)//参数是泛型 { System.out.println("类型是:"+o.getClass().getName()); //通过反射机制,可以得到T这个类型的很多信息 Method[] m=o.getClass().getDeclaredMethods();//得到某个类型的函数 //打印 for(int i=0;i<m.length;i++) { System.out.println(m[i].getName()); } } } //定义一个Bird class Bird { public void test1() { System.out.println("aa"); } public void count(int a,int b) { System.out.println(a+b); } } /* *泛型的优点 *1.类型安全 *2.向后兼容 *3. 层次清晰 *4.性能较高,用Gj编写的代码可以为java编译器和虚拟机带来更多的类型信息。 * *泛型主要解决安全和代码重用的问题 *在没有泛型之前,通过对类型Object的引用来实现参数的"任意化","任意化" *带来的缺点是要做显式的类型转换,而这种转换是要求开发者对实际参数类型 *可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示 *错误 ,在运行时才出现异常,这是一个安全隐患。 *泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐 *式的,提高代码的重用率。 */ Class7b / com.test1 / Test3.java /* * 异常 */ package com.test1; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; public class Test3 { /** * @param args */ public static void main(String[] args) { //检查异常 //1.打开文件 FileReader fr=null; try { fr=new FileReader("d:\\1.txt"); //在出现异常的地方,就终止执行代码,然后进入到catch System.out.println("继续!"); Socket s=new Socket("192.168.111.111",78); } catch (Exception e1) {//采用Exception可以捕获所有异常,因为它是父类 //把异常的信息输出,利于排除bug System.out.println("\nException 内部"); System.out.println("message:="+e1.getMessage()); //System.exit(-1); //退出JVM e1.printStackTrace(); //处理 } finally //这个语句块,不管有没有异常都会执行 { System.out.println("\n进入finally!"); //一般说,把需要关闭的资源[文件,连接,内存....] if(fr!=null) { try { fr.close(); } catch (Exception e) { e.printStackTrace(); } } } //2.连接一个192.168.12.12 ip的端口号4567 try { Socket s=new Socket("192.168.1.23",78); } catch (UnknownHostException e) { System.out.println("\nUnknownHostException 内部"); e.printStackTrace(); } catch (IOException e) { //如果有多个catch语句,则进入匹配异常的那个 System.out.println("\nIOException 内部"); e.printStackTrace(); } //3.运行异常 try { int a=4/0; }catch(ArithmeticException e) { e.printStackTrace(); } System.out.println("ok1"); } } Class7b / com.test1 / Test4.java package com.test1; import java.io.FileNotFoundException; import java.io.FileReader; public class Test4 { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { //异常抛给JVM去处理 //创建一个Father Father father=new Father(); father.test1(); } } class Father { private Son son=null; public Father() { son=new Son(); } public void test1() throws Exception { //异常抛给调用者(main函数)去处理 System.out.println("1"); /* try { son.test2(); } catch (Exception e) { System.out.println("\n父亲在处理!"); e.printStackTrace(); } */ son.test2(); } } class Son { public void test2() throws FileNotFoundException { //异常抛给调用者(Father.test1函数)去处理 FileReader fr=null; fr=new FileReader("d:\\dd.txt"); } } 两个练习 HomeWork / com.test1 / Test1.java /* * 跳水比赛,8个评委打分。运动员的成绩是8个成绩取掉一个最高分, * 去掉一个最低分,剩下的6个分数的平均分就是最后得分。使用一维 * 数组实现打分功能。 * 找出最佳与最差评委 */ package com.test1; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Test1 { /** * @param args */ public static void main(String[] args) { // Judge judge=new Judge(); System.out.println("平均分是:"+judge.lastFen()); System.out.println("最差的裁判是:"+(judge.getWorst()+1)); } } class Judge { //定义可以存放8个小数的数组 float fens[]=null; int size=3; //构造函数 public Judge() { fens=new float[size]; //初始化 InputStreamReader isr=new InputStreamReader(System.in);//读取控制台数据存到输入流 BufferedReader br=new BufferedReader(isr);//将数据从输入流存到Buf流中 try { for(int i=0;i<fens.length;i++) { System.out.println("请输入第"+(i+1)+"裁判的分数:"); fens[i]=Float.parseFloat(br.readLine()); } } catch (Exception e) { e.printStackTrace(); } finally //关闭IO流 { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } //1.去掉最低分(目的找到最低分的下标) public int getLowFenIndex() { //选择法 //认为第一个就是最低 float minFen=fens[0]; int minIndex=0; for(int i=1;i<fens.length;i++) { if(minFen>fens[i]); { //修改最低分 minFen=fens[i]; minIndex=i; } } return minIndex; } //2.去掉最高分(目的找到最高分的下标) //2.去掉最高分(目的找到最高分的下标) public int getHighFenIndex() { //选择法 //认为第一个就是最高 float maxFen=fens[0]; int maxIndex=0; for(int i=1;i<fens.length;i++) { if(maxFen<fens[i]) { //修改最高分 maxFen=fens[i]; maxIndex=i; } } return maxIndex; } //3.得到平均分 //3.得到运动员的最后得分 public float lastFen() { float allFen=0; int minIndex=this.getLowFenIndex(); int maxIndex=this.getHighFenIndex(); for(int i=0;i<fens.length;i++) { if(i!=minIndex&&i!=maxIndex) { allFen+=fens[i]; } } return allFen/(fens.length-2); } //4.得到最差评委 public int getWorst() { //假设第一个评委是最差的 int worstIndex=0; float tempCai=0f; float cai=Math.abs(fens[0]-lastFen()); for(int i=1;i<fens.length;i++) { tempCai=Math.abs(fens[0]-lastFen()); if(cai<tempCai) { worstIndex=i; cai=tempCai; } } return worstIndex; } } HomeWork / com.test1 / Test2.java /* * 三个同学考试,共考三门课:语文、数学、英语。使用二维整数 * 数组存放三个同学的学号和所有科目的考试成绩。如下表: * 学号 语文 数学 英语 * 1002 78 92 76 * 1003 67 88 80 * 1007 90 95 80 */ package com.test1; public class Test2 { /** * @param args */ public static void main(String[] args) { //定义一个二维数组 int[][] stus= {{1002,78,23,56},{1003,23,89,34},{1007,78,89,90}}; for(int i=0;i<3;i++) { for(int j=0;j<4;j++) { if(i==0&&j==0) { System.out.println("学号\t语文\t数学\t英语\t"); } System.out.print(stus[i][j]+"\t"); } System.out.print("\n"); } } }
发表评论
-
Java连接sql2005数据库三步曲
2012-12-27 10:48 714one、two、three 导入java包 import ja ... -
主题:Java面试122题 .
2012-12-27 10:17 8842012-06-05 09:17 592人阅读 ... -
Java六大必须理解的问题
2012-12-27 10:17 5232012-05-24 11:39 793人阅读 评论(6) 收 ... -
多线程知识点整理 .
2012-12-27 10:17 579基本概念 多线程程序 ... -
数据连接池的基本实现 .
2012-12-26 13:20 8541、 实现途径: 编写JdbcPool implemen ... -
java 常用三大集合类
2012-11-23 11:07 13775一、Set集合,其主要实现类有HashSet、TreeSet。 ... -
Java笔记9(Java网络编程)
2012-10-16 14:39 739Java基础9 Java基础9 1 文件结构 ... -
Java笔记8(jdbc-odbc、jdbc、JTable使用、Min版学生管理系统)
2012-10-16 14:34 1444Java基础8 Java基础8 1 文件结构 ... -
swing编程实现闪屏登录效果
2012-09-18 12:07 27431、先写一个闪屏类 package com.mhl.Tools ... -
paint和paintComponent方法的关系
2012-09-18 09:50 939关键词:swing,paint,paintComp ... -
Java笔记7(IO操作、图片拷贝、记事本、测试声音、坦克大战)
2012-08-23 15:05 1049File类的基本用法_Demo12_1.java /* ... -
Java笔记6(多线程、机票售票系统、坦克大战)
2012-08-23 14:39 1619多线程Demo10_1.java /* * 演 ... -
Java笔记5(java绘图原理、事件处理机制、监听器、坦克大战)
2012-08-23 14:30 2855java绘图原理Demo9_1.java /* ... -
java中equals和==的区别
2012-08-17 10:33 17533ava中equals和==的区别 值类型是存储在内存中的堆栈( ... -
Java笔记4(布局管理器、常用组件、qq聊天界面、记事本)
2012-08-13 14:12 3397文件结构 布局管理器Demo8_1.java pa ... -
Java笔记1(java类、接口、封装、继承、多态、约瑟夫环应用)
2012-08-09 10:26 1065文件结构 Java访问修饰符 com.xiaoming ... -
Java笔记2(数组、排序、查找、集合类、移位)
2012-08-09 10:18 1767文件结构 Class5 / com.t ...
相关推荐
3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3....
Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战...
Java泛型是Java编程语言中一个强大的特性,它允许在定义类、接口和方法时使用类型参数,从而实现参数化类型。泛型的主要目标是提高代码的类型安全性和重用性,减少类型转换的麻烦,并在编译时捕获可能的类型错误。...
Java泛型是Java SE 5.0引入的一个重要特性,它极大地增强了代码的类型安全性和可读性。泛型在编程中的应用广泛,特别是在集合框架中,使得我们可以在编译时就检查类型,避免了不必要的类型转换,并且提高了代码的...
Java 实现泛型List的源码,基本实现了List接口的全部所有方法。欢迎大家发表自己的观点和建议。
泛型是Java SE 5.0中引入的一项新特性,它允许在程序设计中使用参数化类型,从而实现类型安全的集合类和其他容器类。在使用泛型之前,Java程序员通常依赖于Object类型作为通用容器的数据类型,然后在运行时进行显式...
Java 运行时如何获取泛型参数的类型 Java类型Type 之 ParameterizedType,GenericArrayType,TypeVariabl,WildcardType 从实现的接口获取泛型参数 定义一个泛型父类: public interface SuperClass { String ...
泛型则是Java在J2SE 5.0版本引入的一个特性,极大地提高了代码的类型安全性和可读性。下面我们将深入探讨这两个主题。 首先,集合框架包括接口(如List、Set和Queue)和实现这些接口的具体类(如ArrayList、...
这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...
详细的介绍了Java是伪泛型的原因,介绍了类型擦除的内容等。
在Java编程语言中,泛型(Generics)是一种强大的特性,它允许我们在编写代码时指定容器(如集合)可以存储的数据类型。这提高了代码的安全性和效率,因为编译器可以在编译时检查类型,避免了运行时...
Java中的泛型是Java SE 5.0引入的一项重要特性,极大地增强了代码的类型安全性和重用性。泛型方法是泛型概念的一个关键部分,它允许我们在方法签名中使用类型参数,从而使方法能够处理不同类型的参数。在这个“Java...
Java反射和泛型是Java编程中的两个重要特性,它们各自为开发者提供了强大的功能,并且在特定情况下可以相互结合使用。本文将深入探讨这两个概念,并通过一个具体的`Testrefl.java`示例来阐述它们的应用。 Java反射...
根据给定的信息,我们可以深入探讨Java 1.5中引入的泛型概念及其应用。本文将详细介绍以下几个方面: ### 1. 引言 #### 泛型简介 Java 1.5引入了泛型(Generics)的概念,这是一个重要的语言特性,它允许开发者在...
泛型是Java 5引入的一项创新特性,极大地增强了集合框架的安全性和效率。本讲解将深入探讨这两个主题,以及与之相关的枚举类型。 首先,Java集合框架包括List、Set、Queue等接口,以及ArrayList、LinkedList、...
泛型是Java编程语言中的一个重要特性,它引入于JDK 5.0,极大地提高了代码的类型安全性和可读性。泛型允许我们在类、接口和方法中使用类型参数,这样我们可以在编译时检查类型,避免了运行时类型转换的麻烦和潜在的...
2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip...