zoukankan      html  css  js  c++  java
  • 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';。
  • 相关阅读:
    jvm基本结构和解析
    多态的意思
    java中对象的简单解读
    double类型和int类型的区别
    python 解析xml文件
    win10不能映射Ubuntu共享文件
    Qt程序打包
    Ubuntu boot分区文件误删,系统无法启动,怎么解
    ubuntu Boot空间不够问题“The volume boot has only 5.1MB disk space remaining”
    Ubuntu 分辨率更改 xrandr Failed to get size of gamma for output default
  • 原文地址:https://www.cnblogs.com/pzyin/p/7650538.html
Copyright © 2011-2022 走看看