精华内容
下载资源
问答
  • VS Code:设置多行注释快捷键

    千次阅读 2020-12-20 16:31:45
    img src=...word=%E8%83%8C%E5%8C%85%E6%91%84%E5%BD%B1%E6%9D%A8%E4%B8%9C&hs=0&pn=5&spn=0&di=0&pi=57500881868&tn=baiduimagedetail&is...

    img src="http://image.baidu.com/search/detail?z=0&word=%E8%83%8C%E5%8C%85%E6%91%84%E5%BD%B1%E6%9D%A8%E4%B8%9C&hs=0&pn=5&spn=0&di=0&pi=57500881868&tn=baiduimagedetail&is=0%2C0&ie=utf-8&oe=utf-8&cs=3915439966%2C1493521838&os=&simid=&adpicid=0&lpn=0&fm=&sme=&cg=&bdtype=-1&oriquery=&objurl=http:%2F%2Fe.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2F562c11dfa9ec8a13aff433b3fa03918fa1ecc0f3.jpg&fromurl=&gsm=0&c

    多行注释,也叫块注释。

    如何查看,并修改VS Code中的多行注释快捷键呢?

    1). 点击 首选项 - 键盘快捷方式

    2). 在搜索框中输入 comment

    3). 这个时候可以看到“切换块注释”的信息,上面就是默认多行注释的快捷键。

    示意图:

    如果想修改为自己习惯的多行快捷键方式,可以右击该行 - 点击更改按键绑定 - 按下组合键 - 按下回车,这个时候多行注释快捷键就是自己设定的快捷键了。

    参考:https://segmentfault.com/q/1010000015235227/a-1020000015235754

    展开全文
  • JAVA语言程序设计》期末考试试题及答案

    万次阅读 多人点赞 2019-12-27 10:06:57
    文章目录《JAVA语言程序设计》期末考试试题及答案1(应考必备题库)一、单选择题二、填空题三、写出下面程序的运行结果《JAVA语言程序设计》期末考试试题及答案2(应考必备题库)一.判断题二.单项选择题三.程序...

    《JAVA语言程序设计》期末考试试题及答案1(应考必备题库)

    一、单选择题

    1、编译Java Application 源程序文件将产生相应的字节码文件,这些字节码文件的扩展名为( B )。
    A. java B. .class
    C. html D. .exe
    2、设 x = 1 , y = 2 , z = 3,则表达式 y+=z--/++x 的值是( A )。

    A. 3 B. 3. 5
    C. 4 D. 5

    z-- 先返回值在运算,故:返回值是3,z的值变为2
    ++x 先运算再返回值,故:x值变2,返回2;
    3/2整形数据范围内的计算,返回1;
    y +=1
    y = 3;
    返回y = 3.
    

    3、不允许作为类及类成员的访问控制符的是( C )。
    A. public B. private
    C. static D. protected
    4、为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为( A )。
    A. static void method( ) B. public void method( )
    C. final void method( ) D. abstract void method( )
    5、给定java 代码如下,编译运行后,输出结果是(C )。

    public class test { 
    static int i; 
    public int aMethod() { 
      i++; 
      return i; 
    } 
    public static void main (String args[]) {    
            Test test=new Test() ;  
            test.aMethod () ; 
    System.out.println (test.aMethod()) ; 
    } }   
    //int初始值为0,aMethod调用了两次所以结果为2
    

    a) 0 b) 1 c) 2 d) 3
    6、如下哪个是合法的Java中的标识符( A )。
    A、fieldname B、super C、3number D、#number
    7、下面的代码段执行之后count的值是什么( D)。

    int count = 1;
    for (int i = 1; i <= 5; i++) {//第一次i出去是1
    	count += i;}
    System.out.println(count);
    

    A、5 B、1 C、15 D、16
    8、下列哪一个import命令可以使我们在程序中创建输入/输出流对象( C )。
    A、import java.sql.; B、import java.util.;
    C、import java.io.; D、import java.net.;
    9、下列程序段执行后的结果是(A )。

    str.charAt(i)的意思是第i个字符在字符串str中所占的位置
    length()
    返回字符串的长度
    
    String s = new String("abcdefg");
    for (int i=0; i<s.length(); i+=2){//i第一次输出的值是0
        System.out.print(s.charAt(i));}  
    

    A) aceg B) ACEG C) abcdefg D) abcd
    10.Java“一次编译,随处运行”的特点在于其( A )
    A.跨平台性 B.面向对象型 C.多线程性 D.安全性
    11.下列有关类、对象和实例的叙述,正确的是( B)
    A.类就是对象,对象就是类,实例是对象的另一个名称,三者没有差别
    B.类是对象的抽象,对象是类的具体化,实例是对象的另一个名称
    C.对象是类的抽象,类是对象的具体化,实例是对象的另一个名称
    D.类是对象的抽象,对象是类的具体化,实例是类的另一个名称
    12.下列( D )不是面向对象程序设计方法的特点。D
    A.封装 B.继承 C.多态 D.结构化
    13.下列哪个属于容器的构件(B )?
    A.JFrame B.JButton C.JPanel D.JApplet
    B)JButton属于容器的构件,容器是用来存放构件的,而构件必须要放在容器上才能显示起作用
    如果只创建出一个JButton来,没有任何意义,只有放在其它三项的容器里面,才能看到使用
    14.下列有关父类属性和方法继承规则的描述错误的是( A )
    A.父类中private修饰的属性和方法在子类中不被继承
    B.父类中public修饰的属性和方法在子类中被继承且可访问
    C.父类中protected修饰的属性和方法在子类中被继承且可访问
    D.父类中default修饰的属性和方法在之类中被继承,若父类和子类在同一个包中,则也可访问

    二、填空题

    1、开发与运行Java程序需要经过的三个主要步骤为

      编辑源程序     、编译生成字节码     和       解释运行字节码        。
    

    2、在Java的基本数据类型中,char型采用Unicode编码方案,每个Unicode码占
    2 字节内存空间,这样,无论是中文字符还是英文字符,都是占
    2 字节内存空间。
    3、设 x = 2 ,则表达式 ( x + + )/3 的值是 0
    4、若x = 5,y = 10,则x < y和x >= y的逻辑值分别为 true 和 false 。
    5、 抽象(abstract) 方法是一种仅有方法头,没有具体方法体和操作实现的方法,该方法必须在抽象类之中定义。 最终(final) 方法是不能被当前类的子类重新定义的方法。
    6、创建一个名为 MyPackage 的包的语句是package MyPackage ;
    该语句应该放在程序的位置为: 应该在程序第一句 。
    7、设有数组定义:int MyIntArray[ ] = { 10 , 20 , 30 , 40 , 50 , 60 , 70}; 则执行以下几个语句后的输出结果是 120

       int s = 0 ;
        for (int i = 0 ; i < MyIntArray.length ; i + + )
             if ( i % 2 = = 1 )    
    s += MyIntArray[i] ;
       System.out.println(s);
    

    8、在Java程序中,通过类的定义只能实现 单 重继承,但通过接口的定义可以实现 多 重继承关系。
    9、面向对象的软件开发方法用类把(数据)和基于数据的(操作)封装在一起。
    10、在Java语言中,用来分配内存的运算符是 new
    11、接口中的方法只能是_____抽象方法________。
    12、javax.swing包中的 JMenu 类是负责创建菜单的,它的一个实例就是一个菜单。

    三、写出下面程序的运行结果

    1import java.io.*;
    public class abc
    {   
    public static void main(String args [ ])
    {    
    AB s = new AB("Hello!","I love JAVA.");
             System.out.println(s.toString( ));
        }
    }
    class AB {
      String s1;
      String s2;
      public AB(String str1, String str2)
      { 
    s1 = str1;  
    s2 = str2; 
    }
      public String toString( )
      { 
    return s1+s2;
    }
    }
    

    运行结果:Hello! I love JAVA.

    2import java.io.* ;
        public class abc
        {
              public static void main(String args[ ])
              {    int i, s = 0 ;
                   int a[ ] = { 10 , 20 , 30 , 40 , 50 , 60 , 70 , 80 , 90 };
                   for ( i = 0 ; i < a.length ; i ++ )
                         if ( a[i]%3 = = 0 )  s += a[i] ; 
                   System.out.println("s="+s);
               }
         }
    

    运行结果:s = 180

    3class Parent {
        String one, two;
        public Parent(String a, String b){
          one = a;
          two = b;
        }
        public void print(){ System.out.println(one); }
      }
      public class Child extends Parent {
        public Child(String a, String b){
          super(a,b);
        }
        public void print(){
          System.out.println(one + " to " + two);
        }
        public static void main(String args[]){
          Parent p = new Parent("south", "north");
          Parent t = new Child("east", "west");
          p.print();
          t.print();
        }
      }
    

    运行结果 south
    east to west
    四、编程题
    1、编写Java GUI应用程序,完成从键盘输入矩形的长和宽,求矩形的周长和面积并输出结果的功能,如下图所示。

    答:

    import  javax.swing.JOptionPane;
    public class Rect
    {
    public static void main(String args[])
    {
    	String s;
    	double	length,width,girth,area;
    	s = JOptionPane.showInputDialog("输入矩形的长:");
    	length = Double.parseDouble(s);
    	s = JOptionPane.showInputDialog("输入矩形的宽:");
    	width = Double.parseDouble(s);
    	girth = (length + width) * 2;
    	area = length * width;
    	JOptionPane.showMessageDialog(null,"周长为:" + girth + "\n" + "面积为:" + area);
    }
    }
    

    2、用Java Application编写一个程序,输出你的班级和姓名。
    答:

    public class  HelloJava {  //类定义正确3分
    	public static void main(String[] args) {//2分
    		System.out.println("学号=2013001,姓名=张三");//5分
    	}
    }
    

    《JAVA语言程序设计》期末考试试题及答案2(应考必备题库)

    一.判断题

    1.在异常处理中,若try中的代码可能产生多种异常则可以对应多个catch语句,若catch中的参数类型有父类子类关系,此时应该将父类放在后面,子类放在前面。( √ )
    2.子类只能继承父类的public,protected和同一个包中的package级的成员。( √ )
    3.在类中实现一个接口,则一定要实现接口中的所有方法。( × )
    4.抽象方法不仅有方法头,还应该有方法体。( × )
    拥有abstract方法的类是抽象类,但抽象类中可以没有abstract方法。
    5.在比较str1和str2两个字符串对象值是否相等时使用语句str1==str2。( √ )
    6.Java的源代码中定义几个类,编译结果就生成几个以.class为后缀的字节码文件。(√ )
    7.Java程序里,创建新的类对象用关键字new,回收无用的类对象使用关键字free。 (× )
    java自动回收机制
    8.构造函数用于创建类的实例对象,构造函数名应与类名相同,返回类型为void。 (× )
    构造函数无返回值
    9.如果源文件包含import语句,则该语句必须是除空行和注释行外的第一个语句行。( √ )
    10.拥有abstract方法的类是抽象类,但抽象类中可以没有abstract方法。 (√ )
    11.静态初始化器是在其所属的类加载内存时由系统自动调用执行。 (√ )
    12.在Java中对象可以赋值,只要使用赋值号(等号)即可,相当于生成了一个各属性与赋值对象相同的新对象。 (× )
    13.Java applet也能够存取客户机磁盘上的文件。( √ )
    14.进程是程序的一次动态执行过程。一个进程在其执行过程中,可以产生多个线程——多线程,形成多条执行线索。( √ )

    二.单项选择题

    1.Java application中的主类需包含main方法,以下哪项是main方法的正确形参?( B)
    A、 String args B、String args[] C、Char arg D、StringBuffer args[]
    2.以下关于继承的叙述正确的是(A )。
    A、在Java中类只允许单一继承
    B、在Java中一个类只能实现一个接口
    C、在Java中一个类不能同时继承一个类和实现一个接口
    D、在Java中接口只允许单一继承
    3.paint()方法使用哪种类型的参数? (A )
    A、Graphics B、Graphics2D C、String D、Color
    4.以下哪个不是Java的原始数据类型( B )
    A、int B、Boolean C、float D、char
    5.若需要定义一个类域或类方法,应使用哪种修饰符?( A )
    A、static B、package C、private D、public
    6.在浏览器中执行applet 程序,以下选项中的哪个方法将被最先执行( A )。
    A、init() B、start() C、destroy() D、stop()
    7.有以下程序片段,下列哪个选项不能插入到行1。( D )
    1.
    2 .public class Interesting{
    3. //do sth
    4.}
    A、import java.awt.; B、package mypackage;
    C、class OtherClass{ } D、public class MyClass{ }
    8. 设有下面两个赋值语句:
    a = Integer.parseInt(“12”);
    b = Integer.valueOf(“12”).intValue();
    下述说法正确的是( D )。
    A、a是整数类型变量,b是整数类对象。
    B、a是整数类对象,b是整数类型变量。
    C、a和b都是整数类对象并且值相等。
    D、a和b都是整数类型变量并且值相等。
    9.FilterOutputStream是BufferedOutputStream、DataOutputStream及PrintStream的父类,以下哪个类可能是FilterOutputStream构造函数的参数类型?(A)
    A、OutputStream B、File
    C、InputStream D、BufferedOutputStream
    10.在编写Java Applet程序时,需在程序的开头写上( B )语句。
    A、import java.awt.
    ; B、import java.applet.Applet ;
    C、import java.io.* ; D、import java.awt.Graphics ;
    11.在使用interface声明一个接口时,只可以使用( D )修饰符修饰该接口。
    A、private B、protected C、private protected D、public
    12.Java源文件和编译后的文件扩展名分别为( B )
    A.class 和java B.java 和class C.class和class D.java和java
    13.下列说法中,不正确的一项是(B )
    A.Java程序只有两类:Application和Applet
    B.类的方法只能由public修饰
    C.面向对象的程序设计的优点有可重用性、可扩展性、可管理性
    D.Java语言通过接口支持多重继承
    14.main(B)方法是Java Application程序执行的入口点,关于main()方法的方法头,下面( )是合法的。
    A.public static void main ()
    B.public static void main (String args[ ])
    C.public static int main (String [ ] args)
    D.public void main (String args[ ])
    15.在类中若要处理ItemEvent事件,则该类需要实现的接口是(A )
    A.ItemListener B.ActionListener C. itemStateChanged D. Event
    16.将GUI窗口中的组件按照从左到右如打字式排列的布局管理器是( A )
    A.FlowLayout B.BorderLayout C.GirdLayout D.CardLayout

    三.程序阅读题

    1.以下程序的输出结果为 相等 。

    class StringTest1
    {
    	public static void main(String[] args) 
    	{
    		String s1="hello";
    		String s2=new String("hello");
    		if(s1.equals(s2)){
    			System.out.println("相等");
    		}else{
    			System.out.println("不相等");
    		}
    	}
    }
    

    2.以下程序段的输出结果为 5 6 7 8 9 。

    public class TestArray
    {
        public static void main(String  args[ ]){  
        	int  i , j ;
    		int  a[ ] = { 5,9,6,8,7};
    	   	for  ( i = 0 ; i < a.length-1; i ++ ) {
    		   	int  k = i;
    		   	for  ( j = i ; j < a.length ;  j++ )
    			   	if  ( a[j]<a[k] )  k = j;
    		  	int  temp =a[i];
    		   	a[i] = a[k];
    		   	a[k] = temp;
    	   	}
    	   	for  ( i =0 ; i<a.length; i++ )
    		  		System.out.print(a[i]+"  ");
           System.out.println( );
       }
    }
    

    3.写出以下程序的功能。

    import java.io.*;
    public class TestFile
    {
      	public static void main(String args[]) throws Exception
        {
        BufferedReader br = new BufferedReader(
    new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new FileWriter(“input.txt"));
        String s;
        while (true)
    	 {
          System.out.print("请输入一个字符串: ");
          System.out.flush();
          s=br.readLine();
          if (s.length()==0) break;
          bw.write(s);
          bw.newLine();
        }
        bw.close();
      }
    }
    

    功能:从键盘逐一输入字符串,逐一输出至input.txt文件中,直至输入空行。

    四.阅读以下程序,写出输出结果。

    class  Animal {
      Animal() {
        System.out.print ("Animal  ");  }
    }
    public  class  Dog  extends  Animal {
     Dog() {
        System.out.print ("Dog ");  }
    
      public static void main(String[] args) {
        Dog  snoppy= new  Dog();  }
    }
    
    

    输出结果:Animal Dog

    《JAVA语言程序设计》期末考试试题及答案3(应考必备题库)

    一、单项选择题

    1、如下哪个是Java中的标识符(D)
    A、public B、super C、3number D、width
    2、如下哪个是Java中的标识符( A)
    A、fieldname B、super C、3number D、#number
    3、已知如下定义:String s = “story”; 下面哪个语句不是合法的(C )
    A、s += “books”; B、s = s + 100;
    C、int len = s.length; D、String t = s + “abc”;
    4、如下哪个是Java中有效的关键字(C )
    A、name B、hello C、false D、good
    5、下面的代码段执行之后count的值是什么( D )

    int count = 1;
    	for (int i = 1; i <= 5; i++) {
    		count += i;
    	}
    	System.out.println(count);
    

    A、5 B、1 C、15 D、16
    6、定义一个类,必须使用的关键字是(B )
    A、public B、class C、interface D、static
    7、定义一个接口必须使用的关键字是(C
    A、public B、class C、interface D、static
    8、如果容器组件p的布局是BorderLayout,则在p的下边中添加一个按钮b,应该使用的语句是( C
    A、p.add(b); B、p.add(b,“North”);
    C、p.add(b,“South”); D、b.add(p,“North”);
    9、声明并创建一个按钮对象b,应该使用的语句是( A
    A、Button b=new Button(); B、button b=new button();
    C、Button b=new b(); D、b.setLabel(“确定”);
    10、Frame对象默认的布局管理器是( B
    A、FlowLayout B、BorderLayout
    C、CardLayout D、null
    11、下列哪一个import命令可以使我们在程序中创建输入/输出流对象(C
    A、import java.sql.; B、import java.util.;
    C、import java.io.; D、import java.net.;
    12、下面哪一个import命令可以为我们提供编写网络应用程序的类(D
    A、import java.sql.; B、import java.util.;
    C、import java.io.; D、import java.net.;
    13、如果需要从文件中读取数据,则可以在程序中创建哪一个类的对象(A)
    A、FileInputStream B、FileOutputStream
    C、DataOutputStream D、FileWriter
    14、在编写Java Applet程序时,需在程序的开头写上( B)语句。
    A、import java.awt.* ; B、import java.applet.Applet ;
    C、import java.io.* ; D、import java.awt.Graphics ;
    15、如何在框架(Frame)中显示标题?(C
    A、调用根窗格的set Title 函数显示
    B、调用内容窗格的setTitle函数显示
    C、调用框架对象的setTitle函数显示
    D、调用框架对象的Border对象的setTitle函数显示
    16、下列各种java中的构造函数定义,那种形式是错误的构造函数定义( C)。

    A 、 class MyClass
    { public MyClass()  {  }
    }
    B、 class MyClass 
    {   public MyClass(int X)   {   } 
    }
    C、 class MyClass
    {   public int  MyClass()   {   } 
    }
    D、 class MyClass
    {  public  MyClass(int x, int y)  {  }
    }
    

    17、Java属于( A )型语言。
    A.解释 B.编译 C.多线程性 D.安全性
    18、下列哪项不是Java语言中所规定的注释样式?( B
    A.//单行注释 B.–单行注释
    C./* D./**
    *多行注释 *文档注释
    */ */

    1, // 注释一行
    2, /* ...... */ 注释若干行
    3, /**……*/文档注释
    

    19、以下关于抽象类和接口的说法正确的是( B )。
    A.抽象类可以用来定义接口 B.定义抽象类时需要abstract
    C.抽象类中的所有方法都是具体的 D.抽象类可以是对接口的实现
    20、Applet可以做下列哪些操作( D)?
    A.读取客户端文件  B.在客户端主机上创建新文件
    C.在客户端装载程序库  D.读取客户端部分系统变量
    21、下列说法中,错误的一项是( D
    A.在Java中,若要处理某类事件,必须定义相关的事件处理类
    B.在对事件源实例化之后,要注册相应事件的监听器
    C.事件处理类必须实现与该类事件相对应的监听器接口
    D.事件源通常是一个构件,也称做监听器
    22、下列哪项是不能改变线程状态的方法?(C )
    A.start( ) B.sleep( ) C.main( ) D.stop( )

    二、填空题

    1、如果将类MyClass声明为public,它的文件名称必须是(MyClass.java)才能正常编译。
    2、Java程序中的单行注释符是( // ),多行注释符是( /* */ )。

    1, // 注释一行
    2, /* ...... */ 注释若干行
    3, /**……*/文档注释
    

    3、Java中布尔类型的常量有两种,它们是(true)和(false)。
    4、Java中用于定义小数的关键字有两个:(float) 和 (double),后者精度高于前者。
    5、Java中用于两个数相等比较的运算符是:(==),用于不相等比较的运算符是(<>)。
    6、在Java中定义一个字符串类型的变量str的语句是:(String str;) ,定义一个具有10个元素的整型数组a的语句是:(int[ ] arr = new int[10];) 。
    7、导入mypackage包中的所类的命令是( import mypackage.*; )。
    8、当声明一个数组int arr[] = new int[5]; 时,这代表这个数组所保存的变量类型是(int),数组名是(arr),数组的大小为(5),数组元素下标的使用范围是(0到4)。
    9、假设x=13,y=4,则表达式x%y != 0的值是(true),其数据类型是(boolean)。
    10、异常处理是由(try)、(catch)和finally块三个关键所组成的程序块。
    11、以下程序段的输出结果是(三角形)

    int x = 5, y = 6, z = 4;
    	if (x + y > z && x + z > y && z + y > x)
    		System.out.println("三角形");
    	else
    		System.out.println("不是三角形");
    

    12、下面程序段的执行结果是(6 5 4 3 2)

    int a[] = { 2, 3, 4, 5, 6 };
    	for (int i = a.length - 1; i >= 0; i--)
    	//这里的a表示你上面定义的那个整型一维数组,然后a.length表示a数组的长度,第一次i出去是4所以a【4】=6
    		System.out.print(a[i] + "");
    

    13、定义类的保留字是( class ),定义接口的保留字是( interface )。
    14、构造方法是一种特殊的成员方法,构造方法名与( 类名 ) 相同。
    15、Java语言只允许单继承,指每个类只能有一个 ( 父类 ) ,但通过接口的定义可以实现( 多重 ) 继承关系。
    16、在Java中,抽象类不能 被实例化 。
    17、在Java中,为了能监视到ActionEvent类型的事件,事件源必须使用 addActionListener( ) 方法获得监视器。
    18、利用DriverManager类的 getConnection(String url)静态方法创建数据库连接。

    三、程序阅读题

    1、以下程序的输出结果为_ Peter is 17 years old!___。

    public class Person {
    	String name;
    	int age;
    
    	public Person(String name, int age) {
    		this.name = name;
    		this.age = age;
    	}
    
    	public static void main(String[] args) {
    		Person c = new Person("Peter", 17);
    		System.out.println(c.name + " is " + c.age + " years old!");
    	}
    }
    

    2、阅读以下程序,输出结果为 90and10

    
    public class ClassA  {
    	public int a;
    }
    class ClassB extends ClassA  {
    	public String b="and";
    }
    class ClassC extends ClassB  {
    public int c;
    	public static void main(String[] args)	{
    		ClassC  cc=new  ClassC();
    		cc.a=90;
    		cc.c=10;
    		System.out.println(cc.a+cc.b+cc.c);
    	}}
    

    3、以下程序的输出结果为__课程号:101 课程名:ASP 学分:3___。

    public class Course {
    	private String cNumber;
    	private String cName;
    	private int cUnit;
    
    	public Course(String number, String name, int unit) {
    		cNumber = number;
    		cName = name;
    		cUnit = unit;
    	}
    
    	public void printCourseInfo() {
    		System.out.println("课程号:" + cNumber + " 课程名:" + cName + " 学分:" + cUnit);
    	}
    }
    
    class CourseTest {
    	public static void main(String[] args) {
    		Course c;
    		c = new Course("101", "ASP", 3);
    		c.printCourseInfo();
    	}
    }
    

    4、以下程序的输出结果为__汤姆猫体重:20.0斤___。

    public class Tom {
    	private float weight;
    	private static String name;
    
    	public void setWeight(float weight) {
    		this.weight = weight;
    	}
    
    	private void out() {
    		System.out.println(name + "体重:" + weight + "斤");
    	}
    
    	public static void main(String[] args) {
    		Tom.name = "汤姆猫";
    		Tom cat = new Tom();
    		cat.setWeight(20);
    		cat.out();
    	}
    }
    

    5、以下程序的输出结果_姓名:Tom 年龄:15 家庭住址:金水区 电话:66123456 学校:九中_。

    public class Father {
    	String name, address, tel;
    	int age;
    
    	public Father(String name, int age) {
    		this.name = name;
    		this.age = age;
    	}
    
    	void out() {
    		System.out.print("姓名:" + name);
    		System.out.print(" 年龄:" + age);
    	}
    
    	void outOther() {
    		System.out.print(" 家庭住址:" + address);
    		System.out.print(" 电话:" + tel);
    	}
    }
    
    class Son extends Father {
    	String school;
    
    	public Son(String name, int age) {
    		super(name, age);
    	}
    
    	void out() {
    		super.out();
    		super.outOther();
    		System.out.println(" 学校:" + school);
    	}
    
    	public static void main(String args[]) {
    		Son son = new Son("Tom", 15);
    		son.address = "金水区";
    		son.school = "九中";
    		son.tel = "66123456";
    		son.out();
    	}
    }
    

    6、下列程序的运行结果是__12345____。

    public class MyClass {
    	int a[] = { 1, 2, 3, 4, 5 };
    
    	void out() {
    		for (int j = 0; j < a.length; j++)
    			System.out.print(a[j] + "");
    	}
    
    	public static void main(String[] args) {
    		MyClass my = new MyClass();
    		my.out();
    	}
    }
    

    四、简答题

    1、简述Java中异常处理的机制?

    答:首先Java的异常是面向对象的。一个Java的Exception是一个描述异常情况的对象.当出现异常情况时,一个Exception对象就产生了,并放到异常的成员函数里。
    Java的异常处理是通过5个关键词来实现的:try,catch,throw,throwsfinally1.异常处理:在Java语言的错误处理结构由trycatchfinally三个块组成。其中try块存放将可能发生异常的Java语言,并管理相关的异常指针;catch块紧跟在try块后面,用来激发被捕获的异常;finally块包含清除程序没有释放的资源,句柄等。不管try块中的代码如何退出,都将执行 finally块。
    2.抛出异常:Java语言可以不在方法中直接捕获,而用throw语句将异常抛给上层的调用者。Throw语句就是来明确地抛出一个异常;首先你必需得到一个Throwable的实例句柄,通过参数传到catch中,或者采用new操作符来创建一个。
    

    2、什么是继承?

    答:通过必要的说明能够实现某个类无需重新定义就拥有另一个类的某些属性和方法,并把这种关系称为继承,先定义的类称为父类,后定义的类称为子类,并且允许多层的继承关系。
    

    3、请简述重载和重写的区别?

    答:方法的重写Overriding和重载Overloading是Java多态性的不同表现。
    重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
    如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
    如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
    

    4、Java 规定类中的成员变量和方法具有4种访问控制符?哪四种?请列出。

    答:Public、protectedprivatedefault 
    

    5、什么是实例变量和类变量及他们的区别?

    答:用修饰符static说明的变量是类变量,其他是实例变量。不同对象的实例变量将分配不同的内存空间。所有对象的类变量都分配给相同的一处内存,改变其中一个对象的类变量的值,会影响其他对象的这个类变量的值。
    

    6、用abstract修饰符修饰的类和方法有什么特点?

    答:用abstract修饰的类不能创建对象,必须产生子类,有子类创建对象
    用abstract修饰的方法只允许声明,而不允许实现。
    如果一个类是一个abstract类的子类,它必须实现父类的abstract方法。
    

    五、程序设计题
    1、按以下要求编写程序
    (1) 创建一个Rectangle类,添加width和height两个成员变量
    (2) 在Rectangle中添加两种方法分别计算矩形的周长和面积
    (3) 编程利用Rectangle输出一个矩形的周长和面积
    解答:

    public class Rectangle {
    	float width, height;
    	public Rectangle(float width, float height) {
    		this.width = width;
    		this.height = height;
    	}
    	public float getLength(){
    		return (this.width + this.height) * 2;
    	}
    	public float getArea(){
    		return this.width * this.height;
    	}
    	public static void main(String [] args) {
    		Rectangle rect = new Rectangle(10, 20);
    		System.out.println("周长是:" + rect.getLength());
    		System.out.println("面积是:" + rect.getArea());
    	}
    }
    
    

    2、按以下要求编写程序
    (1) 编写Animal接口,接口中声明run() 方法
    (2) 定义Bird类和Fish类实现Animal接口
    (3) 编写Bird类和Fish类的测试程序,并调用其中的run()方法
    解答:

    public interface Animal {
    	void run();
    }
    
    class Bird implements Animal {
    	public void run() {
    		System.out.println("鸟儿在飞...");
    	}
    }
    
    class Fish implements Animal {
    	public void run() {
    		System.out.println("鱼儿在游...");
    	}
    }
    
    public class TestAnimal {
    
    	public static void main(String[] args) {
    		Bird bird = new Bird();
    		bird.run();
    		
    		Fish fish = new Fish();
    		fish.run();
    	}
    }
    

    3、编写一个Frame框架应用程序,要求如下:
    (1) 在窗口设置两个菜单“文件”、“编辑”
    (2) 在“文件”菜单里添加三个菜单项“打开”、“保存”、“关闭”
    (3) 在“编辑”菜单里添加两个菜单项“复制”、“粘贴”
    (4) 点击关闭菜单项时,使程序关闭。
    解答:

    import java.awt.Color;
    import java.awt.Frame;
    import java.awt.Menu;
    import java.awt.MenuBar;
    import java.awt.MenuItem;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    /*
     * 主窗体
     */
    public class MyFrame extends Frame {
    	private static final long serialVersionUID = 6895463895656626294L;
    	
    	private Frame frmMain;     	// 窗体
    	MenuBar mb;				  	// 菜单栏
    	Menu mnuFile;              	// "文件"菜单
    	Menu mnuEdit;              	// "编辑"菜单
    	MenuItem miOpen;   		   	// "打开"菜单项
    	MenuItem miSave;           	// "保存"菜单项
    	MenuItem miClose;          	// "关闭"菜单项
    	MenuItem miCopy;           	// "复制"菜单项
    	MenuItem miPaste;          	// "粘贴"菜单项
    	
    	public MyFrame() {
    		frmMain = new Frame("主窗体");
    		
    		// 创建菜单栏
    		mb = new MenuBar();
    		
    		// 创建菜单
    		mnuFile = new Menu("文件");
    		mnuEdit = new Menu("编辑");
    		
    		// 创建菜单项
    		miOpen = new MenuItem("打开");
    		miSave = new MenuItem("保存");
    		miClose = new MenuItem("关闭");
    		miCopy = new MenuItem("复制");
    		miPaste = new MenuItem("粘贴");
    	}
    	public void showFrame() {
    		frmMain.setSize(800, 600);
    		frmMain.setLocation(100, 100);
    		frmMain.setBackground(Color.white);
    		frmMain.setVisible(true);
    		frmMain.setLayout(null);
    		frmMain.addWindowListener(new WindowHandler()); // 注册窗口监听器
    		// 将菜单栏放入窗体中
    		frmMain.setMenuBar(mb);
    		// 将菜单放入菜单栏中
    		mb.add(mnuFile);
    		mb.add(mnuEdit);
    		// 将菜单项放入菜单中
    		mnuFile.add(miOpen);
    		mnuFile.add(miSave);
    		mnuFile.add(miClose);
    		mnuEdit.add(miCopy);
    		mnuEdit.add(miPaste);
    		// 注册动作事件监听器
    		miClose.setActionCommand("miClose_Clicked");
    		miClose.addActionListener(new MenuHandler());
    	}
    	
    	// 定义一个内部类,在这个类中编写窗口关闭事件处理程序。
    	private class WindowHandler extends WindowAdapter {
    
    		public void windowClosing(WindowEvent e) {
    			System.exit(0); // 退出应用程序,状态码 0 表示正常终止,非 0 表示异常终止。
    		}
    	}
    	
    	// 定义一个内部类,在这个类中编写动作事件处理程序。
    	private class MenuHandler implements ActionListener {
    
    		public void actionPerformed(ActionEvent e) {
    			
    			if (e.getActionCommand() == "miClose_Clicked") {
    				System.exit(0); // 退出应用程序
    			
    			}
    		}
    	}
    }
    
    public class TestMyFrame {
    
    	public static void main(String[] args) {
    		// 启动主窗体
    		MyFrame guiWindow = new MyFrame();
    		guiWindow.showFrame();
    	}
    }
    

    《JAVA语言程序设计》期末考试试题及答案4(应考必备题库)

    一、 单选题

    1、下列程序段执行后的结果是( A )。

    String s = new String("abcdefg");
    for (int i=0; i<s.length(); i+=2){
        System.out.print(s.charAt(i));
    }  
    

    A) aceg B) ACEG C) abcdefg D) abcd
    2、有整型数组:int[] x={12,35,8,7,2};,则调用方法Arrays.sort(x)后,数组x中的元素值依次是( A ).
    A) 2 7 8 12 35 B) 12 35 8 7 2
    C) 35 12 8 7 2 D) 8 7 12 35 2

    Arrays.sort(x)按升序排列
    

    3、下面的程序段创建了BufferedReader类的对象in,以便读取本机c盘my文件夹下的文件1.txt。File构造函数中正确的路径和文件名的表示是( C )。
    File f = new File(填代码处);
    file =new FileReader(f);
    in=new BufferedReader(file);
    A) “./1.txt” B) “…/my/1.txt” C) "c:\\my\\1.txt" D) “c:\ my\1.txt”
    4、应用程序的main方法中有以下语句,则输出的结果是 ( A )。

       String  s1=new String("abc");
            String  s2=new String("abc"); 
            boolean b1=s1.equals(s2);
            boolean b2=(s1==s2);            
            System.out.print(b1+"   "+b2);           
    

    A)true false B) false true C) true true D)false false
    5、应用程序的main方法中有以下语句,则输出的结果是 (B )。

            Hashtable hashtable=new Hashtable();
            hashtable.put("x","12345");
            hashtable.put("y","67890");
            hashtable.put("a","abcde"); 
    		 System.out.println(hashtable.get("a"));       
    

    A) a B) abcde C) 12345 D) 67890
    6、下面语句的功能是( A)。

    RandomAccessFile  raf2 = new RandomAccessFile("1.txt","rw" ); 
    

    A)打开当前目录下的文件1.txt,既可以向文件写数据,也可以从文件读数据。
    B)打开当前目录下的文件1.txt,但只能向文件写入数据,不能从文件读取数据。
    C)打开当前目录下的文件1.txt,但不能向文件写入数据,只能从文件读取数据。
    D) 以上说法都不对。
    7、应用程序的main方法中有以下语句,则输出的结果是 B( )。

    String   s="12345#aaa#bbb#67890";
    	int     n=s.indexOf("#");
    	int     k=s.indexOf("#",n+1);
    	int     m=s.indexOf("#",k+1);
    	String  s2=s.substring(m+1);
    	System.out.println(s2);	
    

    A) 123456 B) 67890 C) aaa D) bbb
    8、下面程序段执行后b的值是(B )。

    Integer integ =new Integer(9)boolean b = integ  instanceof  Object; 
    

    A) 9 B) true C) 1 D) false
    9、应用程序Test.java的源程序如下,在命令行键入:
    java Test aaa bb c
    回车后输出的结果是 ( A )。

    public class Test {
        public static void main(String args[]) {
            int  k1=args.length;
            int  k2=args[1].length();         
            System.out.print(k1+"    "+k2); 
        }  
    } 
    //args.length表示传入参数的个数
    

    A) 3 2 B)1 2 C) 1 3 D) 3 3
    10、应用程序的main方法中有以下语句,则输出的结果是 ( A )。

     int  b[][]={{1}, {2,2}, {2,2,2}};
            int sum=0;
            for(int i=0;i<b.length;i++) {            
                for(int j=0;j<b[i].length;j++) {
                    sum*=b[i][j];
                }            
            }
            System.out.println("sum="+sum);
    

    A) 32 B)11 C) 2 D) 3
    11、应用程序的main方法中有以下语句,则执行后输出的结果是 ( D )。
    int[] x={125,21,5,168,98};
    int max=x[0];
    for(int i=1;i<x.length;i++){
    if(x[i]> max)
    max =x[i];
    }
    System.out.println(max);
    A) 125 B) 5 C) 98 D) 168
    12、程序Test.java编译运行后输出的结果是( A )。
    public class Test {
    String s1=“java”;
    public static void main(String args[]) {
    int z=2;
    Test t=new Test();
    System.out.println(t.s1+z);
    }
    }
    A) java2 B)2 C)没有输出结果 D)java
    13、应用程序的main方法中有以下语句,则输出的结果是 ( A )。
    String s1=“0.5”, s2=“12”;
    double x=Double.parseDouble(s1);
    int y=Integer.parseInt(s2);
    System.out.println(x+y);
    A) 12.5 B) 120.5 C) 12 D) “12.5”
    14、下面的程序创建了一个文件输出流对象,用来向文件test.txt中输出数据,假设程序当前目录下不存在文件test.txt,编译下面的程序Test.java后,将该程序运行3次,则文件test.txt 的内容是( D )。
    import java.io.*;
    public class Test {
    public static void main(String args[]) {
    try {
    String s=“ABCDE”;
    byte b[]=s.getBytes();
    FileOutputStream file=new FileOutputStream(“test.txt”,true);
    file.write(b);
    file.close();
    }
    catch(IOException e) {
    System.out.println(e.toString());
    }
    }
    }
    A) ABCABC B) ABCDE C) Test D) ABCDE ABCDE ABCDE
    15、在Java语言中,表达式10/3的结果是(C )。
    A.3.3 B.3.33 C.3 D.3.0
    16、已知数组arrey,其最后一个元素的下标是(D )。
    A.arrey.size B.arrey.length C. arrey.size-1 D. arrey.length-1
    17、初始状态下,ResultSet的指针初始位置在( )
    A.第一行之前 B.第一行 C.最后一行 D.最后一行之后
    18、下列有关Swing的叙述,哪项错误? ( D )
    A.Swing是Java基础类(JFC)的组成部分
    B.Swing是可用来构建GUI的程序包
    C.Java基础类(JFC)是Swing的组成部分
    D.Swing是AWT图形工具包的替代技术
    Swing 是一个为Java设计的GUI工具包。
    Swing是JAVA基础类的一部分。
    Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表。

    二、程序阅读题

    1、阅读下面的程序,回答问题(问3分,问3分,共6分)。
    import java.awt.;
    import javax.swing.
    ;
    public class T extends JFrame {
    public T ( ) {
    super(“GridLayout”);
    Container con=this.getContentPane();
    con.setLayout(new GridLayout(2,3));
    con.add(new JButton(“a”));
    con.add(new JButton(“b”));
    con.add(new JButton(“c”));
    con.add(new JButton(“d”));
    con.add(new JButton(“e”));
    con.add(new JButton(“f”));
    setSize(200, 80);
    setVisible(true);
    }
    public static void main(String args[]) {
    new T();
    }
    }
    画图表示程序运行后的图形界面。
    如果程序通过实现某个接口处理按钮的动作事件,则该接口名为何?接口中的方法头声明如何?
    答案:

    接口名:ActionListener
    接口中的方法:public void actionPerformed(ActionEvent e)
    2、阅读下面的程序代码,并回答问题(①问3分,②问3分,共6分)。
    String s1 = new String(“abcde”);
    String s2 = new String(“abcde”);
    boolean b1= s1.equals(s2);
    boolean b2 = s1== s2;
    System.out.print(b1+" "+b2);
    编译运行上面的程序:①程序段执行后,在命令行的输出结果如何?②equals方法的功能是什么?运算符“ == ”\ 的功能是什么?
    答:
    ①true false
    ②equals方法比较两个字符串的内容是否相等;运算符“==”判断两个对象是否指向同一个引用,即是否为同一个对象。

    《JAVA程序设计》期末考试试题 (五)

    一、 单选题

    1、当某一线程正处于休眠状态,而另一个线程用 Thread 类中的 interrupt() 方法中断它时,抛出的异常类型是( C )。
    A) IOException B) RuntimeException
    C) InterruptedException D) ClassNotFoundException
    2、下面的程序段的功能是( D)。
    File file1=new File(“d:\xxx\yyy\zzz”);
    file1.mkdirs();
    A)在当前目录下生成子目录:\xxx\yyy\zzz B)生成目录: e:\xxx\yyy\zzz
    C)在当前目录下生成文件xxx.yyy.zzz D)以上说法都不对
    3、应用程序的main方法中有以下语句,则输出的结果是 ( B )。
    String s = “xxxxxxxxxxxxxxx#123#456#zzzzz”;
    int n = s.indexOf("#");
    int k = s.indexOf("#", n+1);
    String s2 = s.substring(n+1, k);
    System.out.println(s2);
    A) 123456 B) 123 C) xxxxxxxxxxxxxxx D) zzzzz
    4、关于下面的程序Test.java说法正确的是( D )。
    public class Test {
    String x=“1”;
    int y;
    public static void main(String args[]) {
    int z=2;
    System.out.println(x+y+z);
    }
    }
    A)3 B)102 C) 12 D)程序有编译错误

    5、应用程序的main方法中有以下语句,则输出的结果是 ( A )。
    int b[][]={{1, 1, 1}, {2,2}, {3}};
    int sum=0;
    for(int i=0; i<b.length; i++) {
    for(int j=0; j<b[i].length; j++) {
    sum+=b[i][j];
    }
    }
    System.out.println(“sum=”+sum);
    A) 10 B)6 C) 9 D) 13
    6、应用程序的main方法中有以下语句,则执行后输出的结果是 ( B)。
    int[] x = {125,21,5,168,98};
    int min = x[0];
    for (int i=1; i<x.length; i++){
    if(x[i] < min)
    min = x[i];
    }
    System.out.println(min);
    A) 125 B) 5 C) 98 D) 168

    7、应用程序的main方法中有以下语句,则输出的结果是 ( D )。
    Hashtable hashtable=new Hashtable();
    hashtable.put(“100”,“aaa”);
    hashtable.put(“200”,“bbb”);
    hashtable.put(“300”,“ccc”);
    System.out.println(hashtable.get(“300”).toString()
    + hashtable.get(“200”).toString()
    + hashtable.get(“100”).toString());
    A) aaa B) bbb C) ccc D) cccbbbaaa
    8、以下关于java异常说法不正确的是(D )。
    A) Throwable 类是 Java 语言中Error类和Exception类的父类。
    B)当异常对象是Exception类(或其子类)的实例时,能通过 Java 虚拟机或者 throw 语句抛出该异常对象,并能通过try…catch…finally处理。
    C)如果只用一个catch块捕捉多个异常对象,则catch 子句中的参数类型应是所有异常对象的父类。
    D)以上说法都不对。
    9、下面的程序创建了一个文件输出流对象,用来向文件test.txt中输出数据,假设程序当前目录下存在文件test.txt,编译下面的程序Test.java后,将该程序运行3次,则文件test.txt 的内容是( D)。
    import java.io.*;
    public class Test {
    public static void main(String args[]) {
    try {
    String s=“ABCDE”;
    byte b[]=s.getBytes();
    FileOutputStream file=new FileOutputStream(“test.txt”, true);
    file.write(b);
    file.close();
    }
    catch(IOException e) {
    System.out.println(e.toString());
    }
    }
    }
    A) ABCABC B) ABCDE C)Test D) ABCDE ABCDE ABCDE
    10、下面说法不正确的是( D )?
    A)列表(List)、集合(Set)和映射(Map)都是java.util包中的接口。
    B)List接口是可以包含重复元素的有序集合。
    C)Set接口是不包含重复元素的集合。
    D)Map接口将键映射到值,键可以重复,但每个键最多只能映射一个值。
    11、给定java 代码如下,编译运行后,输出结果是( C)。 public class test {
    static int i=0;
    public int aMethod() {
    i++;
    return i; }
    public static void main (String args[]) {
    Test test=new Test() ;
    test.aMethod () ;
    System.out.println (test.aMethod()) ;
    } }
    A、0 B、1 C、2 D、3
    12、有整型数组:int[] x={12,35,8,7,2};,则调用方法Arrays.sort(x)后,数组x中的元素值依次是( A )。
    A) 2 7 8 12 35 B) 12 35 8 7 2
    C) 35 12 8 7 2 D) 8 7 12 35 2
    13、Frame对象默认的布局管理器是(B )。
    A、FlowLayout B、BorderLayout
    C、CardLayout D、null

    二、程序阅读题

    1、阅读下面的程序代码,并回答问题(1问3分,2问3分,共6分)。
    String s1 = new String(“abcde”);
    String s2 = new String(“abcde”);
    boolean b1= s1.equals(s2);
    boolean b2 = s1== s2;
    System.out.print(b1+" "+b2);
    程序段执行后,在命令行的输出结果如何?
    解释输出(1)的结果的原因?
    答案:在这里插入图片描述
    1 true false
    2 equals方法比较两个字符串的内容是否相等;运算符“= =”判断两个对象是否指向同一个引用,即是否为同一个对象。
    2、阅读下面的程序,并回答问题(问3分,问3分,共6分)。

    import java.io.*;
    public class Test {
        public static void main(String args[]) throws IOException {
            BufferedReader buf=new BufferedReader(
                        new InputStreamReader(System.in));        
            while(true) {
                String str = buf.readLine();
                if(str.equals("quit"))
                    break;
                int x=Integer.parseInt(str);
                System.out.println(x*x);
            }
        }  
    }
    

    编译运行上面的程序:
    从键盘输入10,回车后输出的结果如何?
    从键盘输入exit,回车后程序能正确执行吗?为什么?
    答案:
    100
    不能;因为方法Integer.parseInt(str)不能将字符串“exit”转化为整数,抛出异常。
    3、写出下面的程序编译、运行后的结果(6分)。

    public class Test{
         public static void main(String args[]) {
             new Student("Tom", 'm', 90, 88);
             new Student("Jack", 'm', 66, 89);
             new Student("Mary", 'f', 76, 86);
             System.out.println("name\tsex\tchinese\tenglish");
             Student.print();
         }
     }
     class Student {
         protected  String   name;
         protected  char     sex;
         protected  int      chinese;
         protected  int      english;
         protected  Student  next;
         static Student list; 
         Student (String name, char sex, int chinese, int english)   {
             this.name=name;
             this.sex=sex;
             this.chinese=chinese;
             this.english=english;
             this.next=list;
             list=this;
         }
         static void print() {
             Student friend=list;
             if (friend==null)
                 System.out.println("The list is empty.");
             else {
                 do{
                     System.out.println(friend.toString());
                     friend=friend.next;
                 }while(friend!=null);
             }
         }
         public String toString()  {
             return new String(name+"\t"+sex+"\t"+chinese+"\t"+english);
         }
     }
    

    答案:
    name sex chinese english
    Mary f 76 86
    Jack m 66 89
    Tom m 90 88

    《JAVA程序设计》期末考试试题 (六)

    一、填空题

    1.定义类的保留字是( class ),定义接口的保留字是( interface )。
    2.Socket通常也称为 ( 套接字 ),用于描述( IP地址 ) 和 ( 端口 )。
    3.线程的优先级在( 1 )至( 10 )之间,数值越大( 任务越紧急 )。
    4.构造方法是一种特殊的成员方法,构造方法名与( 类名 ) 相同。
    5.Java语言只允许单继承,指每个类只能有一个 ( 父类 )。
    6.Java源程序的扩展名是( .java ),经过编译后的程序的扩展名是( .class )。
    7. 在一个时间只能由一个线程访问的资源称为 ( 临界资源 ) 。访问临界资源的代码( 临界代码 )。
    8. 在多线程系统中,多个线程之间有 ( 同步 ) 和 ( 互斥 ) 两种关系。
    9、使用运算符( new ),创建类的对象,给对象分配内存空间。
    10、程序中实现多线程的方法有两种:继承Thread类和实现( Runnable )接口。
    11、同一个类中多个方法具有相同的方法名,不同的参数列表称为方法的( 重载 )。
    12、Java语言中的浮点型数据根据数据存储长度和数值精度的不同,进一步分为( float )和( double )两种具体类型。
    13、假设x=1,y=2,则表达式x+y>=x*y的值是( true ),其数据类型是(布尔)。
    14、在Java的基本数据类型中,char型采用Unicode编码方案,这样无论是中文字符还是英文字符,都是占用( 2 )字节内存空间。
    15、用户自定义异常是通过继承_____ 异常 ____类或其子类。
    16、为了支持Java程序的数据库操作功能,Java语言采用了专门的Java数据库编程接口API,叫做 JDBC 。
    17、可以通过继承 Thread 类和实现 Runnable 接口来创建线程。

    二、选择题

    1.关于选择结构下列哪个说法正确? ( B )
    A.if语句和 else语句必须成对出现
    B.if语句可以没有else语句对应
    C.switch结构中每个case语句中必须用break语句
    D.switch结构中必须有default语句
    2.while循环和 do…while循环的区别是:  (D  )
    A.没有区别,这两个结构任何情况下效果一样
    B.while循环比 do…while循环执行效率高
    C.while循环是先循环后判断,所以循环体至少被执行一次
    D.do…while循环是先循环后判断,所以循环体至少被执行一次
    3.关于 for循环和 while循环的说法哪个正确? ( B )
    A.while循环先判断后执行,for循环先执行后判断。
    B.while循环判断条件一般是程序结果,for循环的判断条件一般是非程序结果
    C.两种循环任何时候都不可以替换
    D.两种循环结构中都必须有循环体,循环体不能为空
    4.下列修饰符中与访问控制无关的是 ( D )
    A.private    B.public
    C.protected D.final
    5. void的含义:  ( A )
    A.方法没有返回值    B. 方法体为空
    C.没有意义     D. 定义方法时必须使用
    6. return语句:  (C )
    A.只能让方法返回数值     B.方法都必须含有
    C.方法中可以有多句return    D.不能用来返回对象
    7.关于对象成员占用内存的说法哪个正确?  ( B )
    A.同一个类的对象共用同一段内存
    B、同一个类的对象使用不同的内存段,但静态成员共享相同的内存空间
    C.对象的方法不占用内存
    D.以上都不对
    8.下列说法哪个正确?©
    A.不需要定义类,就能创建对象
    B.对象中必须有属性和方法
    C.属性可以是简单变量,也可以是一个对象
    D、属性必须是简单变量
    9.下列说法哪个正确?  ( A )
    A、一个程序可以包含多个源文件
    B、一个源文件中只能有一个类
    C、一个源文件中可以有多个公共类
    D、一个源文件只能供一个程序使用
    10.关于方法main()的说法哪个正确?( C )
    A.方法main()只能放在公共类中
    B main()的头定义可以根据情况任意更改
    C.一个类中可以没有main()方法
    D.所有对象的创建都必须放在main()方法中
    11.构造函数何时被调用?  ( A )
    A、创建对象时      B、类定义时
    C、使用对象的方法时   D、使用对象的属性时
    12. 抽象方法:  (  C)
    A、可以有方法体
    B、可以出现在非抽象类中
    C、是没有方法体的方法
    D、抽象类中的方法都是抽象方法 
    13.关于继承的说法正确的是:  (B  )
    A、子类将继承父类所有的属性和方法。
    B、子类将继承父类的非私有属性和方法。
    C、子类只继承父类public方法和属性
    D、子类只继承父类的方法,而不继承属性
    14.关于构造函数的说法哪个正确?  ( C )
    A、一个类只能有一个构造函数
    B、一个类可以有多个不同名的构造函数
    C、构造函数与类同名
    D、构造函数必须自己定义,不能使用父类的构造函数
    17.覆盖与重载的关系是  ( A )
    A、覆盖只有发生在父类与子类之间,而重载可以发生在同一个类中
    B.覆盖方法可以不同名,而重载方法必须同名
    C.final修饰的方法可以被覆盖,但不能被重载
    D.覆盖与重载是同一回事
    18.关于接口哪个正确?  ( A )
    A、实现一个接口必须实现接口的所有方法
    B.一个类只能实现一个接口
    C.接口间不能有继承关系
    D.接口和抽象类是同一回事
    19.异常包含下列哪些内容?  (  A)
    A.程序执行过程中遇到的事先没有预料到的情况
    B.程序中的语法错误  
    C.程序的编译错误
    D.以上都是

    20. 对于已经被定义过可能抛出异常的语句,在编程时:  ( A )
    A、必须使用try/catch语句处理异常,或用throws将其抛出
    B.如果程序错误,必须使用 try/catch语句处理异常
    C.可以置之不理
    D.只能使用try/catch语句处理
    21. 字符流与字节流的区别在于(D  )
    A.前者带有缓冲,后者没有
    B.前者是块读写,后者是字节读写
    C. 二者没有区别,可以互换使用
    D. 每次读写的字节数不同
    22.下列流中哪个不属于字节流  (  D)
    A.FileInputStream
    B.BufferedInputStream
    C. FilterInputStream
    D. InputStreamReader

    三、程序填空题

    1.public class Sum{
    	public static void main(String [] args){
    		int j=10;
    		System.out.println("j is : "+j);
    		calculate(j);
    		System.out.println("At last, j is : "+j);
    	}
    static void calculate (int j){
    		for (int i = 0;i<10;i++)
    			j++;
    		System.out.println("j in calculate() is: "+j);
    	}
    }
    

    输出结果为:
    j is : (1)
    j in calculate() is : (2)
    At last j is : (3)
    答案:(1) 10; (2) 20; (3) 10。
    2. 按要求填空

    abstract class SuperAbstract{
    	void a(){}
    	abstract void b();
    	abstract int c(int i);
    }
    interface AsSuper
    {
    	void x();
    }
    abstract class SubAbstract extends SuperAbstract implements AsSuper
    {
    public void b(){}
    	abstract String f();
    }
    public class InheritAbstract extends SubAbstract{
    	public void x(){}
    	public int c(int i ) {}
    	public String f(){}
    	public static void main(String args[]){
    		InheritAbstract instance=new InheritAbstract();
    		instance.x();
    		instance.a();
    		instance.b();
    		instance.c(100);
    		System.out.println(instance.f());
    	} 
    }
    

    在以上这段程序中:
    抽象类有:SuperAbstract和 (1)  (写出类名)
    非抽象类有:       (2)  (写出类名)
    接口有:         (3)  (写出接口名)
    AsSuper中的x()方法是(4)方法,所以在InheritAbstract中必须对它进行(5)       
    答案:
    (1) SuperAbstract;(2) InheritAbstract;(3) AsSuper;(4) 抽象;(5) 覆盖和实现。
    3. 按注释完成程序
    public class Leaf {
    private int i = 0; //此属性值用于检验
    Leaf increment(){ //定义方法increment(),返回值是Leaf类的对象
    i++;
    return (1) ;//将当前对象的地址作为返回值返回
    }
    void print() {
    System.out.println(" i = " + i);
    }
    public static void main(String args[]){
    Leaf x = (2); //创建Leaf类的对象x
    x.increment().increment().increment().print();
    }//多次调用方法increment(),返回的都是x的地址,i 值表示调用次数
    }
    输出结果为 i = (3)
    答案:
    (1) this; (2)new Leaf();(3) 3
    4. 按注释提示完成文件复制的程序
    //FileStream源代码如下:
    import java.io.*;
    class FileStream {
    public static void main(String args []) {
    try {
    File inFile = new File(“file1.txt”); //指定源文件
    File outFile = new File(“file2.txt”); //指定目标文件
    FileInputStream fis =(1);
    FileOutputStream fos = new FileOutputStream(outFile);
    int c;
    //逐字节从源文件中输入,再输出到fos流
    while ((c = fis.read ())!=-1)
    (2);
    fis.close();
    fos.close();
    }
    catch (Exception e) {
    System.out.println("FileStreamsTest: "+e);
    }
    }
    }
    答案:
    (1) new FileInputStream(inFile);
    (2) fos.write©;
    5. 阅读程序,给出结果:

    // AbstractClassDemo.java源代码如下:
    abstract class Shape {     //定义抽象类Shape和抽象方法display
    	abstract void display();
    }
    class Circle extends Shape {
    	void display() {		//实现抽象类的方法
    		System.out.println("Circle");
    	}
    }
    class Rectangle extends Shape {
    	void display() {    //实现抽象类的方法		
    System.out.println("Rectangle");
    	}
    }
    class Triangle extends Shape {
    	void display() {  	//实现抽象类的方法
    		System.out.println("Triangle");
    	}
    }
    public class AbstractClassDemo{
    	public static void main(String args[]){
    		(new Circle()).display();	//定义无名对象来调用对应的display方法
    		(new Rectangle()).display();
    		(new Triangle()).display();
    	}
    

    }
    输出结果是 ?
    答案:(1) Circle; (2) Rectangle; (3) Triangle。

    《JAVA程序设计》期末考试试题 (七)

    一、选择题

    1. 请说出下列代码的执行结果 : (B)
      String s = “abcd”;
      String s1 = new String(s);
      if (s = = s1) System.out.println(“the same”);
      if (s.equals(s1)) System.out.println(“equals”);
      A. the same equals B. equals
      C. the same D. 什么结果都不输出

    2. 下列有关 Java 中接口的说法哪个是正确的? (B)
      A. 接口中含有具体方法的实现代码
      B. 若一个类要实现一个接口,则用到 “implements” 关键字
      C. 若一个类要实现一个接口,则用到“ extends ”关键字
      D. 接口不允许继承

    3. 下列代码的执行结果是什么? (B)
      String s1 = “aaa”;
      s1.concat(“bbb”);
      System.out.println(s1);
      A. The string “aaa”.
      B. The string “aaabbb”.
      C. The string “bbbaaa”.
      D. The string “bbb”.

    4. 如果有一个对象 myListener ( 其中 myListener 对象实现了 ActionListener 接口 ), 下列哪条语句使得 myListener 对象能够接受处理来自于 smallButton 按钮对象的动作事件 ? ©
      A. smallButton.add(myListener);
      B. smallButton.addListener(myListener);
      C. smallButton.addActionListener(myListener);
      D. smallButton.addItem(myListener);

    二.读程序题

    1. 读下列代码,说出这段程序的功能。
      import java.io.;
      public class Test{
      public static void main( String [] argv) {
      try {
      BufferedReader is =
      new BufferedReader( new InputStreamReader(System.in));
      String inputLine;
      While ((inputLine = is.readLine ())!= null) {
      System.out.println(inputLine);
      }
      is.close();
      }catch (IOException e) {
      System.out.println("IOException: " + e);
      }
      }
      }
      答案:读取键盘输入,显示到屏幕上,直到键盘输入为空为止。
      2、 读下列程序,写出正确的运行结果。
      class test {
      public static void main (String [] args ){
      int x=9, y;
      if (x>=0)
      if (x>0)
      y=1;
      else y=0;
      else y=-1;
      System.out.println(y);
      }
      }
      答案:1
      3、以下程序的输出结果为____ mainbord:华硕 cpu:Intel
      public class Computer
      {
      String mainbord,cpu;
      public Computer(String s1,String s2)
      {
      mainbord=s1;
      cpu=s2;
      }
      public static void main(String[]args)
      {
      Computer c=new Computer(“华硕”,“Intel”);
      System.out.println(“mainbord:”+c.mainbord+" cpu:"+c.cpu);
      }
      }
      4、下列程序的运行结果是
      s = 180_____。
      import java.io.
      ;
      public class abc
      {
      public static void main(String args[ ])
      { int i, s = 0 ;
      int a[ ] = { 10 , 20 , 30 , 40 , 50 , 60 , 70 , 80 , 90 };
      for ( i = 0 ; i < a.length ; i ++ )
      if ( a[i]%3 = = 0 ) s += a[i] ;
      System.out.println(“s=”+s);
      }
      }
      5、 读程序,写出正确的运行结果。
      public class Father{
      int a=100;
      public void miner(){
      a–;
      }
      public static void main(String[] args){
      Father x = new Father();
      Son y = new Son();
      System.out.println(y.a);
      System.out.println( y.getA());
      y.miner();
      System.out.println(y.a);
      System.out.println(y.getA());
      }
      }
      class Son extends Father{
      int a = 0;
      public void plus(){
      a++;
      }
      public int getA() {
      return super.a;
      }
      }
      答案:
      0 100 0 99

    三 . 简答题

    1. Java语言的特点。
      答:
      简单性:Java风格类似于C++,但它摒弃了C++中容易引起程序错误的地方
      面向对象:Java语言的设计是完全面向对象
      分布式:
      解释执行:
      健壮性:Java提供自动垃圾回收机制,异常处理机制,进行严格的类型检查
      平台无关性:
      安全性
      多线程
      动态性

    2. 请描述 AWT事件模型。
      答:
      结合AWT事件模型并举例来说:
      import java.awt.event.*;

    3. 监听对象必须实现对应事件监听器的接口
      class MyFirstFrame extends Frame implements ActionListener
      {…}
      2.明确事件监听器的接口形式
      public void actionPerformed ( ActionEvent event) {…}

    4. MyFirstFrame 类必须实现接口ActionListener中的所有方法。

    5. 注册监听对象.
      为了把MyFirstFrame对象注册为两个按钮的事件监听对象,必须在MyFirstFrame
      的构造函数中添加语句如下:
      cancelButton.addActionListener(this);
      okButton.addActionListener(this);

    6. 在 Java中,怎样创建一个线程?
      答:
      1、定义类来实现Runnable接口
      class TestThread implements Runnable {
      public void run() { …}
      }
      2、继承Thread类来实现
      class TestThread extends Thread {
      TestThread(String name) {
      super(name);
      start();
      }
      public void run() {…}
      }

    展开全文
  • 一个java程序是怎样运行起来的(1)

    万次阅读 2017-04-17 21:58:01
    一个java程序是怎样运行起来的

    首先编写一测试程序

    public class Test {
    	
    	public static void main(String[] args){
    		System.out.println("test");
    	}
        
    }
    执行javac Test.java 得到Test.class文件(编译过程有点复杂,这里先不看)

    执行java Test,控制台输出"test",想要弄清楚java程序是怎么运行起来首先得了解清楚class文件

    看下Test.class里究竟是什么东西,class文件的内容如下:


    上图中都是以16进制表示,接下来挨个分析其中的内容表示什么意思。class文件中存储的数据可以参考下表:

    类型名称数量
    u4magic1
    u2class_minor_version1
    u2class_major_version1
    u2constant_pool_count1
    cp_infoconstant_poolconstant_pool_count - 1
    u2access_flags1
    u2this_class1
    u2super_class1
    u2interfaces_count1
    u2interfacesinterfaces_count
    u2fields_count1
    field_infofieldsfields_count
    u2methods_count1
    method_infomethodsmethods_count
    u2attribute_count1
    attribute_infoattributesattributes_count

    1、magic 魔数

    CA FE BA BE

    魔数,确定该文件是否是虚拟机可以接受的文件

    2、class文件版本信息

    00 00 00 33

    class文件的版本号,51表示jdk1.7.0

    3、常量池

    3.1常量池入口

    00 1D

    常量池数量为29-1=28,每个类只有一个常量池

    常量池中放了字符串,常量值,类名称,字段名,方法名等,反编译下Test.class,看看常量池中存放了哪些东西

    Constant pool:
       #1 = Methodref          #6.#15         //  java/lang/Object."<init>":()V
       #2 = Fieldref           #16.#17        //  java/lang/System.out:Ljava/io/PrintStream;
       #3 = String             #18            //  test
       #4 = Methodref          #19.#20        //  java/io/PrintStream.println:(Ljava/lang/String;)V
       #5 = Class              #21            //  Test
       #6 = Class              #22            //  java/lang/Object
       #7 = Utf8               <init>
       #8 = Utf8               ()V
       #9 = Utf8               Code
      #10 = Utf8               LineNumberTable
      #11 = Utf8               main
      #12 = Utf8               ([Ljava/lang/String;)V
      #13 = Utf8               SourceFile
      #14 = Utf8               Test.java
      #15 = NameAndType        #7:#8          //  "<init>":()V
      #16 = Class              #23            //  java/lang/System
      #17 = NameAndType        #24:#25        //  out:Ljava/io/PrintStream;
      #18 = Utf8               test
      #19 = Class              #26            //  java/io/PrintStream
      #20 = NameAndType        #27:#28        //  println:(Ljava/lang/String;)V
      #21 = Utf8               Test
      #22 = Utf8               java/lang/Object
      #23 = Utf8               java/lang/System
      #24 = Utf8               out
      #25 = Utf8               Ljava/io/PrintStream;
      #26 = Utf8               java/io/PrintStream
      #27 = Utf8               println
      #28 = Utf8               (Ljava/lang/String;)V
    常量池中的项目类型有:
    CONSTANT_Utf8_info      tag标志位为1,   UTF-8编码的字符串,比如类或接口的全限定名,参数名等
    CONSTANT_Integer_info  tag标志位为3, int整型字面量
    CONSTANT_Float_info     tag标志位为4, float浮点型字面量
    CONSTANT_Long_info     tag标志位为5, long长整形字面量
    CONSTANT_Double_info  tag标志位为6, double双精度字面量
    CONSTANT_Class_info    tag标志位为7, 类或接口的符号引用,指向包含字符串字面值的CONSTANT_Utf8表
    CONSTANT_String_info    tag标志位为8,字符串类型的字面量,指向包含字符串字面值的CONSTANT_Utf8表
    CONSTANT_Fieldref_info  tag标志位为9,  字段的符号引用,指向包含该字段所属类名的CONSTANT_Utf8表
    CONSTANT_Methodref_info  tag标志位为10,类中方法的符号引用,指向包含该方法所属类型的CONSTANT_Utf8表
    CONSTANT_InterfaceMethodref_info tag标志位为11, 接口中方法的符号引用

    CONSTANT_NameAndType_info  tag 标志位为12,字段和方法的名称以及类型的符号引用

    3.2常量池内容

    接上,继续分析class中的内容,参照 jvm官方文档 ,看下常量池中究竟是什么东西

    常量池1-----0A 00 06 00 0F   //

      1,0A---tag为10,表示第一个常量类型为CONSTANT_Methodref,参照官方文档,CONSTANT_Methodref的结构为

    CONSTANT_Methodref_info {
        u1 tag;
        u2 class_index;
        u2 name_and_type_index;
    }
    所以后面跟了4个字节

      2,00 06---声明当前方法类描述符索引值为6     //  java/lang/Object

      3,00 0F---当前方法的名称和类型索引值为15  //  "<init>":()V

    所以,结合上文中反编译出的内容来看,这几个16进制翻译过来正好是

    #1 = Methodref          #6.#15         //  java/lang/Object."<init>":()V

    常量池2----09 00 10 00 11

      1,09---tag为9,类型为CONSTANT_Fieldref

      2,00 10---声明当前方法类描述符索引值为16 // java/lang/System

      3,00 11---字段描述符的名称和类型索引值为17 //  out:Ljava/io/PrintStream;

    这几个16进制翻译过来正好是

    #2 = Fieldref           #16.#17        //  java/lang/System.out:Ljava/io/PrintStream;


    常量池3---08 00 12

       1,08---tag为8,类型为CONSTANT_String,根据官方文档,其结构为

    CONSTANT_String_info {
        u1 tag;
        u2 string_index;
    }
    所以后面跟了两个字节

       2,00 12---声明当前String值所在的索引值为18

    当前16进制翻译过来,表示

    #3 = String             #18            //  test


    常量池4---0A  00 13 00 14,对照着上面的分析,

    #4 = Methodref          #19.#20        //  java/io/PrintStream.println:(Ljava/lang/String;)V

    常量池5---07 00 15

       1,07---tag为7,类型为CONSTANT_Class,根据官方文档,其结构为

    CONSTANT_Class_info {
        u1 tag;
        u2 name_index;
    }
       2,00 15----当前类名称的索引值为21

    #5 = Class              #21            //  Test


    常量池6---07 00 16,对照上面的分析

    #6 = Class              #22            //  java/lang/Object

    常量池7---01 00 06 3C 69 6E 69 74 3E

      1,01---tag为1,类型为CONSTANT_Utf8,根据官方文档

    CONSTANT_Utf8_info {
        u1 tag;
        u2 length;
        u1 bytes[length];
    }
      2,06---表示字符串的长度为6

      3,3C 69 6E 69 74 3E ---字符串<init>

    #7 = Utf8               <init>

    常量池8---01 00 03 28 29 56

    常量池9---01 00 04 43 6F 64 65

    常量池10---01 00 0F 4C 69 6E 65 4E 75 6D 62 65 72 54 61 62 6C 65

    常量池11---01 00 04 6D 61 69 6E

    常量池12---01 00 16 28 5B 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 29 56

    常量池13---01 00 0A 53 6F 75 72 63 65 46 69 6C 65

    常量池14---01 00 09 54 65 73 74 2E 6A 61 76 61

       #8 = Utf8               ()V
       #9 = Utf8               Code
      #10 = Utf8               LineNumberTable
      #11 = Utf8               main
      #12 = Utf8               ([Ljava/lang/String;)V
      #13 = Utf8               SourceFile
      #14 = Utf8               Test.java

    常量池15---0C 00 07 00 08

      1,0C---tag为11,类型为CONSTANT_NameAndType,参照jvm官方文档,其结构为

    CONSTANT_NameAndType_info {
        u1 tag;
        u2 name_index;
        u2 descriptor_index;
    }
      2,00 07---该字段或方法名称常量索引值为7,即
    #7 = Utf8               <init>

      3,00 08---该字段或方法描述符常量索引值为8 ,即

    #8 = Utf8               ()V

    常量池16---07 00 17

    常量池17---0C 00 18 00 19

    常量池18---01 00 04 74 65 73 74

    常量池19---07 00 1A

    常量池20---0C 00 1B 00 1C

    常量池21---01 00 04 54 65 73 74

    常量池22---01 00 10 6A 61 76 61 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74

    常量池23---01 00 10 6A 61 76 6A 2F 6C 61 6E 67 2F 53 79 73 74 65 6D

    常量池24---01 00 03 6F 75 74

    常量池25---01 00 15 4C 6A 61 76 61 2F 69 6F 2F 50 72 69 6E 74 53 74 72 65 61 6D 3B

    常量池26---01 00 13 6A 61 76 61 2F 69 6F 2F 50 72 69 6E 74 53 74 72 65 61 6D

    常量池27---01 00 07 70 72 69 6E 74 6C 6E

    常量池28---01 00 15 28 4 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 29 56

      #16 = Class              #23            //  java/lang/System
      #17 = NameAndType        #24:#25        //  out:Ljava/io/PrintStream;
      #18 = Utf8               test
      #19 = Class              #26            //  java/io/PrintStream
      #20 = NameAndType        #27:#28        //  println:(Ljava/lang/String;)V
      #21 = Utf8               Test
      #22 = Utf8               java/lang/Object
      #23 = Utf8               java/lang/System
      #24 = Utf8               out
      #25 = Utf8               Ljava/io/PrintStream;
      #26 = Utf8               java/io/PrintStream
      #27 = Utf8               println
      #28 = Utf8               (Ljava/lang/String;)V

    到此常量池结束

    4、访问标志access_flags

    00 21----Test类的访问标志,参照官方文档,访问标志有

    Flag NameValueInterpretation
    ACC_PUBLIC0x0001Declared public; may be accessed from outside its package.
    ACC_FINAL0x0010Declared final; no subclasses allowed.
    ACC_SUPER0x0020Treat superclass methods specially when invoked by the invokespecial instruction.
    ACC_INTERFACE0x0200Is an interface, not a class.
    ACC_ABSTRACT0x0400Declared abstract; must not be instantiated.
    ACC_SYNTHETIC0x1000Declared synthetic; not present in the source code.
    ACC_ANNOTATION0x2000Declared as an annotation type.
    ACC_ENUM0x4000Declared as an enum type.

    0x0021 = 0x0020|0x0001,即ACC_PUBLIC和ACC_SUPER为真,ACC_PUBLIC好理解,ACC_SUPER这是什么鬼,翻看官方文档,原文如下:

    The ACC_SUPER flag indicates which of two alternative semantics is to be expressed by the invokespecial instruction (§invokespecial) if it appears in this class. Compilers to the instruction set of the Java Virtual Machine should set the ACC_SUPER flag.

    The ACC_SUPER flag exists for backward compatibility with code compiled by older compilers for the Java programming language. In Oracle’s JDK prior to release 1.0.2, the compiler generated ClassFile access_flags in which the flag now representing ACC_SUPER had no assigned meaning, and Oracle's Java Virtual Machine implementation ignored the flag if it was set.

    为了兼容之前的jdk版本,在jdk1.0.2之后这个编译出来的为真

    5,类索引,父类索引,接口索引

    接下来就是类索引,父类索引,接口索引

    00 05------类索引值为#5 

    #5 = Class              #21            //  Test

    00 06-----父类索引值为#6

    #6 = Class              #22            //  java/lang/Object

    00 00----类没有实现接口,接口数为0,所以后面没有接口信息

    6、字段

    00 00----当前类有0个字段

    7、方法,指令

    00 02----当前类有两个方法,参照官方文档,方法的结构如下:

    method_info {
        u2             access_flags;
        u2             name_index;
        u2             descriptor_index;
        u2             attributes_count;
        attribute_info attributes[attributes_count];
    }
    方法1:00 01 00 07 00 08 00 01 

          ----00 01:access_flags=0x0001=ACC_PUBLIC,方法的访问标志如下表:

    Flag NameValueInterpretation
    ACC_PUBLIC0x0001Declared public; may be accessed from outside its package.
    ACC_PRIVATE0x0002Declared private; accessible only within the defining class.
    ACC_PROTECTED0x0004Declared protected; may be accessed within subclasses.
    ACC_STATIC0x0008Declared static.
    ACC_FINAL0x0010Declared final; must not be overridden (§5.4.5).
    ACC_SYNCHRONIZED0x0020Declared synchronized; invocation is wrapped by a monitor use.
    ACC_BRIDGE0x0040A bridge method, generated by the compiler.
    ACC_VARARGS0x0080Declared with variable number of arguments.
    ACC_NATIVE0x0100Declared native; implemented in a language other than Java.
    ACC_ABSTRACT0x0400Declared abstract; no implementation is provided.
    ACC_STRICT0x0800Declared strictfp; floating-point mode is FP-strict.
    ACC_SYNTHETIC0x1000Declared synthetic; not present in the source code.

       ---00 07:name_index=#7----->#7 = Utf8               <init>,可以看出该方法为构造函数

       ---00 08:descriptor_index=#8------>#8 = Utf8               ()V

       ---00 01:attributes_count=1,所以紧随其后就是attribute_info部分,根据官方文档,其结构如下:

    Code_attribute {
        u2 attribute_name_index;
        u4 attribute_length;
        u2 max_stack;
        u2 max_locals;
        u4 code_length;
        u1 code[code_length];
        u2 exception_table_length;
        {   u2 start_pc;
            u2 end_pc;
            u2 handler_pc;
            u2 catch_type;
        } exception_table[exception_table_length];
        u2 attributes_count;
        attribute_info attributes[attributes_count];
    }
      00 09 00 00 00 1D 00 01 00 01 00 00 00 05   //非指令部分

         ---00 09:attribute_name_index=#9---------->#9 = Utf8               Code

         ---00 00 00 1D:attribute_length=29,所以整个属性表的长度为29+6=35,见官方文档说明:The value of the attribute_length item indicates the length of the attribute, excluding the initial six bytes.

         ---00 01:max_stack=1

         ---00 01:max_locals=1

         ---00 00 00 05:code_length=5

    紧接着就是方法1的指令部分:
    2A B7 00 01 B1

         ---2A:aload_0 ,

         ---B7 00 01 ->invokespecial #1,调用超类构造方法

         ---B1--->return

    方法1的Exception:

    00 00:方法没有throw异常

    方法1的attribute count:

    00 01://方法1最后有一个属性块,其结构如下:

    LineNumberTable_attribute {
        u2 attribute_name_index;
        u4 attribute_length;
        u2 line_number_table_length;
        {   u2 start_pc;
            u2 line_number;	
        } line_number_table[line_number_table_length];
    }
    00 0A 00 00 00 06 00 01

    00 00 00 01

         ---00 0A:attribute_name_index=#10---->#10 = Utf8               LineNumberTable

         ---00 00 00 06:attribute_lenght=6

         ---00 01:line_number_table_length=1,表示这个LineNumberTable中有一条记录

         ---00 00 00 01:表示Test.java的第一行代码对应指令0--->0: aload_0


    方法2:00 09 00 0B 00 0C 00 01

        ---00 09:access_flags=0x0008|0x0001=ACC_STATIC|ACC_PUBLIC

        ---00 0B:name_index=#11------>#11 = Utf8               main

        ---00 0C:descriptor_index=#12----->#12 = Utf8               ([Ljava/lang/String;)V

        ---00 01:arrtibutes_count=1,紧接着是attribute_info

    方法2的code,非指令部分:

    00 09 00 00 00 25 00 02 00 01 00 00 00 09

        ---00 09:attribute_name_index=#9----->#9 = Utf8               Code

        ---00 00 00 25:attribute_length=37,所以整个属性表的长度为43

        ---00 02:max_stack=2

        ---00 01:max_locals=1

        ---00 00 00 09:code_length=17

    方法2的code,指令部分

    B2 00 02----->getstatic #2:获取指定类的静态域,并且压入到栈顶,#2表示#2 = Fieldref           #16.#17        //  java/lang/System.out:Ljava/io/PrintStream;

    12 03--->ldc #3,将“test”常量值从常量池中压入到栈顶

    B6 00 04---->invokervirtual  #4,调用实例方法,#4 = Methodref          #19.#20        //  java/io/PrintStream.println:(Ljava/lang/String;)V,即println方法

    B1---->return


    方法2的Exception:

    00 00 ----->没有定义throw

    方法2的attribute_count:

    00 01 //方法最后有个属性

    方法2的LineNumberTable:

    00 0A 00 00 00 0A 00 02

         ----00 0A:attribute_name_index=#10------>#10 = Utf8               LineNumberTable

         ----00 00 00 0A:attribute_length=10

         ----00 02:line_number_table_lenght=2,表示lineNumberTable中有2条记录

    00 00 00 04:Test.java第4行对应指令0 --->getstatic     #2

    00 08 00 05:Test.java第5行对应指令8----->8: return


    8.sourceFile属性

    00 01:当前class文件包含1个attribute_info

    00 0D 00 00 00 02 00 0E

         ---00 0D:attribute_name_index=#13---->#13 = Utf8               SourceFile

         ---00 00 00 02:attribute_length=2

         ---00 0E:sourcefile_index=#14---->#14 = Utf8               Test.java


    至此,class文件中的内容分析完毕!



    展开全文
  • Java实现简单通讯录(程序设计作业)

    万次阅读 多人点赞 2019-11-29 21:56:59
    Java写了一个通讯录管理系统 package tongxunlu; import java.util.*; import java.text.*; import java.io.*; //联系人类 class Linkman { Linkman(String n,String[] p,String w,String c,String e,String b,...

    用Java写了一个通讯录管理系统

    package tongxunlu;
    import java.util.*;
    import java.text.*;
    import java.io.*;
    //联系人类
    class Linkman {
    		Linkman(String n,String[] p,String w,String c,String e,String b,String r){
    			name=n;
    			phone=p;
    			work=w;
    			call=c;
    			email=e;
    			birthday=b;
    			remark=r;
    		}
    		Linkman(){phone=new String[10];}
    		private String name;//姓名
    		private String[] phone;//电话
    		private String work;//工作地址
    		private String call;//通信地址
    		private String email;//电子邮箱
    		private String birthday;//生日
    		private String remark;//备注
    		String  getName()//获取姓名
    		{
    			return name;
    		}
    		void setName(String name)//修改姓名
    		{
    			this.name=name;
    		}
    		String[]  getPhone()//获取电话
    		{
    			return phone;
    		}
    		void setPhone(String[] phone)//修改电话
    		{
    			this.phone=phone;
    		}
    		String  getWork()//获取工作地址
    		{
    			return work;
    		}
    		void setWork(String work)//修改工作地址
    		{
    			this.work=work;
    		}
    		String  getCall()//获取通讯地址
    		{
    			return call;
    		}
    		void setCall(String call)//修改通讯地址
    		{
    			this.call=call;
    		}
    		String  getEmail()//获取电子邮箱
    		{
    			return email;
    		}
    		void setEmail(String email)//修改电子邮箱
    		{
    			this.email=email;
    		}
    		String  getBirthday()//获取生日
    		{
    			return birthday;
    		}
    		void setBirthday(String birthday)//修改生日
    		{
    			this.birthday=birthday;
    		}
    		String  getRemark()//获取备注
    		{
    			return remark;
    		}
    		void setRemark(String remark)//修改备注
    		{
    			this.remark=remark;
    		}
    	}
    //管理联系人类
    class manageLinkman{
    	 Linkman[] l=new Linkman[1000];
    	Scanner input=new Scanner(System.in);
    	manageLinkman() {
    		for(int i=0;i<l.length;i++)
    		{
    			if(l[i]==null)
    			l[i]=new Linkman();
    		}
    	
    	}
    	Linkman[] list(Linkman x)//联系人列表
    	 { 
    		for(int i=0;i<l.length;i++)
    		{
    		 if(l[i].getName()==null)
    		 {
    			 l[i]=x;
    			 break;
    		 }
    		}
    		return l;
    	 }
    void addLinkman()//添加实现
    {
    	   Linkman l1=new Linkman();
    	   boolean f=false;
    	 System.out.println("姓名:");
    		String name=input.next();
    		for(int i=0;i<l.length&&l[i].getName()!=null;i++)
    		{
    		 if(l[i].getName().equals(name))
    			 f=true;
    		}
    		if(f)
    		System.out.println("添加失败,该联系人已存在!");
    		else
    		{l1.setName(name);
    		String[] phone=new String[10];
    		for(int i=0;i<10;i++)
    		{System.out.println("电话号码"+(i+1)+":");
    			phone[i]=input.next();
    		System.out.print("是否还要添加其他号码:1.是 0.否");
    		String x =input.next();
    		if(x.equals("1"))
    		System.out.println("请继续!");
    		else if(x.equals("0"))
    		{break;}
    		else
    		{System.out.println("指令错误,已退出!");
    			break;}
    		}
    		l1.setPhone(phone);
    		System.out.println("工作地址:");
    		String work=input.next();
    		l1.setWork(work);
    		System.out.println("通讯地址:");
    		String call=input.next();
    		l1.setCall(call);
    		System.out.println("电子邮箱:");
    		String email=input.next();
    		l1.setEmail(email);
    		System.out.println("生日:");
    		String birthday=input.next();
    		l1.setBirthday(birthday);
    		System.out.println("备注:");
    		String remark=input.next();
    		l1.setRemark(remark);
    		list(l1);
    		System.out.println("添加成功!");}
    }
    int nameFind(String name) {//按姓名查找实现
    	int i;
    	boolean f=false;
    	 for(i=0;i<l.length&&l[i].getName()!=null;i++)
    	   {
    		if(l[i].getName().equals(name))
    			{f=true;
    			 break;
    			}
    	      }
    	if(f)
    		return i;
    	else
    		return -1;
    }
    void phoneFind(String phone) {//按号码查找实现
    	int i;
    	boolean f=false;
    	String[] num=new String[10];
    	 for(i=0;i<l.length;i++)
    	{System.arraycopy(l[i].getPhone(), 0, num, 0, 10);
    	   for(int j=0;j<10&&num[j]!=null;j++)
    	  { 
    		if(num[j].equals(phone))
    			{f=true;
    			break;}
    	  }
    	   if(f)
    		printLinkman(i);
    		else
    			{System.out.println("对不起,通讯录中没有此联系人!");
    			System.out.println("是否添加为新联系人:1.YES 2.NO");
    			String x=input.next();
    			if(x.equals("1"))
    			addLinkman();
    			}	}
    }
    void workFind(String work) {//按工作地址查找实现
    	int i;
    	boolean f=false;
    	 for(i=0;i<l.length&&l[i].getWork()!=null;i++)
    	   {
    		if(l[i].getWork().equals(work))
    			{f=true;
    			break;}
    	   }
    	 if(f)
    		 printLinkman(i);
    	else
    		System.out.println("对不起,没有找到哦!肯定是你输错了!");
    			
    }
    void callFind(String call) {//按通讯地址查找实现
    	int i;
    	boolean f=false;
    	 for(i=0;i<l.length&&l[i].getCall()!=null;i++)
    	   {
    		if(l[i].getCall().equals(call))
    			{f=true;
    			break;}}
    	 if(f)
    		 printLinkman(i);
    	else
    		System.out.println("对不起,没有找到哦!肯定是你输错了!");
    }
    void  emailFind(String email) {//按电子邮箱查找实现
    	int i;
    	boolean f=false;
    	 for(i=0;i<l.length&&l[i].getEmail()!=null;i++)
    	   {
    		if(l[i].getEmail().equals(email))
    			{f=true;
    			 break;}
    		}
    	 if(f)
    		 printLinkman(i);
    	else
    		System.out.println("对不起,没有找到哦!肯定是你输错了!");
    }
    void birthdayFind(String b) {//按生日查找实现
    	int i;
    	boolean f=false;
    	 for(i=0;i<l.length&&l[i].getBirthday()!=null;i++)
    	   {
    		if(l[i].getBirthday().equals(b))
    			{f=true;
    			break;}}
    	 if(f)
    		 printLinkman(i);
    	else
    		System.out.println("对不起,没有找到哦!肯定是你输错了!");
    }
    void remarkFind(String remark) {//按备注查找实现
    	int i;
    	boolean f=false;
    	 for(i=0;i<l.length&&l[i].getRemark()!=null;i++)
    	   {
    		if(l[i].getRemark().equals(remark))
    			{f=true;
    			break;}}
    	 if(f)
    		 printLinkman(i);
    	else
    		System.out.println("对不起,没有找到哦!肯定是你输错了!");
    }
     void del(int i)//删除实现
    	{
    	 if(i==-1)
    		{System.out.println("对不起,通讯录中没有此联系人!");
    		System.out.println("是否添加为新联系人:1.YES 2.NO");
    		String x=input.next();
    		if(x.equals("1"))
    		addLinkman();
    		}
    		else 
    	 {System.out.println("请选择你要删除的内容:");
    	 System.out.println("1.该联系人  2.号码 3.工作地址 4.通讯地址 5.电子邮箱 6.生日 7.备注");
    	String x=input.next();
    	 switch(x)
    	 {
    	 case "1":{ System.out.println("已删除联系人"+l[i].getName()+"!");
    	  l[i].setName(" ");
    	  String[] phone=new String[10];
    		System.arraycopy(l[i].getPhone(),0, phone,0, 10);
    		for(int j=0;j<phone.length&&phone[j]!=null;j++)
    		{phone[j]=" ";}
    	  l[i].setPhone(phone);
    	  l[i].setWork(" ");
    	  l[i].setCall(" ");
    	  l[i].setEmail(" ");
    	  l[i].setBirthday(" ");
    	  l[i].setRemark(" ");}break;
    	 case "2":{
    		String[] phone=new String[10];
    		System.arraycopy(l[i].getPhone(),0, phone,0, 10);
    		for(int j=0;j<phone.length&&phone[j]!=null;j++)
    		{System.out.print("是否要删除号码:"+phone[j]+" 1.是 0.否");
    		String c =input.next();
    		if(c.equals("1"))
    		{   System.out.println("号码"+phone[j]+"已删除!");
    			phone[j]=" ";
    			System.out.println("1.继续 2.退出");
    			String b1 =input.next();
    			if(b1.equals("2"))
    				break;
    		}
    		else
    		continue;		
    		}
    	 l[i].setPhone(phone);};break;
    	 case "3":{ System.out.println("工作地址已删除!");
    	 l[i].setWork(" ");}break;
    	 case "4":{ System.out.println("通讯地址已删除!");
    	 l[i].setCall(" ");}break;
    	 case "5":{ System.out.println("电子邮箱已删除!");
    	 l[i].setEmail(" ");}break;
    	 case "6":{ System.out.println("生日已删除!");
    	 l[i].setBirthday(" ");}break;
    	 case "7":{ System.out.println("备注已删除!");
    	 l[i].setRemark(" ");}break;
    	 default:
    			System.out.println("输入错误!");
    	 }
    	 }
    	
    	}
     void printLinkman(int i)//打印实现
     { 
    	 if(i==-1)
    		{System.out.println("对不起,通讯录中没有此联系人!");
    		System.out.println("是否添加为新联系人:1.YES 2.NO");
    		String x=input.next();
    		if(x.equals("1"))
    		addLinkman();
    		}	
    	 else
    	{System.out.println("已为你找到该联系人!");
    	System.out.println("姓名:"+l[i].getName());
    	String[] num=new String[10];
    	System.arraycopy(l[i].getPhone(), 0, num, 0, 10);
    	for(int j=0;j<10&&num[j]!=null;j++)
    	{ 
    	 System.out.println("电话"+(j+1)+":"+num[j]);
    		}
    	System.out.println("工作地址:"+l[i].getWork());
    	System.out.println("通讯地址:"+l[i].getCall());
    	System.out.println("电子邮箱:"+l[i].getEmail());
    	System.out.println("生日:"+l[i].getBirthday());
    	System.out.println("备注:"+l[i].getRemark());
    	}
    	 }
     void updata(int i)//修改实现
     {
    	 if(i==-1)
    		{System.out.println("对不起,通讯录中没有此联系人!");
    		System.out.println("是否添加为新联系人:1.YES 2.NO");
    		String x=input.next();
    		if(x.equals("1"))
    		addLinkman();
    		}
    
    	else
    	{System.out.println("请选择你要更新的内容:");
    	System.out.println("1.姓名 2.号码 3.工作地址 4.通讯地址 5.电子邮箱 6.生日 7.备注");
    	int x=input.nextInt();
    	switch(x) {
    	case 1:{System.out.println("输入你要更新的姓名:");
    	String name=input.next();
    	l[i].setName(name);}break;
    	case 2:{
    	String[] phone=new String[10];
    	System.arraycopy(l[i].getPhone(),0, phone,0, 10);
    	for(int j=0;j<phone.length;j++)
    	{   if(phone[j].equals(" "))
    		{continue;}
    	System.out.println("是否要更新号码:"+phone[j]+" 1.是 0.否");
    	String b =input.next();
    	if(b.equals("1"))
    		{System.out.println("请输入你要更新的号码:");
    		phone[j]=input.next();
    		System.out.print("原号码已更新为:"+phone[j]);
    		System.out.println("1.继续 2.退出");
    		String b1 =input.next();
    		if(b1.equals("2"))
    			break;}
    	else
    	continue;
    	}
    	l[i].setPhone(phone);}break;
    	case 3:{System.out.println("输入你要更新的工作地址:");
    	String work=input.next();
    	System.out.print("你已修改工作地址"+l[i].getWork()+"为");
    	l[i].setWork(work);
    	System.out.println(l[i].getWork());
    	}break;
    	case 4:{System.out.println("输入你要更新的通讯地址:");
    	String call=input.next();
    	System.out.print("你已修改通讯地址:"+l[i].getCall()+"为");
    	l[i].setCall(call);
    	System.out.println(l[i].getCall());}break;
    	case 5:{System.out.println("输入你要更新的电子邮箱:");
    	String email=input.next();
    	System.out.print("你已修改电子邮箱:"+l[i].getEmail()+"为");
    	l[i].setEmail(email);
    	System.out.print(l[i].getEmail());}break;
    	case 6:{System.out.println("输入你要更新的生日:");
    	String birthday=input.next();
    	System.out.print("你已修改生日:"+l[i].getBirthday()+"为");
    	l[i].setBirthday(birthday);
    	System.out.print(l[i].getBirthday());}break;
    	case 7:{System.out.println("输入你要更新的备注:");
    	String remark=input.next();
    	System.out.print("你已修改备注:"+l[i].getRemark()+"为");
    	l[i].setRemark(remark);
    	System.out.println(l[i].getRemark());}break;
    	default:
    		System.out.println("输入错误!");
    	}}
     }
     void printFile() //写入文件实现
     {
    	try {
    	BufferedWriter output=new BufferedWriter(new FileWriter("通讯录"));
    	for(int i=0;i<l.length&&l[i].getName()!=null;i++)
    		{
    		if(l[i].getName().equals(" "))
    		 continue;
    		else
    		{{output.write("姓名:"+l[i].getName()+" ");
    		String[] num=new String[10];
    		System.arraycopy(l[i].getPhone(), 0, num, 0, 10);
    		for(int j=0;j<10&&num[j]!=null;j++)
    		{ 
    		  output.write("电话"+(j+1)+":"+num[j]+" ");
    			}
    		    output.write("工作地址:"+l[i].getWork()+" ");
    		    output.write("通讯地址:"+l[i].getCall()+" ");
    		    output.write("电子邮箱"+l[i].getEmail()+" ");
    		    output.write("生日:"+l[i].getBirthday()+" ");
    		    output.write("备注"+l[i].getRemark()+" ");}
    		    output.write("\n");}
    		}
    	output.close();
    	System.out.println("文件创建成功!");
    	System.out.println("向文件导入数据成功");
    	}
    	catch(IOException e) {}
     }
    void readFile()//从文件读入数据实现
    {
    	String[] str=new String[1000];
    	try {
    	BufferedReader input=new BufferedReader(new FileReader("通讯录"));
    	int i=0;
    	while((str[i]=input.readLine())!=null)
    	{
    		System.out.println(str[i]);
    		if(str[i].equals(""))
    			break;
    	}
    	input.close();
    	}
    	catch(IOException e) {}
    System.out.println("文件数据全部读取完毕!");
    	}}
    public class Test{//测试类
    	Scanner input=new Scanner(System.in);
    	manageLinkman m=new manageLinkman();
    	public void add()//添加执行
    	{System.out.println("开始添加联系人......");
    		m.addLinkman();
    	}
    	public void find()//查找执行
    	{
    		System.out.println("请选择你的查找方式:");
    		 System.out.println(" 1.按姓名 2.按号码 3.按工作地址 4.按通讯地址 5.按电子邮箱 6.按生日 7.按备注");
    		String x=input.next();
    		switch(x)
    		{
    		case "1":{System.out.println("输入你要查找联系人的姓名:");
    		String name=input.next();
    		m.printLinkman(m.nameFind(name));}break;
    		case "2":{System.out.println("输入你要查找联系人的号码:");
    		String phone=input.next();
    		m.phoneFind(phone);}break;
    		case "3":{System.out.println("输入你要查找联系人的工作地址:");
    		String work=input.next();
    		m.workFind(work);}break;
    		case "4":{System.out.println("输入你要查找联系人的通讯地址:");
    		String call=input.next();
    		m.callFind(call);}break;
    		case "5":{System.out.println("输入你要查找联系人的电子邮箱:");
    		String email=input.next();
    		m.emailFind(email);}break;
    		case "6":{System.out.println("输入你要查找联系人的生日:");
    		String bir=input.next();
    		m.birthdayFind(bir);}break;
    		case "7":{System.out.println("输入你要查找联系人的备注信息:");
    		String remark=input.next();
    		m.remarkFind(remark);}break;
    		default:
    			System.out.println("输入错误!");
    		}
    	}
    	public void del()//删除执行
    	{
    		System.out.println("输入你要删除联系人的姓名:");
    		String name=input.next();
    		m.del(m.nameFind(name));
    	}
    	public void up() {//修改执行
    		System.out.println("输入你要修改联系人的姓名:");
    		String name=input.next();
    		m.updata((m.nameFind(name)));
    	}
    	public void cout()//打印执行
    	{
    		System.out.println("输入你要打印联系人的姓名:");
    		String name=input.next();
    		m.printLinkman(m.nameFind(name));
    		System.out.println("打印完毕!");
    	}
    	public void pFile()throws java.io.IOException//写入文件执行
    	{
    		m.printFile();
    	}
    	public void rFile()//从文件读入数据执行
    	{
    		System.out.println("正在为你读入数据......");
    	    m.readFile();
    	}
    	public void cool ()//显示当前时间和贴心提醒
    	{
    		SimpleDateFormat s=new SimpleDateFormat();
    		SimpleDateFormat s1=new SimpleDateFormat("HH");
    		s.applyPattern("yyy-MM-dd HH:mm:ss a");
    		Date date=new Date();
    		String h=s1.format(date);
    		int x=Integer.parseInt(h);
    		System.out.println("现在时间:"+s.format(date));
    	if(x==23||x==0||x==1||x==2||x==3||x==4||x==5||x==6)
    		System.out.println("该睡觉了!晚安,好梦!");	
    	else if(x>=7&&x<=11)
    		System.out.println("一日之计在于晨!加油吧!");
    	else if(x==12)
    		System.out.println("在忙也要记得吃饭哦!");
    	else if(x==13)
    		System.out.println("该睡午觉了!午安!");
    	else if(x>=14&&x<=17)
    		System.out.println("下午也要加油啊!不要荒废每一天!");
    	else if(x==18||x==19)
    		System.out.println("该吃晚饭了!");
    	else if(x>=20&&x<23)
    		System.out.println("忙了一天了!是时候给自己放会儿假了!");
    		
    	}
    	 public void Menu()throws java.io.IOException {//菜单
    		do {
    			System.out.println("-----------------欢迎使用通讯录管理系统!-----------------");
    			System.out.println("                1.添加联系人                      ");
    			System.out.println("                2.删除联系人                          ");
    			System.out.println("                3.修改联系人                            ");
    			System.out.println("                4.搜索联系人                            ");
    			System.out.println("                5.打印联系人                            ");
    			System.out.println("                6.导出通讯录到文件                 ");
    			System.out.println("                7.从文件读入数据并打印通讯录列表   ");
    			System.out.println("                8.贴心提醒 (特别)                        ");
    			System.out.println("请输入指令数字进行操作:");
    			String key = input.next();
    			switch (key) {
    				case "1":
    					add();
    					break;
    				case "2":
    					del();
    					break;
    				case "3":
    					up();
    					break;
    				case "4":
    				find();
    					break;
    				case "5":
    				   cout();
    					break;
    				case "6":
    					pFile();
    					break;
    				case "7":
    					rFile();
    					break;
    				case "8":
    					cool();
    					break;
    				default:
    					System.out.println("输入错误!");
    					continue;
    			}
    			break;
    		} while(true);
    	}
    	public static void main(String[] args)throws java.io.IOException
    	{
    		Test t=new Test();
    		while(true){t.Menu();}
    	}
    }
    
    
    
    展开全文
  • 我认为这很容易实现,但是到目前为止,我还没有在Java class editor和jsf faceted webapp XHTML file editor上找到注释/取消注释快捷方式的解决方案:快速注释/取消注释行(例如ctrl + d用于删除单行)能够选择多行并...
  • accessToken :小程序的临时凭证,需要它才可以任意的调用小程序的各种接口 appid:小程序的ID,微信公众平台上有。为了获取accessToken 而存在 secret:小程序的密匙,微信公众平台上有。为了获取accessToken 而...
  • Java中的序列化到底是什么

    千次阅读 多人点赞 2020-06-29 14:07:46
    我们都知道,新建一个对象的时候实现 Serializeable 接口,但什么要这么做?什么时候这样子做?这样子做会不会出现幺蛾子?阿淼一个三连差点把自己都问懵逼了…… 那接下来,大家就和阿淼一起简单了解一下这个知识...
  • 你oracle安装成功后,一直未停止数据库(即数据库是启动的),客户端...而一旦你和我一样,有时把Oracle安装在虚拟机,而且Oracle安装完毕后,没在进行任何监听的配置,则虚拟机再启动,则就会出现ORA-12514的问题。
  • 扫雷游戏(java实现)java程序

    万次阅读 多人点赞 2018-08-08 08:50:41
    学了两周的java,想着做点东西玩玩,萌生了写一个扫雷的想法,这个想法其实在学c语言时就有了,当时并不知道c也有图形库,在后来就搁置了,最近看了大概两周的java,刚好看完 java Swing图形界面,老师说应该做个小...
  • 沈师 Java程序设计 PTA 选择题答案

    千次阅读 2021-06-08 14:13:50
    Java语言具有许多优点和特点,哪个反映了Java程序并行机制的特点?( ) A. 安全性 B. 多线性 C. 跨平台 D. 可移植 正确答案:B. 多线性 What must all Java applications contain? 分值2分。 A. an applet B. a ...
  • Java程序设计

    千次阅读 2021-02-28 21:30:14
    JAVA程序设计第一章:从0开始学习java先下载JDK二级目录三级目录 第一章:从0开始学习java java是一种可以编写跨平台应用程序的面向对象程序设计语言。 本章我们要学习的内容有: 1.了解java语言的发展和运行机制 ...
  • 一关键字  关键字概述:Java语言中有一些具有特殊用途的词被称为关键字。关键字对Java的编译器有着特殊的意义,在程 序中应用时一定要慎重。... Java中常用的50个关键字(48个加2个保留字,就当背英文单词啦):
  • Java习题集第三章Java程序设计基础

    万次阅读 2020-12-25 22:11:32
    第 3 章 Java程序设计基础 一.单项选择题 二、填空题 三. 简答题 四.程序阅读题 五.程序设计题 一.单项选择题 1.下列java标识符,错误的是() A. _sys_varl B. $change C. User_name D. 1_file 2.下列...
  • java语言中,输入A,B输出A+B的值

    万次阅读 2017-02-19 20:28:26
    问题如下: 计算一对A、B的和或者计算多对A、B值的和;...对于输出的A、B的和要与输入的A、B对一一对应,并且A+B独自占一行; 1.每次只输入一对A、B时,代码如下: public class Main { /** * @param args */
  • 读者要求:已经学过微信小程序的入门官方教程,即其简易教程。 本文介绍了服务器端环境的搭建,以及微信登录+支付的程序示例,以及在实战遇到的问题与解决方法
  • *功能:在窗口显示不停变化大小和颜色的字符 *说明:利用多线程实现的applet小程序 **/ import java.awt.*; import java.applet.Applet; import java.util.*; import java.awt.Graphics; public class ...
  • Java语言基本语法

    万次阅读 多人点赞 2018-07-31 18:42:35
    概念:Java对各种变量,方法和类等要素命名时使用的字符序列称为标识符 规则:1.标识符由字母,下划线,美元或数字组成  2.标识符应由字母,下划线,美元开头  3.Java标识符大小写敏感,长度没有限制 约定...
  • Geant4例程在example文件夹,basic子文件夹主要是入门例程,其中basic/B1例程是最基本,熟悉它可基本掌握Geant4程序的架构和基本的代码编写方法,普通的Geant4模拟需求按此架构都可以进行计算。 该例程主要是简单的...
  • 构建Java镜像的10个最佳实践

    万次阅读 2021-03-27 20:39:34
    原文发表于kubernetes中文社区,作者原创翻译,原文地址 更多kubernetes文章,请多关注kubernetes中文社区 ...6.Java应用程序不要使用PID1的进程 7.优雅下线Java应用程序 8.使用 .dockerignor..
  • 需求是 找出两列数据(单列有重复)的相互重复项----也就是说本身的重复的数据不算,比如有AB两列,找出A与B的重复项,也就是B包含了A的话就标记出来。我们在上一篇已经讲了 EXCEL----数据处理(一)----找出...
  • java 程序设计题库

    万次阅读 多人点赞 2019-06-18 09:25:00
    答题要求:单选题,每题只有一个正确答案,选择正确给分,不正确不给分。...2、以下的选项中能正确表示Java语言中的一个整型常量的是( B ) A、12. B、-20 C、1,000 D、4 5 6 3、下列的变量定义...
  • Java语言程序设计基础篇原书第十版第三章答案编程练习题(任选综合练习题)
  • java语言程序设计-基础篇

    万次阅读 2012-08-16 08:00:24
    第1章,计算机、程序Java概述 1,java背景 特点: 一次编译,到处运行(Write Once, Run Anywhere.)。原理: Java程序经编译后生成.class字节码文件,.class文件由Java虚拟机(JVM)解释执行。不同的操作系统...
  • java阶段测试A卷含答案

    万次阅读 2019-08-23 19:06:52
    java阶段测试A卷 一、选择题(每题1分,共100题,共100分) 下列哪一种叙述正确的( D) A.abstract修饰可修饰字段、方法和类。(abstract不可以修饰字段) B.抽象方法的body部分必须用一对大括号{ }包住(无...
  • 原博链接:Java语言程序设计基础篇 第八章 课后编程答案   import java.util.Scanner; public class ch0801{ public static void main( String[] args ){ Rectangle r1 = new Rectangle(4,40) ; Rectangle...
  • JAVA程序读取JAR包中文件的解决方法

    千次阅读 2019-06-25 00:26:47
    编写完Java程序后,打包成Jar时发布,会发现找不到Jar文件的图片和文本文件,其原因是程序中载入图片或文本文件时,使用了当前工作路径基准的方式来指定文件和路径。这与用户运行Jar包时的当前工作路径并不...
  • 自己练习时手写,难免会有些疏忽遗漏等各种各样问题,错误之处还请指出 但这些代码确实已通过编译,实现了书上的输出结果,还希望能给需要... if ((a[i + 1][j] == true && a[i][j - 1] == true && a[i][j + 1] ...
  • java】arcII码0x01,0x02作为分隔

    万次阅读 2013-04-18 20:10:31
    这样做有的时候不很安全,因为你不能确保你传入的字符串没有这几个字符,那怎么做能保证万无一失呢?  arcII码0x01,0x02的字符是键盘所不能输入的,因为用这个能保证万无一失。  public String ...
  • 初探JAVA代码在虚拟机的运行机制

    千次阅读 2018-08-04 00:06:13
    作为一名Android程序员,我们都知道Java代码有很多种运行方式,比如:可以在命令行运行,可以在开发工具运行,可以jar文件的形式运行,甚至可以在网页运行。这些执行的方式都离不开JRE(Java Runtime ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 490,000
精华内容 196,000
关键字:

列叙述中正确的是ajava语言以方法为程序的基本程序b1杠杠符为开始的多行注释

java 订阅