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
    评论
1. 设有一个字符数组,现对数组中的元音字母做一个统计。 2. 设计一个Java程序,设有一个给定的int类型数组并有一批数据,现让你用二种以上的方法对其进行升或降序排列。 3. 写一个简单程序,判断输入的一串字符串是否为身份证号码,注意身份证判别的几个条件。 4. 设计一个方法接收一个int数,然后返回它的反转字符串。如n=1234,则输出:4321 5. 设计一个方法接收一个三位的整数,如果是一个水仙花数,此方法返回一个布尔true值,否则是false值。再设计一个方法遍历100至999,对每个数都借用刚才的方法判断其是否是水仙花数,如果是打印出来,否则就是下一个。所谓水仙花数,是一个3位数,其各位的立方和等该数自身。如:153=1的三次方*5的三次方*3的三次方 6. 设计一个方法,接收一个四位整数,然后此方法判断这个4位数的9倍是该4位数的反序数。如:4位数的1089的9倍是9801。9801是1089的反序数。最后把具有这种特性的4位数全都打印出来。 7. 有以下15位身份证数据,假设被存在sfzMessage中; sfzMessage=“370102770102413, 370102760807911, 370102660810114,…” 现在把这组数据变为18位,结果为 “ 37010219770102413A, 37010219760807911B, 370102196608101149” 为简单实现,最后一位可随机产生”10X23456789”中的任何一个来补充 8. 设计一个方法要求检查一个指定字符是否允许作为 Java 标识符中的首字符,并测试。 9. 设计一个类并提供一个方法,将整型值转换为二进制、十六进制和八进制值 10. 设计一个方法,接收三个参数分别是年,月,日,然后返加一个Calender类型的对象,再设计一个方法接收Calender类型对象,在方法内分别打印此日期是一个月的第几天,一年的第几天,一周的第几天,此天是周几,这个月的第一天是周几,是一周的第几天。 11. public static void main(String[] args) { String s = new String("abc");//执行到这一行时,创建了几个对象? String s1 = "abc";//执行到这一行时,创建了几个对象? String s2 = new String("abc");//执行到这一行时,创建了几个对象? System.out.println(s == s1);//输出结果是什么? System.out.println(s == s2);//输出结果是什么? System.out.println(s2 == s1);//输出结果是什么? } 12. 使用System类的getProperty()获取Java的安装目录,java的类库路径,用户当前目录、用户名、路径分隔符5个属性 13. 使用Random类nextInt()函数产生10个1-9的随机整数。ran.nextInt(9) + 1 14. 首先定义一个StringBuffer类对象S,然后通过append()方法为对象添加26个小写字母,要求每次添加一个字母,共添加26次。
期末考试题型: 一、 填空题(本题共15空 ,每空1分,共15分。) 二、 单项选择题(本题共20小题,每题1分,共20分。) 三、 是非题(对划“√”,错划“×”,本题共10小题,每题1分,共10分。) 四、 简答题(本题共5小题,每小题5分,共25分。) 五、 程序填空题(本题共5空 ,每空2分,共10分。) 六、 编程题(本题共2小题,每小题10分,共20分。) 二、填空题 1、Java语言是一种完全的_面相对象___程序设计语言。 2、布尔型常量有两个值,它们分别是_true__、_false___。 3、在定义一个方法时,一般都要指明该方法的返回值类型,如果它不返回任何值,则必须将其声明成 void 。 4、在Java的语言环境中已经包含了一组相关的核心类库,它们属于Java.lang包。 5、写出完整的main方法的声明 public static void main(String args[]) 。 6、要设计一个Applet小程序,必须先引入包 java.applet 。 7、设x=2.5,a=7,y=4.7,算术表达式x+a%3*(int)(x+y)%2/4的值为:2.75___ 8、被关键字_final___修饰的方法是不能被当前类的子类重新定义的方法。 9、Java中类成员的限定词有以下几种:private, _protected__, public__, 默认友好。 10、基类的公有成员在派生类中的访问权限由_基类___决定。 11、用static修饰的方法,称为静态方法。它们不是对象的方法,而是整个类的方法。静态方法只能处理用关键字_static___修饰的数据。 12、在Java中有一种叫作__构造方法__的特殊方法,我们在程序中用它来对类的对象成员进行初始化。 13、面向对象技术具有_封装性___、_继承性___、_抽象性___、多态性等特性。 14、Java中所有类都是类 _Object___的子类。 15、顺序执行以下两个语句的输出结果是: 10 。 String s = “我喜欢学习Java!”; System.out.println(s.length( )); 16、据程序的构成和运行环境的不同,Java源程序分为两大类: Application 程序和 Applet 程序。 17、如果一个Java源程序文件中定义有4个类,则使用Sun公司的JDK编译器javac编译该源程序文件将产生 4 个文件名与类名相同而扩展名为 class 的字节码文件。 18、开发与运行Java程序需要经过的三个主要步骤为 编辑源文件 、 编译器编译生成字节码文件 和 解释器执行 。 19、如果一个Java Applet源程序文件只定义有一个类,该类的类名为MyApplet,则类MyApplet必须是 Applet 类的子类并且存储该源程序文件的文件名必须为 MyApplet.java 。 20、 一个Java Application源程序文件名为MyJavaApplication.java,如果使用Sun公司的Java开发工具JDK编译该源程序文件并使用其虚拟机运算这个程序的字节码文件,应该顺序执行如下两个命令: javac MyJavaApplication.javajava MyJavaApplication 。 21、在Java的基本数据类型中,char型采用Unicode编码方案,每个Unicode码字符占用 2 字节内存空间,这样,无论是中文字符还是英文字符,每个都是占用2 字节内存空间。 22、在Java程序中定义的类有两种成员: 静态成员 、 实例成员 。 23、Java源程序是由类定义组成的,每个程序中可以定义若干个类,但是只有一个类是主类。在Java Application中,这个主类是指包含 main 方法的类;在Java Applet里,这个主类是一个系统类 Applet 的子类。 24、创建一个名为 MyPackage 的包的语句是 package MyPackage ; , 该语句应该放在程序的位置为: 程序中非注释行的第一行 。 25、 抽象或abstract 方法是一种仅有方法头,没有具体方法体和操作实现的方法,该方法必须在抽象类之中定义。 最终后final 方法是不能被当前类的子类重新定义的方法。 26、多态是指 一种定义,多种实现 ,在Java中有两种多态,一种是使用方法的 重载 实现多态,另一种是使用方法的 覆盖 实现多态。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值