Java习题训练一

Java习题练习(源自牛客网)

1.有关java实例变量,局部变量,类变量和final变量的说法:
  • 定义在类中的变量是类的成员变量,可以不进行初始化,Java会自动进行初始化,如果是引用类型默认初始化为null,如果是基本类型例如int则会默认初始化为0
  • 局部变量是定义在方法中的变量,必须要进行初始化,否则不同通过编译
  • 被static关键字修饰的变量是静态的,静态变量随着类的加载而加载,所以也被称为类变量
  • 被final修饰发变量是常量
2.访问控制符
  • 与未加访问控制符的缺省情况相比,public和protected修饰符扩大了属性和方法的被访问范围,private修饰符则缩小了这种范围

img

3. 子类继承了父类的所有属性和方法,不论是私有还是啥都继承了,只是不能够直接调用父类的私有属性和方法
4.构造器

构造方法是一种特殊的方法,具有以下特点:

  • 构造方法的方法名必须与类名相同。
  • 构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
  • 构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。
  • 一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。
  • 构造方法可以重载,以参数的个数,类型,顺序。
5.看下面代码输出:(自动装箱典例)
package www.bitten.java;

/**
 * @Author : YangY
 * @Description :   自动装箱简例
 * @Time : Created in 8:52 2019/3/17
 */
public class Test {
    public static void main(String[] args) {
        //自动装箱
        Integer i1 = 100;         //-128~127之间,会返回一个已经存在得对象引用
        Integer i2 = 100;
        Integer i3 = new Integer(20);   //有new了肯定对象引用不一样嘛
        Integer i4 = new Integer(20);
        Integer i5 = 200;
        Integer i6 = 200;

        System.out.println(i1==i2);    //true
        System.out.println((i3==i4));  //false
        System.out.println(i5==i6);    //false
    }
}

其实当我们在为Integer赋值的时候,java编译器会将其翻译成调用valueOf()方法。比如Integer i=127翻译为Integer i=Integer.valueOf(127)

然后我们来看看valueOf()函数的源码:

    public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)   //high为127 ,low为-128
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
6.try,finally语句使用典例
public class Test {
    public static void main(String[] args) {
        int test = test();
        System.out.println("返回值为"+test);
    }
    public static int test() {
        try {
            System.out.println("try块的语句");
            return 2;
        }finally{
            System.out.println("finally块语句");
            //return 3;
        }
    }
}

输出:
try块的语句
finally块语句
返回值为2

如果末尾那句return 3不被注释,则会输出:
try块的语句
finally块语句
返回值为3

结论:无论如何都会执行finally块里面的语句,若try里面有返回值,则先执行finally里的语句再返回去执行try里的return语句,如果finally块里有return语句,则会覆盖try里的return语句;

7. 数据类型自动转换

若有定义语句: int a=10 ; double b=3.14 ; 则表达式 ‘A’+a+b 值的类型是 double型

解析:

  1. 在表达式中,char 和 short 类型的值,无论有符号还是无符号,都会自动转换成 int 或者 unsigned int(如果 short 的大小和 int 一样,unsigned short 的表示范围就大于 int,在这种情况下,unsigned short 被转换成 unsigned int)。因为它们被转换成表示范围更大的类型,故而把这种转换称为“升级(promotion)”。
  2. 按照从高到低的顺序给各种数据类型分等级,依次为:long double, double, float, unsigned long long, long long, unsigned long, long, unsigned int 和 int。这里有一个小小的例外,如果 long 和 int 大小相同,则 unsigned int 的等级应位于 long 之上。char 和 short 并没有出现于这个等级列表,是因为它们应该已经被升级成了 int 或者 unsigned int。
  3. 在任何涉及两种数据类型的操作中,它们之间等级较低的类型会被转换成等级较高的类型。
8. static 不能修饰局部变量⭐

结论:被static修饰的变量称为静态变量,静态变量属于整个类,而局部变量属于方法,只在该方法内有效,所以static不能修饰局部变量

public class Test {
    static String x = "1";
    static int y = 1;
    public static void main(String[] args) {
        static int z = 2;   //编译报错
        System.out.println(x+y+z);
    }
}

这段代码或许会认为输出:112,但细心的人会发现static int z = 2就会编译报错;

看下面这段代码,才会达到你想要的结果:

public class Test {
    static String x = "1";
    static int y = 1;
    public static void main(String[] args) {
        int z = 2;
        System.out.println(x+y+z);   //112
        System.out.println(x+(y+z));  //13
    }
}
9. switch表达式中参数问题

在Java7中,switch表达式中不能作为参数的是:(D)
A:int 型
B:枚举类型
C:字符串
D:浮点型

解析:在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long、float、double类型不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。 注意:String类型是Java7开始支持的。

10.代码输出(匿名内部类)
public class Test {
    public static void main(String[] args) {   
        Object o = new Object() {  
             public boolean equals(Object obj) {  
                 return true; 
         }
     };   
     System.out.println(o.equals("Fred"));
     }
}

这里的创建了一个匿名内部类,对equals方法进行了覆写,所以输出:
true

11.try语句块的使用规则

try后面必须有catch块()
答案:错误

解析:可以有如下3种形式(单独一个try编译报错)

  1. try----catch
  2. try----finally
  3. try----catch----finally

看下面举例:

        try {
            int a = 4/0;
            System.out.println("try");
        }finally {
            System.out.println("finally");
        }

输出:
finally
Exception in thread “main” java.lang.ArithmeticException: / by zero
at com.bittech.thread.Test.main(Test.java:15)

Process finished with exit code 1

12.线程中被打断会抛出异常的方法

下面哪个行为被打断不会导致interruptedException?
A:Thread.join
B:Thread.sleep
C:Object.wait
D:CyclicBarrier.await
E:Thread.suspend

答案:E (多线程中断那一块有讲解)

13.String类的replaceAll方法的坑
        String str = "C.file.word".replaceAll(".","/")+"Java.class";
        System.out.println(str);

这段代码会输出甚麽?
正确答案:
///Java.class

分析:**由于replaceAll方法的第一个参数是一个正则表达式,而".“在正则表达式中表示任何字符,所以会把前面字符串的所有字符都替换成”/"。如果想替换的只是".",那么久要写成"\\ ." **

但将replaceAll换成replace方法,

        String str = "C.file.word".replace(".","/")+"Java.class";
        System.out.println(str);

输出:
C/file/wordJava.class

14.final关键字(⭐)

下面说法错误的是:
A:final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性
B:final修饰的类肯定不能被继承
C:final修饰的方法不能被重载
D:final修饰的变量不允许被再次赋值
答案:AC

解析:
A:接口,抽象类都需要子类来实现,怎么能用final修饰呢,final修饰的类永远不能被继承
C:不能被覆写,不是重载

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java语言程序设计课后答案 作业参考答案 习题一 4、如何建立和运行Java程序, 首先启动文本编辑器,如记事本、UltraEdit等,编辑程序代码,并以.Java作为文件 扩展名保存程序源代码;然后进入dos环境利用javac编译源程序,生成扩展名为.class的 字节码文件;再利用命令java运行字节码文件,得到程序的运行结果。在集成开发环境J builder、Eclipse下,可以完成程序的编辑、编译、调试及运行等所有任务。 5、 public class LikeJava { public static void main(String [] args) { System.out.println("I Like Java Very much!"); } } 习题二 5、 (1) 45 (2) false (3) 14 (4) 14 (5),6 (6) true (7) 12 9、 public class Volume { public static void main(String [] args) { double r=0,v=0; r=double.parseDouble(args[0]); v=4*3.14159/3*r*r*r; System.out.println("球体积为:"+v); } } 习题三 8、 public class Factorials { public static void main(String args[]) { int i, j; long s=0, k; i=1; do //外循环开始 { k = 1; j=1; do{//内循环开始 k = k * j; //内循环体 j++; }while(j<=i);//内循环结束 System.out.println(i + "!=" + k); s = s + k; i++; }while(i<=20); //外循环结束 System.out.println("Total sum=" + s); } } 10、 public class Num { public static void main(String[]args) { int i,j,k,n; for (n=100;n<1000;n++) { i=n/100; j=(n-i*100)/10; k=n%10; if (i*i*i+j*j*j+k*k*k==n) System.out.print(n+" "); } } } 习题四 5、 import java.util.Scanner; class Factor{ long fac(int m) {if(m==0""m==1)return 1; else return m*fac(m-1); } public static void main(String [] args) {int i,n; long sum=0; String s=""; Scanner input=new Scanner(System.in); System.out.print("Please input n: "); n=input.nextInt(); Factor f=new Factor(); for(i=1;i<=n;i++) { System.out.println(f.fac(i)); sum=sum+f.fac(i); s=s+i+"!+"; } System.out.println(s.substring(0,s.length()-1)+"="+sum); } } 习题五 2、 import java.io.*; public class YangHuiOk { public static void main (String args[]) throws IOException { int max,a[][],i,j; char x; System.out.print("请输入杨辉三角要显示的行数: "); x=(char)System.in.read(); max = Integer.parseInt(String.valueOf(x)); a=new int[max][]; for (i=0;i<max;i++) { a[i]=new int[i+1]; } a[0][0]=1; for (i=1;i<max;i++) { a[i][0]=1; a[i][a[i].length-1]=1; for (j=1;j<a[i].length-1;j++) { a[i][j]=a[i-1][j-1]+a[i-1][j]; } } for(i=0;i<max;i++) { //for(j=0;j<=max-i;j++) System.out

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值