java.lang.Number是一个抽象类,里面全部都是抽象方法
static 方法不能被继承,不能被子类override,不能与abstract一起修饰方法
abstract 修饰的方法不能有方法体
基本类型的包装类,Byte,Short,Integer,Long,Float,Double,都是final类,不可以被继承
基本类型的包装类,Byte,Short,Integer,Long,Float,Double,都继承了Number类
Math类为final类,不可以被extends
ClassLoader为抽象类
抽象类和接口都可以声明使用,抽象类可以具有构造方法,接口不能有构造方法,即使抽象类可以有构造方法,抽象类也不能用于实例化,接口也不能被实例化
本题中,在调用AccountType.FIEXED的时候,会将AccountType类进行初始化,执行 static{} 代码块, 而static代码块里面调用了AccountType的构造方法,static{}块里面初始化了三个AccountType类,所以也就调用了三次构造方法
System.out.println()会调用AccountType的toString方法,而toString方法会返回name值, name值是在构造方法中进行初始化的,等于枚举类中变量的名字
-Xmn,-Xmx,-Xms之间的关系
java堆(-Xms,-Xmx) == 新生代(-Xmn)(Eden+ 2* Survivor) + 老年代
java线程共享区 == java堆(-Xms,-Xmx) + 方法区(永久代-XX:PermSize,-XX:MaxPermSize)
-XX:SurvivorRatio = Eden/singleSurvivor
Heap(-Xms/-Xmx) == -Xmn(新生代) + 老年代
开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。
由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象.
在其它的Servlet中利用ServletContext对象获取共享的数据
ServletContext context = this.getServletContext();
String name = context.getAttribute("name");
getInitParameter获取Tomcat的server.xml中设置Context的初始化参数 getRequestDispatcher是请求转发 getParameter()是获取POST/GET传递的参数值
如果==两侧有一个是基本类型,那么就是值比较
如果==两侧都是包装类型,那么就是比较地址是否相同
Integer i = 59 , 会调用Integer.valueOf(59)
基本类型不像String,没有常量池
如果Integer.valueOf()在-128~127之间,则会返回已经存在的Integer对象,由于不存在常量池,所以不会使得new Integer(59)与valueOf(59)是同一个对象
i01 == i02 基本类型与包装类型的比较,是值比较,所以这是相等的
i01 == i03 i01是调用Ineger.valueOf()方法形成的,i03也是,他们指向的是同一个对象
i03 == i04 一个是IntegerCache中的Integer,另一个是new Integer(),是不同的
i02 == i04 比较的是值
(1)加载:Servlet容器(Tomcat)通过类加载器加载servlet文件(.class)
(2)创建:通过调用servlet构造函数创建一个servlet对象
(3)初始化:调用init方法初始化
(4)处理客户请求:每当有一个客户请求,容器会创建一个线程来处理客户请求 (5)卸载:调用destroy方法让servlet自己释放其占用的资源
servlet是由Servlet容器负责加载Servlet类,创建Servlet对象并实例化,然后调用Servlet的init方法,进行初始化,之后调用Service方法。实例化和初始化不同。先实例化,再初始化。
jsp 现在还不太了解
Java实现了真数组,避免了覆盖数据的可能,而不是 覆盖数据对象的可能
真数组:
在内存中连续分配。
数组所存在的内存空间为数组专用,避免了数据被覆盖的问题。
数组内存放的类型是确定的,唯一的。
HttpServletReponse里面基本都是set方法,可以设置cookie,Header,可以getHeader中的信息,设置状态码等等
各种常见的状态码就存储在HttpServletReqonse中:
System.arraycopy(native) > clone(native) > Array.copyOf() > for循环
byte < short < char < int < long < float < double
'a' + 1 转换为 int类型
1.本类来访问
2,通过反射进行反问
yield和suspend不抛出任何异常
Thread.join: 等待该线程终止的时间最长为 millis 毫秒
Thread.sleep: 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),该线程不丢失任何监视器的所属权
Object.notify和Object.notifyAll方法不抛出任何异常
Object.finialize()方法抛出Throwable异常
Object中,只有wait方法会抛出InterruptException
方法有:
read(),close(),available(),mark(),markSuppport(),reset(),skip()方法
方法重写override,看右侧的实际类型
new Sub()的实际类型和静态类型都是Sub
Super super = new Sub()的静态类型是super,实际类型是Sub (Super)new Sub()的静态类型是Super,实际类型为Sub