javase简答题

  • 请写出字节流和字符流的异同点,并分别举出3个字节流和3个字符流

    • 字节流:stream结尾的都是字节流。
      例:FileInputStream,FilterInputStream(DataInputStream,BufferedInputStream),
      ByteArrayInputStream,PipedInputStream,StringBufferInputStream
      FileOutputStream,FilterOutputStream(DataOutputStream,BufferedOutputStream),
      PipedOutputStream,ByteArrayOutputStream.
    • 字符流:reader和writer结尾的都是字符流。
      例:BufferedReader,FilterReader,StringReader,
      PipedReaderBufferedWriter,FilterWriter,
      StringWriter,PipedReader
    • 字节流和字符流的桥梁:InputStreamReader,OutputStreamWriter。
    • 缓冲字符流的是BufferedWriter,BufferedReader。
    • 相同点:InputStream,OutputStream,Reader,Writer都是抽象类,不能实例化,要使用他们对应的子类实现。
    • 不同点:
      • 字节流在操作的时候用不到缓冲区,直接与文本联系。而字符流操作时要用到缓冲区。
      • reader类的read()方法返回值类型为int,是unicode编码,范围在0-65535可以表示的值,InputStream得read()方法返回值类型也是int,范围在0-255表示的值,汉字占两个字节,就不能使用InputStream。
      • 最大的不同是处理对象,字节流处理字节,字节数组,二进制对象(如音频,图像,视频)。字符流处理字符,字符数组或字符串。
  • Java重载和重写有什么区别?重载有那些要求?

    • 区别:
      • 1.重载实现的是静态多态(编译时),重写实现的是动态多态(运行时)。
      • 2.重载发生在一个类中,同名的方法不同的参数列表。可见性和返回值类型无额外要求。
        重写发生在父类子类之间,要求相同的方法名和参数列表,子类的可见性要大于等于父类,如果返回值类型是基本类型,要求父类和子类的返回值类型相同。如果是引用类型,子类的返回值类型等于父类的返回值类型,或是父类返回值类型的子类。另外子类抛出的异常要等与父类抛出的异常,或者是父类抛出异常的子类。
    • 重载的要求:
      重载发生在一个类中,同名的方法不同的参数列表。可见性和返回值类型无额外要求。
  • final\finally\finalize分别有什么作用?

    • final:用来修饰类,方法,属性。表示不可变性。
      finally:用在异常处理中,表示除了虚拟机关闭,一定会执行的部分。
      finalize: 垃圾回收器在执行时,会先调用被回收对象的finalize()方法,可以重写此方法实现对资源的回收,比如关闭文件。
  • 请写出String类中的常用方法,并指出该方法的作用(至少写5个,继承自Object类的方法不算在内)。

    • valueOf()
    • equals()
    • equalsIgnoreCase
    • compareTo()
    • compareToIgnoreCase()
    • startsWith()
    • endsWith()
    • split()
    • concat()
    • contains()
    • getBytes()
    • hashCode()
    • matches()
    • isEmpty()
    • length()
  • Serializable是什么?有什么作用?怎样序列化一个对象到文件中?

    • 是序列化接口。
    • 作用:把对象转换为字节序列。
    • 实现Serializable接口,通过ObjectOutputStream的writeObject()方法将对象写入到流中,再通过FileOutputStream将流写入到文件中。
  • 请简述 this 关键字在类中代表什么意思?它不能用在类的哪些区域或者方法中?

    • this代表对所调用对象的引用,this变量里面存储的是对象地址。不可以用在有static修饰的静态区域中,如果用在构造函数中,只能用在第一行,不能用在其他行。
  • 请问Exception中哪个方法执行后会在控制台打印如下信息?阅读信息,尝试分析出可能出错的位置和原因

    • printStackTrace()方法。UserServiceImpl文件的第12行。
    • String str=null;
      • If(str.equals(“test”)){}会引发空指针异常
      • If(“test”.equals(str){}不会引发空指针异常
      • Object test=null;test.toString();会引发空指针异常
      • String.valueOf(test);不会引发空指针异常
  • list 和 set的共同点和区别?

    • list和set都是接口,都继承Collection接口,list有序可重复,set无序不可重复。
  • String a = new String(“abc”); String b = “abc”;共创建了几个对象?程序员能否自己定义一个MyString类 来继承java.lang.String类?如果能,请写出方法,如果不能,为什么?

    • 两个对象,一个是常量池的“xyz”,一个是在堆上创建的对象。
    • 不能,因为String是final修饰的类,不能被继承。
  • 请分别简述继承、封装、多态的概念

    • 继承,体现的是is a 的关系,一种代码复用的手段。
    • 封装:隐藏对象的属性和实现细节,仅对外提供公共的访问方式。
    • 多态:将一个父类的引用指向子类的对象,在不同情况下引用所表现出的不同状态就是多态。
  • 请简述ArrayList与LinkedList的共同点及区别。

    • 都是List接口的实现类,都是有序,不重复。
    • ArrayList基于数组实现,常用操作是遍历。
    • LinkedList基于双向链表实现,常用操作是删除和插入。
  • 请简要写出通过字符串"2020-07-19"获取这一天是星期几基本思路或代码



public class getWeek{
// 根据时间
	public static String getWeek(Date date){
		simpleDateFormat sdf=new SimpleDateFormat("EEEE");
		String week =sdf.format(date);
		return week;
	}
	//根据字符串
	public static String getWeekByDateStr(String strDate){
		int year=Integer.parseInt(strDate.subString(0,4));
		int month=Integer.parseInt(strDate.subString(5,7));
		int day=Integer.parseInt(strDate.subString(8,10));
		Calendar c=Calendar.getInstance();
		c.set(Calendar.YEAR,year);
		c.set(Calendar.MONTH,month-1);
		c.set(Calendar.DAY_OF_MONTH,day);
		int week1=c.get(Calendar.DAY_OF_WEEK);
		String week2=null;
		switch(week1){
		case 1:
			return week2="SUNDAY";
			break;
		}
		case 2:
   			return week2="SUNDAY";
  			 break;
 		 }
		case 3:
   			return week2="SUNDAY";
   			break;
 		 }
  		case 4:
   			return week2="SUNDAY";
   			break;
  		}
  		case 5:
   			return week2="SUNDAY";
  			 break;
 		 }
  		case 6:
   			return week2="SUNDAY";
  			 break;
 		 }
  		case 7:
   			return week2="SUNDAY";
   			break;
  		}
	}
	return week2;
}
  • 简述instanceof的作用与使用方法? 一个String对象使用instanceof Object 后返回真还是假?为什么?
    • 判断一个引用类型的变量所指向的对象是否是一个类(接口抽象类的子类,实现类及它的子类)的实例。
    • 真,String类继承自Object类。
  • wait()和sleep()的区别。
    • wait()方法属于Object类,sleep()属于Thread类。
    • wait()方法释放cpu给其他线程,自己让出资源进入等待池等待;sleep占用cpu,不让出资源。
    • sleep()必须指定时间,时间到后,线程处于临时阻塞或运行状态;wait()可以指定时间也可以不指定。
    • wait()方法会释放持有的锁,让其他线程能够进入同步方法或同步代码块;sleep()不会释放持有的锁。
    • wait()方法只能在同步方法或同步代码块中调用,否则会报illegalMonitorStateException异常,如果没有设定时间,使用notify()来唤醒;而sleep()能在任何地方调用。
  • a==b与a.equals(b)有什么区别?a.hashCode()有什么作用?与a.equals(b)有什么关系?
    • ==:用来比较两个变量的值是否相等,equals()方法是Object的方法,也是这样的作用。但equals()方法可以被重写,比如String就重写了equals()方法,根据字符串来比较是否相等。
    • hashCode()方法也是用来鉴定两个对象是否相等。
    • equals()方法返回值为true,则hashCode()方法返回值肯定相等,hashCode()方法返回值相等,equals()方法返回值不一定相等。一般判断两个对象是否相等,先用hashCode()方法判断,如果相等再用equals()方法进一步判断。
  • 除了单例模式,你在生产环境中还是用过什么模式?请做简要说
    • 总体来说设计模式分为三大类:
      • 创建型模式(5种):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
      • 结构型模式(7种):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
      • 行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、 状态模式、访问者模式、中介者模式、解释器模式。
  • 单例模式
    • 懒汉模式
public class SingletonDemo {    
	private static SingletonDemo instance;
	private SingletonDemo(){
	}	
     	public static synchronized SingletonDemo getInstance(){
     	        if(instance==null){             
     	        instance=new SingletonDemo();         
     	        }         
     	        return instance;     
        } 
}
 - 饿汉模式
public class SingletonDemo {     
	private static SingletonDemo instance=new SingletonDemo();     
	private SingletonDemo(){
	}     
	public static SingletonDemo getInstance(){         
		return instance;     
	}
}

你可能感兴趣的:(java,java)