• Java错题归纳day10


    1. 假定AB为一个类,则执行 “AB ab = new AB(a,5);”语句时将自动调用该类的带参构造函数

    解析:
    这个是实例化对象
    new AB();表示使用无参构造函数实例化对象调用的无参构造函数
    new AB(a,5); 表示调用的是有参构造函数 new AB (Object i , int j );

    2. String

    数字和字符串使用+时,变成字符串的拼接

    3. 接口

    1. 接口中声明的成员默认为static final成员(不管是基础数据类型还是引用类型),且必须初始化;
    2. 接口中声明的方法默认为public且不能有实现体,即{},方法体可有参数;
    3. 实现接口的类,必须实现接口中所有方法,且不能降低方法的运用域,即必须显示声明为public
    4. 抽象类不需要实现接口的方法。抽象类也可以实现接口,但是可以实现部分或者一个都不实现。
    5. 在jdk8之后添加了默认方法,在返回值加上default关键字,然后还有方法体;该接口被扩展时,可以直接继承或重新声明。还添加了静态方法。

    4. GC垃圾回收(garbage collection )

    1. 什么是GC
      Java中的GC就是对内存的GC。
      Java的内存管理实际上就是对象的管理,其中包括对象的分配和释放。
      我们知道对象的分配,程序员可以通过new关键字,Class的new-Instance方法等来显示的分配;而对象的释放,程序员不能实时的进行释放,这就需要GC来完成。
    2. 怎么GC?
      当前商业Java虚拟机都采用分代收集的垃圾回收算法,即将对象的内存周期划分为几块,按照每块的情况采取不同的垃圾回收算法。

    一般是把Java堆分为新生代和老年代:

    • 年轻代: 年轻代用来存放新近创建的对象,年轻代中存在的对象是死亡非常快的。存在朝生夕死的情况。
    • 老年代: 老年代中存放的对象是存活了很久的对象。

    垃圾回收算法分为三种:

    • 标记-清除算法: 标记无用对象,然后对其进行清除回收。
    • 复制算法: 将内存区域划分为大小相等的两部分,每次只使用一部分,当该部分用完后将其存活的对象移至另一部分,并把该部分内存全部清除。
    • 标记-整理算法: 标记无用对象,让所有存活的对象都向内存一端移动,然后清除掉存活对象边界外的内存区域。

    5. 类方法的调用

    类方法是静态方法,类方法是属于整个类的,而实例方法是属于类的某个对象的。
    由于类方法是属于整个类的,并不属于类的哪个对象,所以类方法的方法体中不能有与类的对象有关的内容。即类方法体有如下限制:
    (1) 类方法中不能引用对象变量;
    (2) 类方法中不能调用类的对象方法;
    (3) 在类方法中不能使用super、this关键字。
    (4)类方法不能被覆盖。
    如果违反这些限制,就会导致程序编译错误。
    与类方法相比,对象方法几乎没有什么限制:
    (1) 对象方法中可以引用对象变量,也可以引用类变量;
    (2) 对象方法中可以调用类方法;
    (3) 对象方法中可以使用super、this关键字。
    注意:在类方法中调用本类的类方法可直接调用

    6. 不同JDK版本中接口的特性

    • JDK1.8接口可以定义default方法和static方法;
    • JDK1.9接口中可以定义私有方法。
    • 在JDK1.7中,接口只能定义抽象方法,既Java中所有的非抽象方法都必须在类内定义。

    7. HttpServletResponse

    HttpServletResponse完成的功能:

    • 设置HTTP头标
    • 设置cookie
    • 设置返回数据类型,输出返回数据
      HttpServletRequest:读取路径信息

    8. Math

    1. floor: 求小于参数的最大整数。返回double类型-----n. 地板,地面
      例如:Math.floor(-4.2) = -5.0

    1. ceil: 求大于参数的最小整数。返回double类型-----vt. 装天花板;
      例如:Math.ceil(5.6) = 6.0

    1. round: 对小数进行四舍五入后的结果。返回int类型
      例如:Math.round(-4.6) = -5

    9. 继承

    子类的构造方法总是先调用父类的构造方法,如果子类的构造方法没有明显地指明使用父类的哪个构造方法,子类就调用父类不带参数的构造方法。
    而父类没有无参的构造函数,所以子类需要在自己的构造函数中显式的调用父类的构造函数。
    即使用super
    程序执行顺序:
    父类静态变量→父类静态代码块→子类静态变量→子类静态代码块→父类非静态变量→父类非静态代码块→父类构造函数→子类非静态变量→子类非静态代码块→子类构造方法

    10 jsp

    JSP 共有以下 6 种基本动作:
    jsp:include:在页面被请求的时候引入一个文件;
    jsp:useBean:寻找或者实例化一个JavaBean;
    jsp:setProperty:设置 JavaBean 的属性;
    jsp:getProperty:输出某个 JavaBean 的属性;
    jsp:forward:把请求转到一个新的页面;
    jsp:plugin:根据浏览器类型为 Java 插件生成 OBJECT 或 EMBED 标记;

    11.web应用

    http:HTTP协议(HyperText Transfer Protocol,超文本传输协议),是用于从WWW服务器传输超文本到本地浏览器的传输协议。
    servlet:是一套技术标准,内含与web应用相关的一系列接口,用于为web应用实现方式提供宏观解决方案
    web容器:例如tomcat,用于接受、响应客户端的请求,负责将HTTP请求转换为HttpServletRequest对象,也就是创建servlet实例对象
    jsp网页:java的服务器页面,其本质也是一个servlet,由html网页代码、Java代码、jsp标签组成,当servlet处理完数据后会转发给jsp,jsp负责显示数据

    12.switch语句中的数据类型

    • java的switch比较特殊,低于int的类型,使用会上转为int类型作为判断,所以大于int的类型,如long,double就不可以在switch中使用(不能自动向下转型);
      总结switch只接受int类型的数据,接受了低类型的就自动向上转为int
      注意:char、byte、short相加时会自动转换为int类型

    13. ArrayList和LinkedList的特征

    ArrayList:增删慢,查询快。
    由于是数据组实现,需要连续的内存空间,如果删除数组中间的值,为了保证下标的有效性,需要将后面的数据往前移,所以删除慢。
    当插入A对象到B对象的前面时,需要将B对象和B对象之后的所有对象后移一位,再插入A对象。所以插入慢。
    数组的大小是固定的,如果数组满了,需要重新分配空间,new一个新数组并copy旧数据之后再增加新数据,所以增加慢。
    因为是连续内存空间,可以通过下标查询数据,所以查询快。

    LInkedList:增删快,查询慢。
    由于是链表实现,当前节点的next指向下一个节点,prev指向上一个节点,不需要连续的内存空间,所以增删快。
    因为不是连续内存空间,所以不能使用下标查询,只能通过next遍历,所以查询慢。

    14. 线程

    对于线程而言,start是让线程从new变成runnable。run方法才是执行体的入口。
    但是在Thread中,run方法是个空方法,没有具体实现。
    Bground继承了Thread,但是没有重写run方法,那么调用run方法肯定是无输出。

    15. servlet相关的包

    javax.servlet
    javax.servlet.jsp
    java.servlet.jsp.el
    java.servlet.jsp.tagext

  • 相关阅读:
    python列表的三种遍历方法(for循环,索引,下标)
    开箱即用 yyg-cli(脚手架工具):快速创建 vue3 组件库和vue3 全家桶项目
    [附源码]java毕业设计星期八酒店管理系统
    kube-OVN总体架构
    如何提高自己的软件测试水平之bug定位
    【pen200-lab】10.11.1.5
    OAuth 2.0实现统一认证
    嵌入式Linux学习(1)——通信总线协议简介
    ubuntu修改网卡名称
    RocketMQ的架构及概念
  • 原文地址:https://blog.csdn.net/m0_52322019/article/details/125547699