Java-刷题知识点笔记-P1

1.基本数据类型

1.1基本数据类型介绍

  • byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。
  • short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。
  • int:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。
  • long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。
  • float:32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。
  • double:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。
    boolean:只有true和false两个取值。
  • char:16位,存储Unicode码,用单引号赋值。
    注:一个字节=8位。

Object 是引用数据类型,只申明而不创建实例,只会在栈内存中开辟空间,默认为空,空占1 bit.

1.2基本数据类型转换

1.2.1自动数据类型转换

一般是从位数低的类型位数高的类型转换
自动转换按从低到高的顺序转换。不同类型数据间的优先关系如下:
低 ---------------------------------------------> 高
byte,short,char-> int -> long -> float -> double
在这里插入图片描述

1.2.2强制数据类型转换

强制转换的格式是在需要转型的数据前加上 “( )”,然后在括号内加入需要转化的数据类型。有的数据经过转型运算后,精度会丢失,而有的会更加精确

2.类之间存在以下几种常见的关系

2.1USES-A

USES-A:依赖关系,A类会用到B类,这种关系具有偶然性,临时性。但B类的变化会影响A类。这种在代码中的体现为:A类方法中的参数包含了B类。

2.2HAS-A

HAS-A:聚合关系,拥有关系,是关联关系的一种特例,是整体和部分的关系。比如鸟群和鸟的关系是聚合关系,鸟群中每个部分都是鸟。

2.3IS-A

IS-A:表示继承。父类与子类,这个就不解释了。

2.4关联关系

关联关系:A类会用到B类,这是一种强依赖关系,是长期的并非偶然。在代码中的表现为:A类的成员变量中含有B类。

要注意:还有一种关系:组合关系也是关联关系的一种特例,它体现一种contains-a的关系,这种关系比聚合更强,也称为强聚合。它同样体现整体与部分的关系,但这种整体和部分是不可分割的。

3.运算时,字符优先级

1)不论有什么运算,小括号的优先级都是最高的,先计算小括号中的运算
2)任何字符与字符串相加都是字符串,但是是有顺序的,字符串前面的按原来的格式相加,字符串后面的都按字符串相加

4.Java对象的创建方式(5种方式)

4.1使用 new 关键字(最常用)

ObjectName obj = new ObjectName();

4.2 使用反射的Class类的newInstance()方法

ObjectName obj = ObjectName.class.newInstance(); 

4.3使用反射的Constructor类的newInstance()方法

ObjectName obj = ObjectName.class.getConstructor.newInstance();

4.4使用对象克隆clone()方法

ObjectName obj = obj.clone(); 

4.5使用反序列化(ObjectInputStream)的readObject()方法

try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))) { 
	ObjectName obj = ois.readObject(); 
}

5.final

  1. final关键字可以用于成员变量、本地变量、方法以及类。
  2. final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误。
  3. 不能够对final变量再次赋值
  4. 本地变量必须在声明时赋值。
  5. 在匿名类中所有变量都必须是final变量。
  6. final方法不能被重写。
  7. final类不能被继承。
  8. 没有在声明时,初始化final变量的称为空白final变量(blank final variable),它们必须在构造器中初始化,或者调用this()初始化。不这么做的话,编译器会报错“final变量(变量名)需要进行初始化”。
  9. 被fianl修饰的变量不会自动改变类型,当2个final修饰的变量相操作时,结果会根据左边变量的类型而转化

6.forward和redirect

6.1从地址栏显示来说

  • forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.
  • 浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
  • redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

6.2从数据共享来说

  • forward:转发页面转发到的页面可以共享request里面的数据.
  • redirect:不能共享数据.

6.3从运用地方来说

  • forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
  • redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.

6.4从效率来说

forward:高.
redirect:低.

6.5转发是服务器行为,重定向是客户端行为。为什么这样说呢,这就要看两个动作的工作流程:

转发过程

  • 客户浏览器发送http请求----》web服务器接受此请求–》调用内部的一个方法在容器内部完成请求处理和转发动作----》将目标资源 发送给客户;

  • 在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客 户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。

重定向过程

  • 客户浏览器发送http请求----》web服务器接受后发送302状态码响应及对应新的location给客户浏览器–》客户浏览器发现 是302响应,则自动再发送一个新的http请求,请求url是新的location地址----》服务器根据此请求寻找资源并发送给客户。
  • 在这里 location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

解释二
重定向,其实是两次request,

  • 第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。
  • 这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。

7.反射机制

7.1反射机制概念

JAVA反射机制是在运行状态中,

  • 对于任意一个类,都能够知道这个类的所有属性和方法
  • 对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
    反射是通过一个名为Class的特殊类,用Class.forName(“className”);得到类的字节码对象,然后用newInstance()方法在虚拟机内部构造这个对象(针对无参构造函数)。
    也就是说反射机制让我们可以先拿到java类对应的字节码对象,然后动态的进行任何可能的操作,

7.2反射的功能

  • 在运行时判断任意一个对象所属的类
  • 在运行时构造任意一个类的对象
  • 在运行时判断任意一个类所具有的成员变量和方法
  • 在运行时调用任意一个对象的方法

这些都是反射的功能。使用反射的主要作用是方便程序的扩展。

8.JSP(JavaServer Pages)

一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码

8.1JSP简介

  • JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准
  • JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。
  • JSP技术以Java语言作为脚本语言为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
  • JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。
  • JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。

8.2JSP内置对象(9个)

  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初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)

9.异常和错误

在这里插入图片描述

9.1异常和错误的区别

异常能被程序本身可以处理,错误是无法处理

通常,Java的异常(包括Exception和Error)分为

  • 可查的异常(checked exceptions)
  • 不可查的异常(unchecked exceptions。)

9.1.1可查异常(编译器要求必须处置的异常)

正确的程序在运行中,很容易出现的、情理可容的异常状况 。 可查异常虽然是异常状况,但在一定程度上它的发生是可以预计的,而且一旦发生这种异常状况,就必须采取某种方式进行处理。

除了RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常。这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。

9.1.2不可查异常(编译器不要求强制处置的异常)

不可查异常包括

  • 运行时异常(RuntimeException与其子类)
  • 错误(Error)

Exception 这种异常分两大类运行时异常和非运行时异常(编译异常)
Exception 检查异常是最常见异常比如 io异常sql异常,都发生在编译阶段。
运行时异常: 都是RuntimeException类及其子类异常,运行时异常,编译器没有强制对其进行捕捉和处理(RuntimeException并不必须被捕获)。一般都会把异常向上抛出,直到遇到处理代码位置,若没有处理块就会抛到最上层,多线程用thread。run()抛出,单线程用main()抛出。常见运行时异常如

  • NullPointerException(空指针异常)
  • IndexOutOfBoundsException(下标越界异常)
  • 数组越界异常
  • 数组存储异常
  • 缓冲区溢出异常
  • 算术异常

等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的(程序员在编程时出现错误),程序应该从逻辑角度尽可能避免这类异常的发生。运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过

非运行时异常 (编译异常): 是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常

Error表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。

10.jre 判断程序是否执行结束的标准

所有的前台线程执行完毕
main()函数即主函数,是一个前台线程,前台进程是程序中必须执行完成的,而后台线程则是java中所有前台结束后结束,不管有没有完成,后台线程主要用与内存分配等面。
后台线程就是守护线程,前台线程就是用户线程
守护线程:是指在程序运行时在后台提供一种通用服务的线程,这种线程并不是必须的。同时守护线程的线程优先级都很低的。JVM中的GC线程就是一个守护线程,只要JVM启动,GC线程就启动了。

10.1前台线程和后台线程的区别和联系

用户线程和守护线程几乎没有什么区别,唯一的区别就在于,如果用户线程都已经退出了,只剩下了守护线程,那么JVM直接就退出了

  1. 后台线程不会阻止进程的终止。属于某个进程的所有前台线程都终止后,该进程就会被终止。所有剩余的后台线程都会停止且不会完成。
  2. 可以在任何时候将前台线程修改为后台线程,方式是设Thread.IsBackground 属性。
  3. 不管是前台线程还是后台线程,如果线程内出现了异常,都会导致进程的终止。
  4. 托管线程池中的线程都是后台线程,使用new Thread方式创建的线程默认都是前台线程
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值