首页 > 编程语言 >冲刺秋招之牛客刷Java记录第二天

冲刺秋招之牛客刷Java记录第二天

时间:2023-09-29 16:45:27浏览次数:34  
标签:Java 构造方法 静态 代码 牛客 add Test 秋招 public

第一题 下列代码输入什么?

public class Test {
    public static Test t1 = new Test();

    {
        System.out.println("blockA");
    }

    static {
        System.out.println("blockB");
    }

    public static void main(String[] args) {
        Test t2 = new Test();
    }
}

解析:
本题考察类加载。
根据跟踪源代码可知,执行main方法之前,Test类就已经加载完毕,也就是说,执行到Test t2 = new Test();的时候,控制台已经打印了blockAblockB

blockAblockB

可以在第4,7,11,15行都打上断点,可以看到程序一开始是从第4行开始执行的。这就说明Test类的加载先于main方法。

创建t2时,再去Test类中执行一次非静态代码块和构造方法,因为没有自定义构造方法,所以只输出非静态代码块的内容。

如果有自定义构造方法,那么先执行非静态代码块,然后执行构造方法。为什么?因为构造方法可能会用到代码块里的东西。把构造方法比喻成吃饭,那么非静态代码块就是把饭菜端到桌子上。

而静态域和静态代码块的优先级就更高了,他俩相当于把饭做好。他俩之间的优先级是:谁先被定义,谁就先被执行。在这道题目中,t1的优先级就比静态代码块高。大家可以把他俩的位置换一下,输出的内容一定是
blockB
blockA
blockA

静态域和静态代码块只会执行一次(类加载时)。
非静态域和非静态代码块每次创建对象时都会被执行。

答案:
blockA
blockB
blockA

第二题 下列代码输出什么?

public class Test2 {
    public static void main(String[] args) {
        test();
    }

    public static void add(Byte b) {
        b = b++;
    }

    public static void test() {
        Byte a = 127;
        Byte b = 127;
        add(++a);
        System.out.print(a + " ");
        add(b);
        System.out.print(b + "");
    }
}

解析:
add(++a):先把a转成byte,然后用a的补码+1,因为byte类型范围是:[-128,127],所以加1后,a=-128。再将a转为Byte类型,此时才开始调用add(-128),执行过程是这样的:

引用传递

由图可知,执行b++之后,红线断开。所以,add方法不会对main中的变量产生影响。所以a=-128,b=127。

答案:
-128 127

标签:Java,构造方法,静态,代码,牛客,add,Test,秋招,public
From: https://www.cnblogs.com/yx-study/p/17737092.html

相关文章

  • 2023牛客国庆集训派对day1
    2023牛客国庆集训派对day1F.InfiniteStringComparision解题思路:\(n=a.size,m=b.size\)短的字符串不断延长,直到覆盖两倍的长串。然后按两倍长串的长度一一比较即可。代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;typedefpair<int,int>......
  • Java语言基础知识全总结
    一.Java的优点1.      跨平台性。一次编译,到处运行。Java编译器会将Java代码编译成能在JVM上直接运行的字节码文件,C++会将源代码编译成可执行的二进制代码文件,所以C++执行速度快2.      纯面向对象。Java所有的代码都必须在类中书写。C++兼具面向对象和面向过程的特......
  • bilibili视频解析—Java
    publicclassBilibili{privatestaticStringurl,videoUrl,audioUrl,saveName;privatebooleantype;Bilibili(StringsaveName){this.saveName=saveName;}publicstaticvoidmain(String[]args){Stringurl=&qu......
  • java——mysql随笔
         索引简介:                                                                 1 ......
  • 通过HTML和JavaScript实现随机抽取幸运员工
    需求描述:公司经常会要求IT部门做一个小功能给公司随机抽取员工<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><t......
  • 结对项目:Java实现自动生成小学四则运算题目
    结队项目软件工程所在班级队伍成员谢昊天(3121004672)林育鑫(3121004660)作业要求[要求](([个人项目-作业-计科21级12班-班级博客-博客园(cnblogs.com)](结对项目-作业-计科21级12班-班级博客-博客园(cnblogs.com))))作业目标实现一个自动生成......
  • 无涯教程-JavaScript - CONCATENATE函数
    描述CONCATENATE函数将两个或多个文本字符串连接为一个字符串。在Excel2016中,CONCATENATE函数已被CONCAT函数替换。CONCATENATE函数仍可用于向后兼容。语法CONCATENATE(text1,[text2]...)争论Argument描述Required/Optionaltext1Thefirstitemtojoin.Theit......
  • 无涯教程-JavaScript - CONCAT函数
    描述Combinesthetextfrommultiplerangesand/orstrings,butitdoesn'tprovidethedelimiterorIgnoreEmptyarguments.Toincludedelimiters(suchasspacingorampersands(&)betweenthetextsyouwanttocombineandtoremoveemptyarguments......
  • Java内存分析工具实践之Spark客户端线程死锁
    ......
  • 无涯教程-JavaScript - CODE函数
    描述CODE函数返回文本字符串中第一个字符的数字代码。返回的代码对应于Windows系统的ANSI字符集。语法CODE(text)争论Argument描述Required/OptionalTextThetextforwhichyouwantthecodeofthefirstcharacter.Required适用性Excel2007,Excel2010,Excel......