首页 > 编程语言 >java 一些奇怪的笔试题

java 一些奇怪的笔试题

时间:2023-04-26 19:33:15浏览次数:39  
标签:args java void 笔试 list public class new 奇怪


例1:

package com.test;

public class Test1 {
	
	public void testExit() {
		try {
			System.exit(0);
		} finally {
			System.out.println("testExit");
		}
	}
	
	public void testReturn() {
		try {
			return;
		} finally {
			System.out.println("testReturn");
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Test1 t = new Test1();
		t.testReturn();
		t.testExit();
	}

}



会打印出什么?

答案:testReturn


例2:

package com.test;

public class Test2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		short s = 1;
//		s = s + 1;
		s++;
		s += 1;
	}

}



注释掉的那行编译时会报错。

byte也一样。

long和int不会报错。


例3:

package com.test;

public class Test3 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		float f = 1.0f;
		double d = 1.0d;
//		float f2 = 1.0d;
		double d2 = 1.0f;
		float f3 = 1f;
		double d3 = 1d;
		float f4 = 1;
		double d4 = 1;
	}

}



注释掉的那行不能编译通过。


例4:

package com.test;

public class Test4 {
	int m;
	
	public void test1() {
		int n;
	}
	
	public void test2() {
		int n;
		
//		if (n == 1) {
//			
//		}
	}
	
	public void test3() {
		if (m == 0) {
			
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
	}

}



对于局部变量,如果没被用到,可以不初始化,否则一定要初始化。注释掉的代码,编译会报错。

对于成员变量,自动会初始化。


例4:

package com.test;

public class Test5 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Inner i1 = new Inner();
//		Inner2 i2 = new Inner2();
		Inner3 i3 = new Inner3();
//		Inner4 i4 = new Inner4();
//		Inner5 i5 = new Inner5();
//		Inner6 i6 = new Inner6();
		Test5 t5 = new Test5();
		Inner2 i2 = t5.new Inner2();
	}
	
	static class Inner {
		
	}
	
	class Inner2 {
		
	}
	
	private static class Inner3 {
		
	}
	
	private class Inner4 {
		
	}
	
	public class Inner5 {
		
	}
	
	protected class Inner6 {
		
	}

}

 

关于内部类,两种使用方法:

1、加static。

2 、先new一个外部类,再用外部类的实例来new内部类。


例6:

package com.test;

import java.util.ArrayList;
import java.util.List;

public class Test6 {

	public void testInt(int n) {
		n++;
	}

	public void testIntger(Integer n) {
		int m = n;
		m++;
		n = new Integer(m);
	}
	
	public void testList(List<Integer> list) {
		int n = list.get(0);
		n++;
		list = new ArrayList<Integer>();
		list.add(n);
	}
	
	public void testIntger2(Integer n) {
		n++;
	}
	
	public void testList2(List<Integer> list) {
		int n = list.get(0);
		n++;
		list.set(0, n);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Test6 t = new Test6();
		int n = 1;
		t.testInt(n);
		System.out.println(n);
		
		t.testInt(Integer.valueOf(n));
		Integer m = new Integer(1);
		t.testIntger(m);
		System.out.println(m);
		
		List<Integer> list = new ArrayList<Integer>();
		list.add(1);
		t.testList(list);
		System.out.println(list.get(0));
		
		t.testIntger2(m);
		System.out.println(m);
		
		t.testList2(list);
		System.out.println(list.get(0));
	}

}



只有方法testList2才会输出2。

testInt里,基本类型改变大小后,只会影响方法内部,方法返回后还是没变。

testIntger里,n = new Integer(m);后,n指向了新的地址,原来地址的值是没变的。

testList里,也是一样,list指向了新的地址。

testIntger2里,n++的分解动作,应该是

int m = n.intValue();
m++;

它有个从Integer到int的拆包过程。

只有testList2才改变了值。

 


标签:args,java,void,笔试,list,public,class,new,奇怪
From: https://blog.51cto.com/u_1002776/6228672

相关文章

  • docker启动rabbitMQ,通过java创建交换机、队列、绑定
    通过docker启动rabbitMQdockerrun-d--namerabbitmq-p5671:5671-p5672:5672-p4369:4369-p25672:25672-p15671:15671-p15672:15672rabbitmq:management  将其修改为自启动:dockerupdaterabbitmq--restart=always  以下为通过java代码进行创建交换机......
  • 【Java设计模式】装饰者设计模式
    目录1.装饰者模式(Wrapper)概念2.装饰者是什么?3.装饰者设计模式-参与者3.1组成3.1Demo1.Component(抽象构件)2.ConcreteComponent(具体构件)3.Decorator(抽象装饰类)4.ConcreteDecorator(具体装饰类)5.Test类:3.2总结4.JDK源码中的装饰者设计模式扩展:开闭原则1.装饰者模式(Wra......
  • VScode 创建Java项目
    1.点击view找到命令行输入java(ctrl+shift+P)src:一般是自己写的源代码的文件lib:外部引用库等其他的内容bin:二进制程序,用以存放未来的编译文件等  ......
  • javascript操作cookie
    functionsetCookie(name,value){varDays=30;varexp=newDate();exp.setTime(exp.getTime()+Days*24*60*60*1000);document.cookie=name+"="+escape(value)+";expires="+exp.toGMTString();......
  • java 多线程的start()和run()的理解
    run()方法中是各个线程要执行的具体内容。所以当一个线程直接调用run()时那么直接开始执行方法体,这是在main线程中的多个线程只能时按照顺序的等待前面的线程结束run()方法的执行。而调用start方法只是线程进入准备阶段(Ready),并没有真正执行,这需要JVM进行分配时间片进行轮转线程执......
  • VScode配置Java环境
    1.安装VScode2.配置Java环境变量3.配置VScodeJava插件参考博文:VSCode配置调试编译java环境,史上最全!!!安装ExtensionPackforJava插件 VScode配置Java:home文件——首选项——设置输入javahome,选择在settings.json中编辑 {"window.zoomLevel":1,//"j......
  • JavaScript怎么判断一个host是否在局域网中?
    在JavaScript中,可以使用WebRTCAPI来判断一个host是否在局域网中。WebRTCAPI提供了一种用于在浏览器中进行实时通信的技术,其中包括了一些用于网络发现的API。下面是一个简单的实现:functioncheckLocalhost(callback){varpc=newRTCPeerConnection({iceServers:[]});pc......
  • 大华面试java 2023.5
    一张表随着业务递增,如何对一个字段进行快速查询。比如对身高字段查询,要求查询是10的倍数的。考虑分库分表,或者提前计算设置标志位加索引OOM的场景有哪些,分别是什么情况下会出现这样的问题项目中的复杂设计开发流程springcloud动态更新class的原理,类加载机制,java中类加载......
  • Java+proj4j实现根据EPSG编码进行坐标系转换
    场景Java+GeoTools实现WKT数据根据EPSG编码进行坐标系转换:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130370754上面使用GeoTools实现坐标系转换。Vue+Openlayers+proj4实现坐标系转换:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/13038879......
  • linux下分析java程序占用CPU、内存过高
    转:https://www.cnblogs.com/wu-wu/p/11923250.html CPU过高分析1)使用TOP命令查看CPU、内存使用状态可以发现CPU占用主要分为两部分,一部分为系统内核空间占用CPU百分比,一部分为用户空间占用CPU百分比。其中CPU状态中标示id的为空闲CPU百分比。当空闲CPU百分比越低,说明CPU占用率......