java基础知识题

抽象类和接口
  • 都不能直接实例化
  • 都定义了抽象方法
描述抽象类接口
方法权限不能为private不能使用abstract,只能是public
方法方法声明、实现只有方法声明
变量普通变量公共静态常量
继承与实现继承单个类,实现多个接口多继承接口
方法实现不必实现抽象类中的所有abstract方法必须实现接口中的全部方法

String s = new String(“xyz”);创建了几个对象?
  • 如果常量池中不存在"xyz",此时会创建一个"xyz"对象放入常量池
  • new String 使用常量池中的"xyz"来创建一个新的String对象

throw和throws
throwthrows
方法体中实现用于方法声明中
抛出一个具体的异常类型,通常与try…catch代码块使用表示可能抛出的异常(可多个,不一定会发生)

equals和 ==
分类说明
equals判断对象是否相同
==比较数值类型时判断数值是否相同,比较引用类型时判断引用地址是否相同

URL u =new URL(“http://www.123.com”);。如果www.123.com不存在,则返回______。
  • 返回http://www.123.com
  • new URL()时必须捕获检查异常,但这个异常是由于字符串格式和URL不符导致的,与网址是否存在无关。URL的toString方法返回字符串,无论网址是否存在。

调用执行mystery(1234)的输出结果?

//precondition:  x >=0
	public void mystery (int x) {
	
		System.out.print(x % 10);
		
		if ((x / 10) != 0) {
			mystery(x / 10);
		}
		
		System.out.print(x % 10);
	}
	
  • 答案:43211234
  • 考递归,总共调用了4次mystery方法
  • /:除法运算(取整值),%:取余运算(取余数)

编译器优化
	public class StringDemo{
	
  		private static final String str="taobao";
 		public static void main(String [] args) {
 		
    		String a = "tao"+"bao";
    		String b = "tao";
   			String c = "bao";
   			final String m = "tao"+"bao";
   			final String n = "tao"+"bao";
   			
    		System.out.println(a==str);			//true
    		System.out.println((b+c)==str); 	//false
    		System.out.println((m+n)==str); 	//true
  		}
	}
  • 编译器优化:对于final修饰的,“tao”+“bao"会直接变为"taobao”,而b和c在程序运行前是可变的,因此会新建一个StringBuilder来处理 + 操作
  • 变量和基本类型数据存放于栈中,栈中数据可共享;对象存放于堆内存中

程序执行顺序
class BaseClass {
 
 	public BaseClass() {} {
 		System.out.println("3-父类构造器");
 	}
 	static {
 		System.out.println("1-父类静态块");
 	}
 	
 }
 
public class Base extends BaseClass {

 	public Base() {} {
 		System.out.println("4-子类构造器");
 		}
 		static {
 			System.out.println("2-子类静态块");
 		}
 		
 	public static void main(String[] args) {
 		new Base();
 	}
 	
 }
  • 顺序:静态代码块(父 ->子) >> 父类(非静态代码块 -> 父类构造函数)>> 子类(非静态代码块 -> 父类构造函数)

try…finally输出顺序
public abstract class Test {
    public static void main(String[] args) {
    	Test t = new Test();
        System.out.println("输出:"+t.hhh());
    }
     
    public static int hhh(){
        int a = 0;
        try{
            a = 1;
            return a;
        }finally{
        	a = 2;
            system.out.println("finally输出:"+a);
        }
    }
}
/**output:
finally输出:2
输出:1
*/
  • system打印语句中的+是进行字符串拼接,是一个整体,要等待与a拼接完成才输出到控制台
  • finally优先于try中的return语句前执行
  • return语句返回的值暂时存储到临时栈,因此finally中给a赋值并不会改变return的结果值
  • 若finally中也有return则会覆盖之前的所有return

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值