> 文档中心 > 面试题解(Day02)

面试题解(Day02)


前面的话

博客主页:hyhWTX的博客主页

欢迎关注🖱点赞🎀收藏⭐留言✒

本文由hyhWTX原创,csdn首发!

系列专栏:面试题解

🀄如果觉得博主的文章还不错的话,请三连支持一下博主哦

题目三

Scanner中的nextInt和nextLine再读取输入内容的时的区别。假如再拼接上字符串呢?

import java.util.Scanner;public class Test03 {    public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println(in.nextInt()+  in.nextInt() +  in.nextLine() +  in.nextLine()+  in.nextInt()  );    }}

在控制台中依次输入数字:比如说,10,回车,10,回车,10,回车,10,回车

它的输出结果会是?

A .程序错误

B .10101010

C .201010

D .2020

考察点:nextInt和nextLine的区别,还有+拼接的问题

运行结果是C .201010

至于为什么是这样的,解析如下:

nextInt和nextLine的区别:

  1. 都可以读取输入的信息;nextInt读取到结果是int类型的,而nextLine读取到的结果是一个String类型的;
  2. 它们都以回车符作为结束的标志,但是nextInt是不读取回车,而nextLine是读取回车

从上面的执行过程来看,我们的输入是10,回车,10,回车,10,回车,10,回车,一共输入了四次这样的东西。

执行过程剖析:

通过我们输入的东西,我们来看,程序当中的第一个方法叫做nextInt,它是读取了第一个数据10,它将这个数据10读取出来了,但是没有读取这个回车符,将回车搁置在了这里。这样的话,它读取出来的结果就是一个整数10。第二个方法也是nextInt的方法,它与第一个相同,所以它的结果也是一个整数10,就是把我们输入的第二个10读取出来了,回车符依旧不管,搁置。而地三个方法,nextLine呢,它是可以读取回车符之前的东西,我们可以看到,第二个方法是有遗留下来的一个回车,(至于有的同学有疑问的第一个方法不是也遗留了一个回车,为何不管,我个人理解是因为它太远了,所以读取不到,它之前就已经回车了,是读取不到这个回车了,它只会读取当前的回车。如果有人就很很好的见解,请私信我,我们一起讨论学习),所以它读取到的就是一个空回车符,读取之后的结果是什么呢?结果是一个空字符串。而第四个方法与第三个方法相同,都是nextLine,所以它会读取到10和一个回车符,它将这两个都读取出来了,它的读取结果就是一个字符串形式的10。最后一个是nextInt方法,所以他就是读取的数字10,还是剩余了一个回车。

  /* System.out.println(  10+  10+  "" +  "10"+  10 );*/

所以,我们可以看到,我们是五个方法,但是却只输入了4次,它就可以读完,读完之后呢,它就进行拼接,对吧,所以我们可以看到上面的结果,就是两个数字10+10,结果就是20,再加上一个空字符串,就是20,拼接上10,在拼接上10,所以最后的结果就是C选项,201010。

题目四

权限修符的问题:,对于权限修饰符,我在此做一下介绍:

权限修饰符

public、默认(包访问权限)、protected、private

作用

  1. 修饰类:对于非内部类而言,类的访问权限仅有public和包访问权限两种(内部类可以是private或protected)

  2. 修饰成员:对于一个类,其成员能否被其他类访问,取决于该成员的权限修饰符。具体权限如下表:

    四种访问修饰符的访问范围

    1 访问级别 访问控制修饰符 同类 同包 子类 不同包
    2 公开 public
    3 受保护 protected ×
    4 默认 没有修饰符 × ×
    5 私有 private × × ×

    一旦使用private进行修饰,那么在本类中仍然可以随意访问,
    但是,超过了本类范围外就不能直接访问了。

  3. 对于protected修饰的,子类的实例可以访问从父类继承而来的protected方法。即在子类中的某个方法直接访问父类的protected方法,再去实例化子类。通过子类的实例调用,从而间接实现访问父类的protected方法,但不能通过父类的实例直接去访问其protected方法。

有一点扯远了,还是上题目吧

题目:

package 面试题;class Target {    public String name = "Hello word!"}

一下那个类可以更改name属性的值?

A . 任意的类

B .只能是Target类自己

C .可以是面试题包中的任意类

D .只能是Target的子类

考察点:只有一个,就是权限修饰符的问题

结果是:C .可以是面试题包中的任意类

至于为什么是这样的,解析如下:

解析过程剖析

很多人一看到name,哇,public修饰,那么根据我们所学习到的知识来看,public不是最大的范围,是共有的,所以就会认为,它是在任意类下都可以访问,所以就会有人选择A选项。如果你选择了A,那么恭喜你,你错了哈哈哈!!!

咱们来看,这个属性是怎么访问的呢?它首先需要的是类呀,找到类你才能知道属性呀,那么大家来看看这个类,看到这个类了没有,它的前面是没有public的勒。所以,我们能够知道,类是只有两种修饰符,一个是默认不写的,一个是public。而题目中的这个就是属于前者不写的那种,所以呢,它这个类,就只有在当前这个包里面才可以访问,这个类是没法出去这个包的,在当前类里面,这个属性就随便了。所以,我们就可以在包下面的任意类中访问到这个name,从而对它进行更改。

🎧最后的话,作者是一个新人,在很多方面还做的不好,欢迎大佬指正,一起学习哦,冲冲冲