2021/1/11 牛客百题总结

最近发现看书实在是非常的枯燥,并且其中的知识点特别容易忘,因此开始刷牛客的专项练习,刚刚开始,大概制定的标准是每天刷一个小时基础专项。
我做一套30题的卷子大概是15-20分钟,所以大概每天刷一百道题+每天一总结+每天一回顾昨天的内容,也在考虑要不要去用艾宾浩斯记忆法,先看一下情况吧。

1.内部类也可以使用四种访问权限

public:同一类、同一包、不同包子类、不同包非子类
protected:同一类、同一包、不同包子类
默认:同一类、同一包
private:同一类

2.关于try中return问题

public class Test{
    
    	
    public int add(int a,int b){
    
    	
         try {
    
    	
             return a+b;		
         } 
        catch (Exception e) {
    
    	
            System.out.println("catch语句块");	
         }	
         finally{
    
    	
             System.out.println("finally语句块");	
         }	
         return 0;	
    } 
     public static void main(String argv[]){
    
     
         Test test =new Test(); 
         System.out.println("和是:"+test.add(9, 34)); 
     }
}

执行结果:
finally语句块
和是:43
主要是由于执行try当中语句时return并不会直接返回,而是先将return的结果放入一个临时栈中,而接着去执行finally语句,最后再返回。

public abstract class Test {
    
    
    public static void main(String[] args) {
    
    
        System.out.println(beforeFinally());
    }
    
    public static int beforeFinally(){
    
    
        int a = 0;
        try{
    
    
            a = 1;
            return a;
        }finally{
    
    
            a = 2;
        }
    }
}
/**output:
1
*/

正如这个代码,finally只会覆盖a,但在此之前a已经存入临时栈了,所以并不影响return。
关于finally中return问题,我记得《深入理解Java虚拟机》书中好像说的是不会覆盖try中的return,但Github上的《Java面试突击》好像说的是finally当中的return会覆盖try中的return。

3.数组会进行初始化

4.接口中成员变量默认public static final,方法默认public abstract

5.Thread中的Join方法作用是等待线程结束

比如,在b线程中调用a.join(),那么b线程就要等待a线程结束后才会执行

下列代码执行结果为() 
public static void main(String args[])throws InterruptedException{
    
    
	    	Thread t=new Thread(new Runnable() {
    
    
				public void run() {
    
    
					try {
    
    
						Thread.sleep(2000);
					} catch (InterruptedException e) {
    
    
						throw new RuntimeException(e);
					}
					System.out.print("2");
				}
			});
	    	t.start();
	    	
	    	t.join();
	    	System.out.print("1");
	    }
	  //  OutPut:21

6.valueOf方法:返回一个String对象

public class CharToString {
    
    
 public static void main(String[] args)
 {
    
    
  char myChar = 'g';
  String myStr = Character.toString(myChar);
  System.out.println("String is: "+myStr);
  myStr = String.valueOf(myChar);
  System.out.println("String is: "+myStr);
 }
}
//Output:
		String is g
		String is g

7.构造方法不能被继承(但也有说法是子类继承父类的一切,但私有不可访问,辩证的看吧)

扫描二维码关注公众号,回复: 12248034 查看本文章

8.<<左移,>>带符号右移,>>>无符号右移

9.wait()、notify()和notifyAll()是 Object类 中的方法

Condition是在java 1.5中才出现的,它用来替代传统的Object的wait()、notify()实现线程间的协作,相比使用Object的wait()、 notify(),使用Condition1的await()、signal()这种方式实现线程间协作更加安全和高效。

10.Java异常类

在这里插入图片描述
非RuntimeException一般是外部错误,其必须被try{}catch语句块捕获。

RuntimeException,运行时异常,Java编译器不会检查。

11.Collection接口层次
在这里插入图片描述
12.JVM内存包括虚拟机栈、本地方法栈、程序计数器、方法区和堆

JVM堆分为:新生代(一般是一个Eden区,两个Survivor区),老年代(old区)

13.Swing

Swing是为了解决AWT存在问题而新开发的包,是一个基于Java的跨平台MVC框架,使用单线程模式,但运行速度比AWT慢,其所有组件都是从javax.swing.JComponet类继承来的。

14.foward和redirect问题

foward:服务器获取跳转页面内容传给用户,用户地址栏不变

redirect:服务器向用户发送转向地址,redirect后地址栏变成新的地址

15.多继承概念

Java中多继承通过三种方式实现:

1.实现多个接口

2.继承一个类,然后实现一个或多个接口

3.通过内部类去继承其它类

16.servlet service

1.不管是post还是get方法都会在service中处理

2.service判断请求类型,如果是post则执行doPost方法,反之执行doGet方法,doPost和doGet是在Httpservlet中实现的。

service方法是在servlet生命周期的服务期

servlet生命周期分为三个阶段:

1.初始化阶段,调用init()方法

2.响应客户请求阶段,调用service()方法

3.终止阶段,调用destroy()方法

servletContext存放共享数据,是一个全局变量,提供一系列方法供Servlet与Web容器交互

servletConfig封装servlet配置信息

17导包只可以导到当前层,不可以再导入包里面包的类

18.

public static void main(String[] args) {
    
    
    String a = new String("myString");
    String b = "myString";
    String c = "my" + "String";
    String d = c;
    System.out.print(a == b);
    System.out.print(a == c);
    System.out.print(b == c);
    System.out.print(b == d);
}

A:a指向堆内存,b指向常量池,因此地址不相等,false
B:java有常量优化机制,c也指向常量池,且与b指向同一个,则a与c地址不相等,false;
C:b与c地址相等,true
D:d是c的副本,地址相同,所以b与d地址相等,true

19.局部变量在语句被执行时创建,而不是方法执行时创建

20.只有new和反射用到了构造方法

猜你喜欢

转载自blog.csdn.net/qq_52212721/article/details/112494646