面试题(一)

这篇博客涵盖了Java面试中常见的多线程、异常处理、wait/sleep的区别、类和接口的修饰、重写概念、成员变量修改、静态代码块与构造方法执行顺序以及进制转换等问题的详细解释和示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、多线程:
1、 手写生产者消费者模式
2、 同步代码块/同步方法——<独占>
3、 死锁、A等B,B等A
2、异常
1、关键字:try,catch,finally,throw,throws
2、try,catch自己解决遇到的问题
3、finally 最终要完成的工作
4、throw当前方法中所有有可能遇到的异常,具体问题
举例:

public class Test {
    public static void main(String[] args) {
        System.out.println(getNum());
    }

    private static int getNum() {
        try {
            System.out.println("*******try********");
            return 1;
        } catch (Exception e) {
            System.out.println("*******catch********");
            return -1;
        }finally{
            System.out.println("*******finally********");
            return 0;
        }

        /**
         * 若返回值在之前必能返回,则此句不可达
         */
//      System.out.println("game over.");

//      return 100;
    }
}

不会报错,只会有警告
若程序没有异常,则返回值为?会先执行try,后执行finally,返回值为0
具体为:方法走到try时发现return语句,(因为有finally)不会执行return语句,会去先执行finally中的程序,发现finally中有return就会执行finally中的return,若发现finally中没有return语句,会返回try中的return值

try {
            //程序走到此处会报错,但也会先执行finally中的语句再报错
            System.out.println(1/0);
            System.out.println("*******try********");
        } catch (NullPointerException e) {
            //捕获不到此例异常
            System.out.println("*******catch********");
        }finally{
            System.out.println("*******finally********");
            System.out.println("haha");
        }

3、wait与sleep区别:
wait(等,被通知)[被动]是Object类的方法,主要应用于同步代码块或同步方法
sleep(睡,到睡醒)[自发]是Thread的静态方法
SystemClock.sleep(),类似于sleep()方法,但有一个优点是:不用处理异常
4、public修饰类
一个类如果用public修饰,则类名必须与文件名相同。
另外:若此类中有内部类,内部类可以用public修饰(一山不容二虎,除非一公一母)
5、接口
a、接口中的字段默认是并且必须是public static final类型
public(以便其它类调用接口时使用)
static(因为接口不能被实例化,若不是static,则此属性依赖对象,而接口不能建立对象,其他类无法使用此属性)
final(接口是标准规范,如果没有final的话,由子类随意去修改的话,接口建立这个常量就没有意义了)
b、接口中不能有构造块(构造块执行在构造方法之前,而接口不能实例化)
接口中不能有静态代码块???静态代码块在类加载时必须执行,而接口则依赖于具体的实现类
c、接口中不能有静态方法???static与类绑定而不是对象,所以不支持多态、继承等?接口中的方法如果定义成static,则无法被子类实现,这与抽象方法必须由子类实现相矛盾。
6、重写
重写的作用:如果父类的引用指向子类的对象,则执行子类的方法,而不执行父类的方法
注意:static如果父类中的方法是static修饰的,子类中出现与之相同的方法,并不能保证一定被重写
只关注调用方法的对象,此对象声明时为父类就执行父类方法,声明时为子类就执行子类的方法

        Dog dog0 = new Dog("汪星人");//父类:在叫,子类:汪汪叫
        dog0.speak();//汪星人汪汪叫
        Pet dog=new Dog("汪星人");
        dog.speak();//汪星人在叫

7、改变成员变量要在方法中或块中修改

String sta = "hehe";
    // sta = "ab";报错
    {
        sta = "bb";
    }
    public void get() {
        sta = "bb";
    }

8、关于static静态代码块与构造方法与构造代码块的执行次数和执行顺序
静态代码块最先执行,在类加载时执行,且只执行一次
构造代码块与构造方法每次创建对象都会执行,构造代码块执行在构造方法之前
public class Play2 {

public static void main(String[] args) {
    A ab = new B();
    System.out.println("-------------------");
    ab = new B();
}

}

class A {
static {
System.out.println(“1”);
}
{
System.out.println(“aa”);
}
public A() {
System.out.println(“a”);
}
}

class B extends A {
static {
System.out.println(“2”);
}
{
System.out.println(“bb”);
}
public B() {
System.out.println(“b”);
}
运行结果:

1
2
aa
a
bb
b
-------------------
aa
a
bb
b

9、有关进制的识别 ,字符和int的转换,断句

public static void main(String[] args) {
        System.out.println(11);//  11
//      编程语言中常常以数字0开始表明该数字是八进制      
        System.out.println(011);//  9
//      以0x开始的数据表示16进制
        System.out.println(0x11);//  17
        System.out.println(0X11);//  17

//      将十进制数字转换为二进制字符串
        String str = Integer.toBinaryString(11);
        System.out.println(str);//  1011

//      空格代表一个字符,ascii值为32
//      65~90为26个大写英文字母,97~122号为26个小写英文字母
        int i = ' ';
        System.out.println(i);

//      没有空格和多个空格均报错,因没有对应的ascii值
//      int i = '';
//      int i = '  ';

        int j = 'a';
        System.out.println(j);//  97
        j = 'a'+1;
        System.out.println(j);//  98

//      关于断句
        int a = 1;
        int b = 1;
//      int num = a+++++b;//报错
        int num = a++ + ++b;
    }

10、ImageView的setImageResource()与setBackgroundResource()方法的效果:
图一:setImageResource()
这里写图片描述
图二:setBackgroundResource()
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值