题目整理

这篇博客主要涵盖了Java编程的多个核心概念,包括变量作用域、依赖注入、HttpServletRequest处理、字符编码、反射、多线程工具、接口特性、JMX支持版本以及类继承限制。此外,还讨论了文件命名规范和无法被继承的Java类。

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

一、下列代码的执行结果是(a=11 t.a=2

public class Test { 
    public static int a = 1; 
    public static void main(String[] args) { 
        int a = 10; 
        a++; Test.a++; 
        Test t=new Test(); 
        System.out.println("a=" + a + " t.a=" + t.a); 
    } 
}

值为1的a属于类变量也叫作成员变量,值为10的a是局部变量。

首先a++时,就近原则,用局部变量10来加;

Text.a直接用类名调用成员变量的情况,只能是static 修饰的成员变量1来加;

然后又实例化了对象,在输出中第一个a= 用就近原则输出11,第二个t.a 对象只能调用类变量输出2 。

二、依赖注入

依赖注入是一种思想,或者说是一种设计模式,在java中是通过反射机制实现,与具体框架无关。 

Spring依赖注入(DI)的三种方式,分别为:

  • 接口注入
  • Setter 方法注入
  • 构造方法注入

三、HttpServletRequest

HttpServletRequest类主要处理:

1.读取和写入HTTP头标

2.取得和设置cookies

3.取得路径信息

4.标识HTTP会话

四、中文编码方式

Java语言中,中文字符所占的字节数取决于字符的编码方式,一般情况下:

1、采用ISO8859-1编码方式时,一个中文字符与一个英文字符一样只占1个字节;

2、采用GB2312或GBK编码方式时,一个中文字符占2个字节;

3、而采用UTF-8编码方式时,一个中文字符会占3个字节。

在C++中

在C++中,char是基础数据类型,8位,1个字节。byte不是基础数据类型,一般是typedef unsigned char byte;这样子的,也就是说,byte其实是unsigned char类型,那么也是8位,1个字节。不同的是,char可以表示的范围是-128-127,而byte可以表示的范围是0-255。

在Java中

在java中,char和byte都是基础数据类型,其中的byte和C++中的char类型是一样的,8位,1个字节,-128-127。但是,char类型,是16位,2个字节, '\u0000'-'\uFFFF'。

为什么java里的char是2个字节?

  • 因为java内部都是用unicode的,所以java其实是支持中文变量名的,比如string 世界 = "我的世界";这样的语句是可以通过的。

语句:char foo='中',是否正确?(假设源文件以GB2312编码存储,并且以javac – encoding GB2312命令编译)

java中采用GB2312或GBK编码方式时,一个中文字符占2个字节,而char是2个字节,所以是对的。

五、public class contained in a Java program file must have the same name as the file, except for the extension ".java".(×)

内部类就不需要与文件名相同 。

六、反射

public Method[] getDeclaredMethods():返回类或接口声明的所有方法,包括public, protected, default (package) 访问和private方法的Method对象,但不包括继承的方法。当然也包括它所实现接口的方法。

public Method[] getMethods():返回类的所有public方法,包括其继承类的公用方法,当然也包括它所实现接口的方法。

七、多线程

CountDownLatch:允许一个或多个线程等待其他线程完成操作;

CyclicBarrier:同步屏障,让一组线程到达一个屏障时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会执行。

Callable中的call比Runnable中的run厉害就厉害在有返回值和可以抛出异常。同时这个返回值和线程池一起用的时候可以返回一个异步对象Future。

start是把线程从new变成了runnable。

八、接口

JDK8开始,接口中可以定义有方法体的方法,方法必须被default和static修饰。

九、JMX

JMX是在哪一个JDK版本开始支持?(1.3)

JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。 

十、对文件名为Test.java的java代码描述正确的是(编译报错)

class Person {
    String name = "No name";
    public Person(String nm) {
        name = nm;
    }
}
class Employee extends Person {
    String empID = "0000";
    public Employee(String id) {
        empID = id;
    }
}
public class Test {
    public static void main(String args[]) {
        Employee e = new Employee("123");
        System.out.println(e.empID);
    }
}

父类没有无参的构造函数,所以子类需要在自己的构造函数中显式调用父类的构造函数。

添加super("nm");否则报错:Implicit super constructor Person() is undefined. Must explicitly invoke another constructor

class Person {
    String name = "No name";
    public Person(String nm) {
        name = nm;
    }
     
}
class Employee extends Person {
    public Employee(String nm) {
        super(nm);
        // TODO Auto-generated constructor stub
    }
 
    String empID = "0000";
}
public class Test {
    public static void main(String args[]) {
        Employee e = new Employee("123");
        System.out.println(e.empID);
    }
}

十一、下面哪些类可以被继承? Java.lang.Thread、java.lang.Number、java.lang.Double、java.lang.Math、 java.lang.ClassLoader

java.lang包中不能被继承的类:

  • public final class Byte
  • public final class Character
  • public static final class Character.UnicodeBlock
  • public final class Class<T>
  • public final class Compile
  • public final class Double
  • public final class Float
  • public final class Integer
  • public final class Long
  • public final class Math
  • public final class ProcessBuilder
  • public final class RuntimePermission
  • public final class Short
  • public final class StackTraceElement
  • public final class StrictMath
  • public final class String
  • public final class StringBuffer
  • public final class StringBuilder
  • public final class System
  • public final class Void
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值