`

Java笔记3(泛型、异常、成绩评分程序)

    博客分类:
  • Java
 
阅读更多
文件结构

泛型与异常


异常

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");    
        }    
    }    
} 
分享到:
评论

相关推荐

    3.java实例化泛型类.zip

    3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3....

    Java中的泛型简析实战.zip

    Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战...

    Java泛型_Java中的泛型结构_

    Java泛型是Java编程语言中一个强大的特性,它允许在定义类、接口和方法时使用类型参数,从而实现参数化类型。泛型的主要目标是提高代码的类型安全性和重用性,减少类型转换的麻烦,并在编译时捕获可能的类型错误。...

    关于java基础的泛型的练习

    Java泛型是Java SE 5.0引入的一个重要特性,它极大地增强了代码的类型安全性和可读性。泛型在编程中的应用广泛,特别是在集合框架中,使得我们可以在编译时就检查类型,避免了不必要的类型转换,并且提高了代码的...

    Java 实现泛型List

    Java 实现泛型List的源码,基本实现了List接口的全部所有方法。欢迎大家发表自己的观点和建议。

    Java中的泛型

    泛型是Java SE 5.0中引入的一项新特性,它允许在程序设计中使用参数化类型,从而实现类型安全的集合类和其他容器类。在使用泛型之前,Java程序员通常依赖于Object类型作为通用容器的数据类型,然后在运行时进行显式...

    Java如何获取泛型类型

    Java 运行时如何获取泛型参数的类型 Java类型Type 之 ParameterizedType,GenericArrayType,TypeVariabl,WildcardType 从实现的接口获取泛型参数 定义一个泛型父类: public interface SuperClass { String ...

    Java集合框架及泛型

    泛型则是Java在J2SE 5.0版本引入的一个特性,极大地提高了代码的类型安全性和可读性。下面我们将深入探讨这两个主题。 首先,集合框架包括接口(如List、Set和Queue)和实现这些接口的具体类(如ArrayList、...

    JAVA泛型加减乘除

    这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...

    Java泛型不是真正的泛型

    详细的介绍了Java是伪泛型的原因,介绍了类型擦除的内容等。

    java 泛型类的类型识别示例

    在Java编程语言中,泛型(Generics)是一种强大的特性,它允许我们在编写代码时指定容器(如集合)可以存储的数据类型。这提高了代码的安全性和效率,因为编译器可以在编译时检查类型,避免了运行时...

    Java中的泛型方法演示代码

    Java中的泛型是Java SE 5.0引入的一项重要特性,极大地增强了代码的类型安全性和重用性。泛型方法是泛型概念的一个关键部分,它允许我们在方法签名中使用类型参数,从而使方法能够处理不同类型的参数。在这个“Java...

    java反射与泛型综合例子

    Java反射和泛型是Java编程中的两个重要特性,它们各自为开发者提供了强大的功能,并且在特定情况下可以相互结合使用。本文将深入探讨这两个概念,并通过一个具体的`Testrefl.java`示例来阐述它们的应用。 Java反射...

    Java1.5泛型指南中文版

    根据给定的信息,我们可以深入探讨Java 1.5中引入的泛型概念及其应用。本文将详细介绍以下几个方面: ### 1. 引言 #### 泛型简介 Java 1.5引入了泛型(Generics)的概念,这是一个重要的语言特性,它允许开发者在...

    java集合 框架 泛型

    泛型是Java 5引入的一项创新特性,极大地增强了集合框架的安全性和效率。本讲解将深入探讨这两个主题,以及与之相关的枚举类型。 首先,Java集合框架包括List、Set、Queue等接口,以及ArrayList、LinkedList、...

    java 一个关于泛型的简单例子

    泛型是Java编程语言中的一个重要特性,它引入于JDK 5.0,极大地提高了代码的类型安全性和可读性。泛型允许我们在类、接口和方法中使用类型参数,这样我们可以在编译时检查类型,避免了运行时类型转换的麻烦和潜在的...

    2.java定义泛型类.zip

    2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip...

Global site tag (gtag.js) - Google Analytics