牛客网刷题day02

1.JDK所提供的StringBuilder、StringBuffer就是为了照顾单线程环境和多线程环境所提供的类,在单线程环境下应该使用StringBuilder来保证更好的性能;当需要保证多线程安全时,就应该使用StringBuffer。 

2.下面关于Java类的构造方法的说法中正确的是:( )

  • 一个类至少有一个构造方法
  • 构造方法的返回值类型必须是void(错误)
  • 构造方法是一种特殊的方法:

    它必须具备和所在类相同的名字;

    没有返回值类型,甚至连void也没有;

    构造方法是在创建一个对象使用new操作符时调用的,作用是初始化对象。

  • 一个类可以不定义构造方法,在这种情况下,类中隐含定义一个方法体为空的无参构造方法。这个构造方法称为默认构造方法,当且仅当类中没有明确定义任何构造方法时才会自动提供它。

3.下列哪种说法是正确的( )

  • 实例方法可直接调用超类的实例方法(错误)
  • 实例方法可直接调用超类的类方法(错误)
  • 实例方法可直接调用其他类的实例方法(错误)
  • 实例方法可直接调用本类的类方法(正确)
  • 类方法就是静态方法。其它的就是实例方法

    实例方法可以对当前对象的实例变量进行操作,也可以对类变量进行操作,但类方法不能访问实例变量。实例方法必须由实例对象来调用,而类方法除了可由实例对象调用外,还可以由类名直接调用。

    另外,在类方法中不能使用 this 或 super。 关于类方法的使用,有如下一些限制:

    1 在类方法中不能引用对象变量。

    2 在类方法中不能使用super、this关键字。

    3 类方法不能调用类中的对象方法。

    与类方法相比,实例方法几乎没有什么限制:

    1 实例方法可以引用对象变量(这是显然的),也可以引用类变量。

    2 实例方法中可以使用super、this关键字。

    3 实例方法中可以调用类方法。

4.假设有以下代码String s = "hello";String t = "hello";char c [ ] = {'h','e','l','l','o'};下列选项中返回false的语句是?

  • t.equals (c);
  • ==强调栈中的比较,可以理解为地址比较
    equals强调对象的内容比较
    String s=“hello”;会在栈中生成hello字符串,并存入字符串常量池中。
    String t=“hello” ;创建时,会在字符串常量池中寻找,当找到需要的hello时,不进行字符串的创建,引用已有的。 所以,s==t返回true,s.equals(t)也是true。
    char c[]={'h','e','l','l','o'}; c==s这个是不存在的,==两边类型不同
    t.equals(c)这个语句在anObject instanceof String这步判断不会通过,也就是cha[] 压根不能与String相比较,类型不是相同的。返回false
  • 1. java数据类型分为:

            *  基本数据类型 

             引用数据类型 

    2.对于"=="

            *用于基本数据类型相互比较. 比较二者的值是否相等.

            *用于引用数据类型相互比较. 比较二者地址是否相等.

            *不能用于基本数据类型与引用型比较.

    3.对于"equals":

            * 不能用于基本数据类型比较(因为这是一个方法, 继承自object).

            *用于进行对象的比较, 比较二者的引用地址是否相同.

     4.特殊情况:

            1)数值型基本类型和数值型类会存在自动装箱自动拆箱.

            2)字符串会以常量形式存在, 如果多个字符串变量值相同, 则他们指向同一个地址.

            3)数值类型会存在类型自动转换.

5.以下程序运行的结果为()

public class Example extends Thread{
     @Override
     public void run(){
        try{
             Thread.sleep(1000);
             }catch (InterruptedException e){
             e.printStackTrace();
             }
             System.out.print("run");
     }
     public static void main(String[] args){
             Example example=new Example();
             example.run();
             System.out.print("main");
     }
}
  • run main
  • 这个类虽然继承了Thread类,但是并没有真正创建一个线程。

    创建一个线程需要覆盖Thread类的run方法,然后调用Thread类的start()方法启动

    这里直接调用run()方法并没有创建线程,跟普通方法调用一样,是顺序执行的

6.加载驱动程序的方法

  • 调用方法 Class.forName:Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
  • 通过添加系统的jdbc.drivers属性:DriverManager.registerDriver(new com.mysql.jdbc.Driver());
  • 通过registerDriver方法注册:System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");

7.下面属于JSP内置对象的是?

  • JSP内置对象有:
    1.request对象
         客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。
    2.response对象
         response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。
    3.session对象
         session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例.
    4.out对象
         out对象是JspWriter类的实例,是向客户端输出内容常用的对象
    5.page对象
         page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例
    6.application对象
         application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。
    7.exception对象
       exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象
    8.pageContext对象
    pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本 类名也叫pageContext。
    9.config对象
    config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)
  • 一共有9个内置对象
    pageContext javax.servlet.jsp.PageContext
    request javax.servlet.http.HttpServletRequest 
    response javax.servlet.http.HttpServletResponse 
    session javax.servlet.http.HttpSession 
    application javax.servlet.ServletContext 
    config javax.serlvet.ServletConfig 
    exception java.lang.Throwable
    page java.lang.Object 
    out javax.servlet.jsp.JspWriter 
    作用: 
    1、pageContext 表示页容器 EL表达式、 标签 、上传 
    2、request 服务器端取得客户端的信息:头信息 、Cookie 、请求参数 ,最大用处在MVC设计模式上 
    3、response 服务器端回应客户端信息:Cookie、重定向 
    4、session 表示每一个用户,用于登录验证上 
    5、application 表示整个服务器 
    6、config 取得初始化参数,初始化参数在web.xml文件中配置 
    7、exception 表示的是错误页的处理操作 
    8、page 如同this一样,代表整个jsp页面自身 
    9、out 输出 ,但是尽量使用表达式输出

8.哪个正确

  • abstract类只能用来派生子类,不能用来创建abstract类的对象。
  • abstract不能与final同时修饰一个类。
  • abstract类定义中可以没有abstract方法。
  • 1、abstract类不能用来创建abstract类的对象;
    2、final类不能用来派生子类,因为用final修饰的类不能被继承;
    3、如2所述,final不能与abstract同时修饰一个类,abstract类就是被用来继承的;
    4、类中有abstract方法必须用abstract修饰,但abstract类中可以没有抽象方法,接口中也可以有abstract方法。

9.java中关于继承的描述正确的是()

  • 一个子类只能继承一个父类
  • 继承具有传递性
  • 父类一般具有通用性,子类更具体
  • 子类可以继承父类的构造方法(错误);
  • 子类不可以继承父类的构造方法,只可以调用父类的构造方法。子类中所有的构造函数都会默认访问父类中的空参数构造函数,这是因为子类的构造函数内第一行都有默认的super()语句。super()表示子类在初始化时调用父类的空参数的构造函数来完成初始化。一个类都会有默认的空参数的构造函数,若指定了带参构造函数,那么默认的空参数的构造函数,就不存在了。这时如果子类的构造函数有默认的super()语句,那么就会出现错误,因为父类中没有空参数的构造函数。因此,在子类中默认super()语句,在父类中无对应的构造函数,必须在子类的构造函数中通过this或super(参数)指定要访问的父类中的构造函数。
  • 在java中,子类构造器会默认调用super()(无论构造器中是否写有super()),用于初始化父类成员,同时当父类中存在有参构造器时,必须提供无参构造器,子类构造器中并不会自动继承有参构造器,仍然默认调用super(),使用无参构造器。因此,一个类想要被继承必须提供无参构造器。

10.下面有关java classloader说法正确的是()?

  • ClassLoader就是用来动态加载class文件到内存当中用的
  • ClassLoader使用的是双亲委托模型来搜索类的
  • Java默认提供的三个ClassLoader是Boostrap ClassLoader,Extension ClassLoader,App ClassLoader
  • JDK中提供了三个ClassLoader,根据层级从高到低为:

  • Bootstrap ClassLoader,主要加载JVM自身工作需要的类。
  • Extension ClassLoader,主要加载%JAVA_HOME%\lib\ext目录下的库类。
  • Application ClassLoader,主要加载Classpath指定的库类,一般情况下这是程序中的默认类加载器,也是ClassLoader.getSystemClassLoader() 的返回值。(这里的Classpath默认指的是环境变量中配置的Classpath,但是可以在执行Java命令的时候使用-cp 参数来修改当前程序使用的Classpath)
  • JVM加载类的实现方式,我们称为 双亲委托模型:如果一个类加载器收到了类加载的请求,他首先不会自己去尝试加载这个类,而是把这个请求委托给自己的父加载器,每一层的类加载器都是如此,因此所有的类加载请求最终都应该传送到顶层的Bootstrap ClassLoader中,只有当父加载器反馈自己无法完成加载请求时,子加载器才会尝试自己加载。

    双亲委托模型的重要用途是为了解决类载入过程中的安全性问题。

    假设有一个开发者自己编写了一个名为Java.lang.Object的类,想借此欺骗JVM。现在他要使用自定义ClassLoader来加载自己编写的java.lang.Object类。然而幸运的是,双亲委托模型不会让他成功。因为JVM会优先在Bootstrap ClassLoader的路径下找到java.lang.Object类,并载入它。

11.Which statement declares a variable a which is suitable for referring to an array of 50 string objects?(Java)

  • String a[];
  • String[] a;
  • Object a[];
  • 在java 中,声明一个数组时,不能直接限定数组长度,只有在创建实例化对象时,才能对给定数组长度.。

    如下,1,2,3可以通过编译,4,5不行。而String是Object的子类,所以上述BCF均可定义一个存放50个String类型对象的数组。

    1. String a[]=new String[50];

    2. String b[];

    3. char c[];

    4. String d[50];

    5. char e[50];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值