JavaSE基础知识2

面试遇到的基础题

  1. 下面代码的输出结果
public class Parent {
    static {  System.out.println("Parent - 静态代码块"); }
    
    { System.out.println("Parent - 代码块");  }

    public Parent() {
        System.out.println("Parent - 构造");
    }
}
public class Child  extends Parent{
    static { System.out.println("Child - 静态代码块");}
    
    { System.out.println("Child - 代码块"); }
    
    public Child() {
        System.out.println("Child - 构造");
    }
}
public static void main(String[] args) {
    new Child();
}

解析:子类继承父类,实例化子类时,会先实例化父类,但是静态代码块会在编译时执行

Parent - 静态代码块
Child - 静态代码块
Parent - 代码块
Parent - 构造
Child - 代码块
Child - 构造

  1. main 方法为什么是静态的?能不能改为非静态?

main()方法一定是静态的,不能改为非静态;虽然去掉static依然可以编译成功,但是运行时会出错。没有改为非静态,则JVM调用时就必须实例化该类,就需要调用构造函数,如果该类只有有参构造函数,就会出现歧义。

  1. 在 Java 中,为什么不允许从静态方法中访问非静态变量?

Java 中不能从静态上下文访问非静态数据只是因为非静态变量是跟具体的对象实例关联的,而静态的方法却没有和任何实例关联

  1. Java 中是否可以覆盖(override)一个static 的方法?

Java 中 static 方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而 static 方法是编译时静态绑定的。static 方法跟类的任何实例都不相关,所以概念上不适用。

  1. 静态域和静态代码
public class SingletonTest2 {
static {
singleton = new SingletonTest2();
}
private static SingletonTest2 singleton = null ;
private SingletonTest2(){ }

public static void main(String[] args) {
System.out.println(singleton); // null
}
}
没有任何打印,因为没有获取到SingletonTest2
public class SingletonTest2 {
private static SingletonTest2 singleton = null;
static {
singleton = new SingletonTest2();
}

private SingletonTest2() {
}

public static void main(String[] args) {
System.out.println(singleton);
//com.learn.concurrency.example.singleton.SingletonTest2@7adf9f5f
}
}
可以正确打印

总结:静态变量一定要定义在静态代码的前面

  1. 下面main函数的输出结果
	public static void main(String[] args) {
        Integer i1 = new Integer(23);
        Integer i2 = new Integer(23);
        System.out.println(i1 == i2);
        Integer i3 = 23;
        Integer i4 = 23;
        System.out.println( i3 == i4);
        Integer i5 = 500;
        Integer i6 = 500;
        System.out.println(i5 == i6);
    }
false true false
分析:i1和i2 是new 的,自然不相等;i3 和i4,在缓存 -128 and 127 中;i5和i6不在,需要new
  1. 下面程序的输出结果
public static void main(String[] args) {
        System.out.println(1.0/0);
        System.out.println(-1.0/0);
        System.out.println(0.0/0);
    }
 Infinity  // 正无穷
-Infinity // 负无穷
 NaN 	// 空
  1. 下面程序的输出结果
public class Child extends Parent{
    public Child() {
        sayHello();
    }

    public void sayHello(){
        System.out.println("Child Hello ");
    }
    public static void main(String[] args) {
        new Child();
    }
}
class Parent{
    public Parent() {
        sayHello();
    }
    public void sayHello(){
        System.out.println("Parent Hello ");
    }
}
 // new Child()会先实例化父类, 由于方法被覆盖,父类调用的sayHello是已经被覆盖的,
 这是个人理解,希望能有大神给出比较有力的解释
Child Hello
Child Hello 
  1. 下面程序的输出结果
public static void main(String[] args) {
        int count = 0 ;
        for (int i = 0; i < 10; i++) {
            count = count ++;
        }
        System.out.println(count);
    }

0  // 分析 额为加一个变量来看,a = count ++; 执行完成后 a = 0 ; count = 1 ;
同理此时将a 换成 count ,那count = 0 ;故无论执行多少次,count 总是0 

查看javac编译后的源码即可明白

	源码			|		编译后
 int a = 0 ;	|	int a = 0;
 a = a ++ ;		|	byte var10000 = a; --> a是0
 				|	int var2 = a + 1;	
 				|	a = var10000;		--> a 还是0
---------------------------------------------------
int a = 0 ;		|	int a = 0;
    a ++ ;		|	int a = a + 1;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园的建设目标是通过数据整合、全面共享,实现校园内教学、科研、管理、服务流程的数字化、信息化、智能化和多媒体化,以提高资源利用率和管理效率,确保校园安全。 智慧校园的建设思路包括构建统一支撑平台、建立完善管理体系、大数据辅助决策和建设校园智慧环境。通过云架构的数据中心与智慧的学习、办公环境,实现日常教学活动、资源建设情况、学业水平情况的全面统计和分析,为决策提供辅助。此外,智慧校园还涵盖了多媒体教学、智慧录播、电子图书馆、VR教室等多种教学模式,以及校园网络、智慧班牌、校园广播等教务管理功能,旨在提升教学品质和管理水平。 智慧校园的详细方案设计进一步细化了教学、教务、安防和运维等多个方面的应用。例如,在智慧教学领域,通过多媒体教学、智慧录播、电子图书馆等技术,实现教学资源的共享和教学模式的创新。在智慧教务方面,校园网络、考场监控、智慧班牌等系统为校园管理提供了便捷和高效。智慧安防系统包括视频监控、一键报警、阳光厨房等,确保校园安全。智慧运维则通过综合管理平台、设备管理、能效管理和资产管理,实现校园设施的智能化管理。 智慧校园的优势和价值体现在个性化互动的智慧教学、协同高效的校园管理、无处不在的校园学习、全面感知的校园环境和轻松便捷的校园生活等方面。通过智慧校园的建设,可以促进教育资源的均衡化,提高教育质量和管理效率,同时保障校园安全和提升师生的学习体验。 总之,智慧校园解决方案通过整合现代信息技术,如云计算、大数据、物联网和人工智能,为教育行业带来了革命性的变革。它不仅提高了教育的质量和效率,还为师生创造了一个更加安全、便捷和富有智慧的学习与生活环境。
JavaSE(Java Standard Edition)是Java平台的标准版,提供了Java语言的核心库和基础功能。下面是一些JavaSE基础知识的介绍: 1. Java语言特性:Java是一种面向对象的编程语言,具有简单、可移植、安全、高性能等特点。它支持自动内存管理(垃圾回收)、异常处理、多线程等特性。 2. 数据类型:Java提供了基本数据类型(如整型、浮点型、字符型、布尔型)和引用数据类型(如类、接口、数组)。可以使用变量来存储和操作数据。 3. 控制流程:Java提供了条件语句(如if-else、switch)、循环语句(如for、while、do-while)和跳转语句(如break、continue)来控制程序的执行流程。 4. 类和对象:Java是一种面向对象的语言,所有的代码都必须定义在类中。类是对象的模板,对象是类的实例。可以使用类来创建对象,并通过对象调用类中的方法和访问类中的属性。 5. 继承和多态:Java支持继承机制,一个类可以继承另一个类的属性和方法。通过继承可以实现代码的重用和扩展。多态是指同一个方法在不同的对象上有不同的行为。可以通过方法重写和方法重载来实现多态。 6. 异常处理:Java提供了异常处理机制,可以捕获和处理程序中的异常。通过try-catch-finally语句块可以捕获异常并进行相应的处理,保证程序的稳定性和可靠性。 7. 输入输出:Java提供了丰富的输入输出功能,可以通过标准输入输出、文件操作、网络通信等方式进行数据的输入和输出。 8. 集合框架:Java提供了一套集合框架,包括List、Set、Map等接口和实现类,用于存储和操作数据集合。集合框架提供了高效的数据结构和算法,方便开发者进行数据处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值