• Java基础部分(javaSe)


    Java锁

    集合的种类 ? list 和 set 的区别? arraylist 和 linkedlist 区别 ?

    Collection :单列集合
    List:有序 可以重复 有索引 可以通过索引对元素进行操作
    ArrayList
    LinkedList
    Vector
    Set:无序 不可以重复
    HashSet
    TreeSet
    Map:双列集合
    特点:
    双列集合 Collection是单列集合
    键不可以重复,值可以重复。Set:无序 不可以重复
    数据结构针对键有效

    静态变量 成员变量 局部变量的区别

    书写位置
    静态 :类中方法外 加了一个关键字 static
    成员: 类中方法外 没有static
    局部: 方法内
    内存:
    静态:方法区里面的静态区
    成员:堆
    局部:栈
    生命周期
    静态:随着类的加载而加载 随着类的消失而消失(虚拟机停掉才会消失)
    成员:随着对象的创建而存在 随着对象消失而消失(当一个对象没有任何指向的时候 过一段时间垃圾回收器就会来清理)
    局部:随着方法的调用而存在 随着方法的执行完毕而消失
    初始化:
    静态:有默认初始化
    成员:有默认初始化
    局部:没有了默认初始化 所以在使用之前必须先赋值

    重载和重写的区别:

    重写:发生在子父类中 子类出现和父类一模一样的方法 才是方法的重写
    子类重写父类的方法
    重载:发生在一个类中 只要满足 方法名相同 参数列表(顺序 个数 类型)不同 与返回值无关的方法
    就叫做他们之间构成相互重载。
    重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。
    重写Override表示子类中的方法可以与父类的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。

    构造方法:

    创建对象时一定会执行. 没有返回值 构造方法名必须和类名一致 可以写一个单独的return;

    有参构造和Set方法的区别:

    有参构造方法,是在创建对象的同时 顺便给成员变量进行赋值 ,强调的是创建对象
    而set方法 就是为了给成员变量赋值的一个方法

    static静态:

    1:随着类的加载而加载 并且只会加载一次 随着类的消失而消失(虚拟机停掉 才会消失)
    2:优先于对象而存在
    3:被 包含静态的这个类的所有对象 共享
    4:不仅能用对象名调用 还能用类名直接调用(推荐类名调用)

    权限修饰符的访问权限:

    private: 是为本类准备的
    默认:是为同一个包下的类准备的
    protected:是为子类准备的 无论子类在任何地方
    public: 为所有类准备的

    final:关键字

    final修饰的类:不能被继承
    final修饰的方法:不能被重写
    final修饰的变量是常量: 常量只能被赋值一次

    代码块:

    局部代码块:
    在方法内部{}
    限定变量生命周期,及早释放,提高内存利用率
    构造代码块:
    在方法外面 类里面 {}
    每创建一次对象 就执行一次 而且是在构造方法执行前执行的,所以说就可以把构造方法里面的共性内容写到构造代码块里面
    静态代码块:
    在方法外面 类里面 static{}
    随着类的加载而执行 只执行一次
    做一些全局初始化的内容

    this和super的区别:

    this代表当前对象的引用 不仅可以调用本类的 也可以调用父类的(本类没有的前提下才能调用父类的)
    super代表的是父类内存空间的标识

    Object

    Object:是一切类的超类或父类
    Object的hashCode():返回该对象的哈希值(根据地址值算出的一个int数字)
    不同对象的hashCode()值一般不同, 相同对象的hashCode值相同
    Object的getClass():返回该对象的字节码文件对象
    Object的toString()
    1):我们在打印一个对象的时候,默认调用的对象的toString方法,如果该对象没有重写toString()那么调用的
    Object的toString()方法,因为继承了Object嘛
    2):Object的toString方法 返回 类的全路径名称 + @ + 16进制哈希值, 这样返回一般没有意义
    3):所以我们一般在编写类的时候 都重写Object的toString(),一般要求是把类里面的属性都显示出来
    Object的equals()
    1):Object中equals方法的源码
    public boolean equals(Object obj){
    return (this == obj);
    }
    比较的引用类型的地址值,开发中 我们调用equals方法是想比较对象里面的属性值
    2):所以在编写类的时候一般重写Object中的equals方法,让其比较对象的属性值
    == 和 equals 的区别?
    (1)== 比较的是 内存中的地址值 equals重写之后比较的是属性值,否则等价于 == .

    抽象类abstract:

    特点:
    1)抽象类里面可以没有抽象方法,但是有抽象方法的类必须得是抽象类
    2)抽象类不能被实例化
    3)普通子类继承抽象类,必须全部重写抽象类里面的抽象方法,要不子类也是抽象类

     

    表单提交两种方式GET和POST的区别:

    GET的提交的参数会显示到地址栏上,而POST不显示.
    GET往往是有大小限制的,而POST没有大小的限制.
    GET没有请求体,而POST有请求体.form表单用post

    JDBC的优点:

    直接底层操作,提供了很简单、便捷的访问数据库的方法,跨平台性比较强。灵活性比较强,可以写很复杂的SQL语句。
    JDBC的缺点:
    因为JAVA是面向对象的,JDBC没有做到使数据能够面向对象的编程,使程序员的思考仍停留在SQL语句上。
    操作比较繁琐,很多代码需要重复写很多次。
    如果遇到批量操作,频繁与数据库进行交互,容易造成效率的下降。
    jdbc步骤 : 注册驱动 获得数据库的连接 创建代表sql语句的对象 执行sql语句 遍历结果集(查询语句) 释放资源

    wait 和 sleep 的区别:

    wait:属于object 类,释放同步锁 ,不需要捕获异常
    无限期,除非调用notify
    sleep:属于 thread类,不释放同步锁 ,需要捕获异常
    有时间限制,调用interreput() 可以强行打断

    线程创建的两种方式:

    1. extends thread 类
    2. implements runnable 接口(更好的解耦合)

    Servlet的生命周期:(*****)

    Servlet生命周期:Servlet从创建到销毁的过程.
    何时创建:用户第一次访问Servlet创建Servlet的实例
    何时销毁:当项目从服务器中移除的时候,或者关闭服务器的时候.
    用户第一次访问Servlet的时候,服务器会创建一个Servlet的实例,那么Servlet中init方法就会执行.任何一次请求服务器都会创建一个新的线程访问Servlet中的service的方法.在service方法内部根据请求的方式的不同调用doXXX的方法.(get请求调用doGet,post请求调用doPost).当Servlet中服务器中移除掉,或者关闭服务器,Servlet的实例就会被销毁,那么destroy方法就会执行.

    转发与重定向 的 区别:

    转发:1.一次请求 一次响应
    2.地址栏不会改变
    3.只能在本网站内访问
    4.路径不用加工程名
    重定向: 1.两次请求,两次响应
    2.地址栏会改变
    3.可以定向到任意网站
    4.要加工程名.

    Final,finally,finalize的区别?

    final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。内部类要访问局部变量,局部变量必须定义成final类型。
    finally是异常处理语句结构的一部分,表示总是执行。
    finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提高垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用。

    Java中如何实现序列化,有什么意义?

    序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决对象流读写操作时可能引发的问题(如果不进行序列化可能会存在数据乱序的问题)。
    要实现序列化,需要让一个类实现Serializable接口,该接口是一个标识性接口,标注该类对象是可被序列化的,然后使用一个输出流来构造一个对象输出流并通过writeObject(Object)方法就可以将实现对象写出(即保存其状态);如果需要反序列化则可以用一个输入流建立对象输入流,然后通过readObject方法从流中读取对象。序列化除了能够实现对象的持久化之外,还能够用于对象的深度克隆。

    abstract,static,final三个特殊 关键字的用法

           abstract(抽象的): 主要是修饰类和方法,  并且abstract修饰的类要求有子类,父类不能实例化对象;

           static(静态的): 主要是修饰属性和方法,  并且static修饰后直接通过类名.格式来调用属性和方法;

           final(最终的): 主要修饰类,属性和方法.    并且final修饰的类要求不能有子类,可以该类能产生对象.

    Java中的编译器和解释器:

    编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。

    在Java中,这种供虚拟机理解的代码叫做字节码(即扩展名为.class的文件)。

    Java源代码—->编译器—->jvm可执行的Java字节码(即虚拟指令)—->jvm—->jvm中解释器—–>机器可执行的二进制机器码—->程序运行。 

    Java八种基本数据类型

    Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。 

    byte:

    • byte 数据类型是8位、有符号的,以二进制补码表示的整数;
    • 最小值是 -128(-2^7);
    • 最大值是 127(2^7-1);
    • 默认值是 0;
    • byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;
    • 例子:byte a = 100,byte b = -50。

    short:

    • short 数据类型是 16 位、有符号的以二进制补码表示的整数
    • 最小值是 -32768(-2^15);
    • 最大值是 32767(2^15 - 1);
    • Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;
    • 默认值是 0;
    • 例子:short s = 1000,short r = -20000。

    int:

    • int 数据类型是32位、有符号的以二进制补码表示的整数;
    • 最小值是 -2,147,483,648(-2^31);
    • 最大值是 2,147,483,647(2^31 - 1);
    • 一般地整型变量默认为 int 类型;
    • 默认值是 0 ;
    • 例子:int a = 100000, int b = -200000。

    long:

    • long 数据类型是 64 位、有符号的以二进制补码表示的整数;
    • 最小值是 -9,223,372,036,854,775,808(-2^63);
    • 最大值是 9,223,372,036,854,775,807(2^63 -1);
    • 这种类型主要使用在需要比较大整数的系统上;
    • 默认值是 0L;
    • 例子: long a = 100000L,Long b = -200000L。
      "L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。

    float:

    • float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;
    • float 在储存大型浮点数组的时候可节省内存空间;
    • 默认值是 0.0f;
    • 浮点数不能用来表示精确的值,如货币;
    • 例子:float f1 = 234.5f。

    double:

    • double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数;
    • 浮点数的默认类型为double类型;
    • double类型同样不能表示精确的值,如货币;
    • 默认值是 0.0d;
    • 例子:double d1 = 123.4。

    boolean:

    • boolean数据类型表示一位的信息;
    • 只有两个取值:true 和 false;
    • 这种类型只作为一种标志来记录 true/false 情况;
    • 默认值是 false;
    • 例子:boolean one = true。

    char:

    • char类型是一个单一的 16 位 Unicode 字符;
    • 最小值是 u0000(即为0);
    • 最大值是 uffff(即为65,535);
    • char 数据类型可以储存任何字符;
    • 例子:char letter = 'A';。
  • 相关阅读:
    在腾讯云上使用URLOS一键安装Discuz! Q
    共享容器——URLOS最新发布的一项超强功能
    在群晖NAS上运行URLOS之后竟然能安装Discuz! Q!!
    Discuz!Q回归,如何一键安装Discuz!Q
    Docker管理面板-URLOS(易用、高效、强大)
    CentOS下Subversion(SVN)的快速安装与配置
    通过URLOS安装Redis缓存为wordpress网站提速
    5分钟快速安装Redmine项目管理软件
    Python3+HTMLTestRunner+SMTP生成测试报告后发送邮件
    Python3+HTMLTestRunner生成html测试报告时报错HTMLTestRunner.py line 687, in generateReport  self.stream.write(output.encode('utf8'))
  • 原文地址:https://www.cnblogs.com/pzyin/p/7650538.html
Copyright © 2020-2023  润新知