【牛客每日一练】

4.5

  1. 在异常处理中,子类异常应该放在父类异常之前;
  2. 编译后的Java文件.class; .jar是 .class的集合
    未编译的程序.java
    页面程序.jsp
    配置程序.xml
    javac将源程序编译成 .class字节码
    java将字节码转化成机器码 .exe

在这里插入图片描述

1.类指外部类,最大的类,修饰符有public(表示该类在项目所有类中可以被导入),default(该类只能在同一个package中使用),abstract,final

2.内部类指位于类内部但不包括位于块、构造器、方法内,且有名称的类,修饰符有public,private,protected访问控制符,也可以用static,final关键字修饰,public和private比较简单,一个表示所有可以被所有类访问,一个表示只能被自身访问,protected修饰的成员类可以被同一个包中的类和子类访问。而default修饰的成员类只能被同一个包中的类访问。

3.局部内部类指位于块、构造器、方法内的有名称类,最多只能有final修饰

  1. 能够读写文件的是 数据流
  2. 结构型模式最体现拓展性的是 装饰模式
  3. switch结构 case后无break,会一直向下执行
  4. 反射机制提供:运行时判断一个对象所属的类、运行时构造一个类的对象、运行时判断一个类所具有的成员变量和方法、运行时调用一个对象的方法
  5. long、float正确定义需要加l和f,但是long和float属于基本类型,会进行转化,所以不会报出异常
    boolean类型不能和任意类型进行转化,int other = (int) true会报出类型异常错误;byte取值范围为-128-127

4.6
9. finally里的代码在try或catch中的return语句前执行;
10. Thread的start()才能真正启动线程,此时线程会处于就绪状态,一旦得到时间片,则会调用线程的run方法进入运行状态;
而run()只是普通方法,如果直接调用,相当于函数调用,直接执行;
11. LinkedHashSet按添加顺序排序,TreeSet自然排序;
4.一个源文件中有几个类和接口,经javac编译后就会有几个class文件;
5.String对象两种创建方式:
第一种:String s1 = “aaa”是在常量池中获取对象
第二种:String s2 = new String(“aaa”)一共会创建两个字符串对象,一个在堆中,一个在常量池中(前提是常量池中没有“aaa”对象)
6.String无decode、encode方法
能实现GBK编码字节流到UTF-8字节流的转换:dst = new String(src,“GBK”).getBytes(“UTF-8”)
7.java数据库连接JDBC用到的 桥接模式
桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化
8.Struts通过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的Model-View-Controller(MVC)设计模式的应用框架,是MVC经典设计模式中的一个经典产品。
Struts1要求Action类继承一个抽象基类;Struts2 Action类可以实现一个Action接口;
Struts1 Action依赖于Servlet API,Struts2 Action不依赖于容器,允许Action脱离容器单独被测试;
Struts1整合了JSTL,Struts2可以使用JSTL,但是也支持OGNL
9.引导类加载器:用来加载Java核心库,使用原生代码实现的
拓展类加载器:用来加载Java的拓展库
系统类加载库:根据Java应用的类路径(CLASSPATH)来加载Java类
tomcat为每个App创建一个Loader,里面保存着此WebApp的ClassLoader;需要加载WebApp下的类时,就取出ClassLoader来使用;
10.final修饰类、方法、属性; 不能修饰抽象类,应为抽象类还要被继承;
修饰的方法不能被重写,而不是重载;
修饰属性,不能被再次赋值

4.7
12. 不考虑反射机制,一个子类显式调用父类的构造器必须用Super关键字
super代表子类的直接父类特征,可以访问父类的成员变量、成员方法、构造方法
在子类中,存在与父类相同的属性和方法,由于访问子类中属性和方法的优先级高于父类,可以通过super关键字来访问父类中的属性和方法
13. 装箱拆箱操作:即基本数据类型与包装类之间的转换,如int—装箱—>Integer、Integer—拆箱–>int,发生在引用类型和值类型之间,包装类即引用数据类型、基本数据类型即值类型;
14. 被static修饰的变量称为静态变量,静态变量属于整个类,而局部变量属于方法,只有在方法内有效,所以static不能修饰局部变量
15.当try和catch中有return时,finally仍然会执行,但finally后语句不会执行
一旦在finally块中使用了return或throw语句,将会使try块、catch块中return、throw语句失效
16.没有<<<符号,因为<<后右边总是补0
<<表示左移、>>表示带符号右移、 >>>表示无符号右移
17.Java基本数据类型包括Boolean和数值类型,数值类型有整数类型和浮点类型。整数类型有byte、short、int、long、char;浮点类型包括float、double
引用类型包括 类、接口、数组类型以及特殊的null类型
18.Java运行时“线程私有”:java虚拟机栈、程序计数器、本地方法栈
“线程共享”:java堆、方法区
19、根据作用于规则,在函数中定义的变量只能在函数中引用、不能与其所在参数的形参重名、存储单元在内存中的栈区(堆主要用于存放对象,栈主要用来执行程序)
20、定义一维数组,必须显式指明数组的长度
定义多维数组时,其一维数组的长度必须首先指明,其他维数组的长度可以稍后指定;
采用给定值初始化数组时,不必指明长度;
“[]”为数组运算符,在声明一个数组时,数组运算符可以放在数据类型与变量之间,也可以放在变量之后

4.8
1.HttpServlet容器响应Web客户请求流程如下:

1)Web客户向Servlet容器发出Http请求;

2)Servlet容器解析Web客户的Http请求;

3)Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息;

4)Servlet容器创建一个HttpResponse对象;

5)Servlet容器调用HttpServlet的service方法,这个方法中会根据request的Method来判断具体是执行doGet还是doPost,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象;

6)HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;

7)HttpServlet调用HttpResponse的有关方法,生成响应数据;

8)Servlet容器把HttpServlet的响应结果传给Web客户。

doGet()或doPost()是创建HttpServlet时需要覆盖的方法.
  1. List、Set、Map都继承自Collection接口
    1)List 是一个有序集合,可以存放重复的数据 (有序:存进是什么顺序,取出时还是什么顺序)

            (1).ArrayList 底层是数组适合查询,不适合增删元素。
            (2).LinkedList 底层是双向链表适合增删元素,不适合查询操作。
            (3).Vector 底层和ArrayList相同,但是Vector是线程安全的,效率较低很少使用
    

2) Set 是一个无序集合,不允许放重复的数据 (无序不可重复,存进和取出的顺序不一样)

	        (1).HashSet 底层是哈希表/散列表
            (2).TreeSet 继承sartedSet接口(无序不可重复,但存进去的元素可以按照元素的大小自动排序)

3)Map 是一个无序集合,以键值对的方式存放数据,键对象不允许重复,值对象可以重复。

            (1).HashMap实现不同步,线程不安全。  HashTable线程安全 

            (2).HashMap中的key-value都是存储在Entry中的。 

            (3).HashMap可以存null键和null值,不保证元素的顺序恒久不变,它的底层使用的是数组和链表,通过hashCode()方法和equals方法保证键的唯一性
  1. instanceof用来判断左边对象是不是右边(类、抽象类、父类、接口)的实例

  2. JAVA 子类重写继承的方法时,不可以降低方法的访问权限,子类继承父类的访问修饰符要比父类的更大,也就是更加开放,假如我父类是protected修饰的,其子类只能是protected或者public,绝对不能是friendly(默认的访问范围)或者private,当然使用private就不是继承了。还要注意的是,继承当中子类抛出的异常必须是父类抛出的异常的子异常,或者子类抛出的异常要比父类抛出的异常要少。

  3. run方法结束或是异常会导致线程销毁在这里插入图片描述

  4. java提供了一个系统级的线程,即垃圾回收器线程。用来对每一个分配出去的内存空间进行跟踪。当JVM空闲时,自动回收每块可能被回收的内存,GC是完全自动的,不能被强制执行。程序员最多只能用System.gc()来建议执行垃圾回收器回收内存,但是具体的回收时间,是不可知的。当对象的引用变量被赋值为null,可能被当成垃圾。

  5. 类方法是指用static修饰的方法,普通方法叫对象方法。
    this指的是当前对象,类方法依附于类而不是对象,用this调用类方法会编译错误
    类方法中也可以调用其他类的类方法。同时可以通过创建对象来调用普通方法
    类方法中可以创建对象,所以可以调用实例方法

    就像main方法就是一个类方法(静态方法),然后下面写两个方法,一个静态方法,一个普通方法;想要调用静态方法可以直接类名.方法,想要调用普通方法需要实例化对象,用类对象去调用普通方法;所以说类方法中可以有实例方法,可以调用实例化对象,看main方法就明白了
    在这里插入图片描述

  6. off-heap叫做堆外内存,将你的对象从堆中脱离出来序列化,然后存储在一大块内存中,这就像它存储到磁盘上一样,但它仍然在RAM中。对象在这种状态下不能直接使用,它们必须首先反序列化,也不受垃圾收集。序列化和反序列化将会影响部分性能(所以可以考虑使用FST-serialization)使用堆外内存能够降低GC导致的暂停。堆外内存不受垃圾收集器管理,也不属于老年代,新生代。
    JVM GC回收堆和方法区

4.9
10. Applet类是浏览器类库中最为重要的类,同时也是所有
JAVA小应用程序的基本类。
一个Applet应用程序从开始运行到结束时所经历的过程被称为
Applet的生命周期。
Applet的生命周期涉及init()、start()、stop()和destroy()四种方法,这4种方法都是Applet类的成员,可以继承这些方法,也可以重写这些方法,覆盖原来定义的这些方法。除此之外,为了在Applet程序中实现输出功能,每个Applet程序中还需要重载paint()方法:
1、
public void init()
init()方法是Applet运行的起点。当启动Applet
程序时,系统首先调用此方法,以执行初始化任务。
2、
public void start()
start()方法是表明Applet程序开始执行的方法。当含有此Applet程序的Web页被再次访问时调用此方法。因此,如果每次访问Web页都需要执行一些操作的话,就需要在Applet程序中重载该方法。在Applet程序中,系统总是先调用init()方法,后调用start()方法。
3、
public void stop()
stop()方法使Applet停止执行,当含有该Applet的Web页被其他页代替时也要调用该方法。
4、
public void destroy()
destroy()方法收回Applet程序的所有资源,即释放已分配给它的所有资源。在Applet程序中,系统总是先调用stop()方法,后调用destroy()方法。
5、
paint(Graphics g)
paint(Graphics g)方法可以使Applet程序在屏幕上显示某些信息,如文字、色彩、背景或图像等。参数g是Graphics类的一个对象实例,实际上可以把g理解为一个画笔。对象g中包含了许多绘制方法,如drawstring()方法就是输出字符串。

  1. 抽象类
    可以实现接口,而且抽象类可以继承自抽象类
    必须有“abstract class”修饰,可以包含抽象方法也可以不包含
    抽象类和接口都不能被实例化,只有具体的类才能实例化

    接口和抽象类的区别:
    1.接口的方法默认为public abstract ,接口中的变量默认为public static final,在java8之前所有的方法不能有实现
    抽象类中可以有非抽象方法
    2.一个类可以实现多个接口,但只能继承一个抽象类
    3.一个类实现接口,要实现该接口的所有抽象方法。
    4.接口不能被实例化,但可以声明,但是必须引用一个实现该接口的对象。
    抽象类可以有构造方法,但是不能被直接通过new进行实例化。但可以通过子类继承,实例化子类的时候抽象类也会被实例化。
    这其实用到了多态,向上转型。父类引用指向子类对象。
    5.从设计层面来说,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。

  2. 类与类之间关系为继承,只能是单继承,可以多层继承; 类与接口之间关系为实现,既可以单实现,也可以多实现; 接口与接口之间关系为继承,既可以单继承,也可以多继承

  3. == 优先级高于三目运算符?,?右结合

  4. Thread.sleep() 和 Object.wait(),都可以抛出 InterruptedException。这个异常是不能忽略的,因为它是一个检查异常(checked exception)

  5. getParameter()是获取POST/GET传递的参数值;
    getInitParameter获取Tomcat的server.xml中设置Context的初始化参数
    getAttribute()是获取对象容器中的数据值;
    getRequestDispatcher是请求转发。

  6. JSP内置对象有:
    1.request对象
    客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。
    2.response对象
    response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。
    3.session对象
    session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例.
    4.out对象
    out对象是JspWriter类的实例,是向客户端输出内容常用的对象
    5.page对象
    page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例
    6.application对象
    application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。
    7.exception对象
    exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象
    8.pageContext对象
    pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本 类名也叫pageContext。
    9.config对象
    config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)

4.10
构造方法不能被子类继承,所以用final修饰没有意义;构造方法用于创建一个新的对象,不能作为类的静态方法,用static修饰没有意义;此外,JAVA语言不支持native或synchronized的构造方法;

加载驱动程序:调用方法Class.forName、添加系统的jdbc.drivers属性、通过registerDriver方法注册

4.12

  1. 重载和重写都是多态的一种表现形式。重载是在编译期间的活动,重写是运行期间的活动; 重载是在一个类中定义相同的名字的方法,方法的参数列表或者类型要互相不同,但是返回值类型不作为是否重载的标准,可以修改可见性; 重写要求子类重写基类方法时要与父类方法具有相同的参数类型和返回值,可见性要大于等于基类
  2. 抽象类不一定含有抽象方法,接口中的方法都是抽象方法 抽象中没有方法体,!!!JDK1.8后,接口中的方法可以有方法体,用default关键字修饰方法 接口的方法默认为public、abstract,接口中变量默认为public、static、final,一般用作常量
  3. Hibernate get()采用立即加载方式,执行时会立即向数据库发出查询语句,如果数据库中没有相应数据,返回null,load()采用延迟加载方式,不会发出sql语句,得到对象只保存实体对象的id值,只有使用这个对象时,才发出SQL语句,异常返回ObjectNotFoundException
  4. 运行时异常:
    都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
    运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。
    非运行时异常 (编译异常):
    是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。在这里插入图片描述
  5. 线程安全:hashtable、concurrentHashMap、synchronizedMap

4.13
6. System是java.lang中的一个类,out是System内的一个成员变量,这个变量是一个java.io.PrintStream类的对象,println呢就是一个方法了。
7. 局部变量可以先申明不用必须初始化,但使用到了一定要初始化
8. volatile与synchronized的区别:
volatile本质是在告诉jvm当前变量在寄存器中的值是不确定的,需要从主存中读取,synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住.
volatile仅能使用在变量级别,synchronized则可以使用在变量,方法.
volatile仅能实现变量的修改可见性,但不具备原子特性,而synchronized则可以保证变量的修改可见性和原子性.
volatile不会造成线程的阻塞,而synchronized可能会造成线程的阻塞.
volatile标记的变量不会被编译器优化,而synchronized标记的变量可以被编译器优化.

** 4.14**
9. Java整数类型 默认int 带小数默认double
10. 构造器没有返回值,这个没有返回值与返回值为void不同; 每个类在没有自己显示声明构造器时,都会有一个默认的无参构造; 构造器可以重载,而且可以使用super()、this()互相调用; 每个构造器的默认第一行都是Super(),但是一旦父类中没有没有无参构造,必须在子类的第一行显式的声明调用哪一个构造
11. 方法内变量没有初始值,必须进行初始化;类中变量可以不需要初始值,默认初始类型; final类型的变量一定要初始化

4.15
12. 创建派生类对象,构造函数执行顺序:
父类静态域 -》子类静态域-》父类成员初始化-》父类构造块-》父类构造方法-》子类成员初始化-》子类构造块-》子类构造方法
13. 重载是在一个类中,有多个方法名相同,参数列表不同(参数个数不同、参数类型不同),与方法返回值无关,与权限修饰符无关;
14. 引用类型:
强引用:垃圾回收器永远不会回收;软引用:非必要但仍有用的对象,内存充足不会回收; 弱引用:不管内存是否充足,只要JVM开始垃圾回收,就会被回收; 虚引用:最弱的一种引用,随时会被回收

4.16
15. 在委托事件模型中,源生成事件并把它发送给一个或多个监听器,每个监听器必须向事件源注册
16.java只支持单继承,实现多继承 1.直接实现多个接口、2、继承一个类然后实现一个或多个接口、3、通过内部类去继承其他类
17.面向对象基本原则:单一职责、开放封闭、依赖倒置、接口隔离、里氏替换
抽象类原则不属于

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值