java基础知识

  1. Java基础概念
    1. Java:
      1. 是面向对象的语言,都支持封装、继承和多态
      2. 继承:
        1. Java的类是单继承的,
        2. Java中类不可以多继承,但是!!!接口可以多继承
      3. 内存:
        1. Java有自动内存管理机制,不需要程序员手动释放无用内存
    2. Java中值传递和引用传递:
      1. 值传递:
        1. 对象被值传递,意味着传递了对象的一个副本,即使副本被改变,也不会影响源对象。
      2. 引用传递:
        1. 对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象的改变会反映到所有的对象上。
    3. 创建对象的4种方式:
      1. new语句创建对象
      2. 使用反射创建对象
      3. 调用对象的clone()方法创建对象
      4. 使用反序列化,调用java.io.ObjectInputStream对象的readObject()方法
    4. 内部类可以访问创建它的外部类对象的成员,包括私有成员
    5. JDK中常用的包:
      1. java.lang:唯一一个不需要导入就可以用的包,基础类
      2. java.io
      3. java.net
      4. java.util
      5. java.sql
    6. JDK,JRE和JVM的联系和区别:
      1. JDK:
        1. java开发工具包,是java开发环境的核心组件,并提供编译、调试和运行一个java程序所需要的所有工具,可执行文件和二进制文件,是一个平台特定的软件
      2. JRE:
        1. java运行时环境,是JVM的实施实现,提供了运行java程序的平台。JRE包含了JVM,但是不包含java编译器/调试器之类的开发工具
      3. JVM
        1. java虚拟机,当我们运行一个程序时,JVM负责将字节码转换为特定机器代码,JVM提供了内存管理/垃圾回收和安全机制等。这种独立于硬件和操作系统,正是java程序可以一次编写多处执行的原因
      4. 区别
        1. JDK用于开发,JRE用于运行java程序
        2. JDK和JRE中都包含JVM
        3. JVM是java编程语言的核心并且具有平台独立性。
  2. 面向对象编程:
    1. 覆盖和重载
      1. 覆盖:
        1. 子类对父类方法的一种重写,只能比父类抛出更少的异常,访问权限不能比父类的小。
        2. 被覆盖的方法不能是private的,否则只是在子类中重新定义了一个方法
      2. 重载:
        1. 表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数、顺序和类型不同)
        2. 重载的三个条件:参数类型不同、参数个数不同、参数顺序不同
    2. 构造器:
      1. 构造函数不可以被继承,所以不可以覆盖,只可以重载
      2. 一个类,如果构造函数被private修饰,则为不明确的构造函数,即其不可以被子类继承(原因下边解释)
    3. java的初始化顺序:
      1. 初始化父类中的静态成员变量和静态代码块
      2. 初始化子类中的静态成员变量和静态代码块
      3. 初始化父类的普通成员变量和代码块,再执行父类的构造方法
      4. 初始化子类的普通成员变量和代码块,再执行子类的构造方法
      5. (如果父类构造函数是私有的,则不可以被执行,所以解释了为什么父类不可以被继承)
    4. equals和hashcode的关系:
      1. 当两者equals时,则hash code 值一定相同,反之不成立。
  3. 字符串:
    1. String s = new String("xyz");创建了几个字符串对象?
      1. 答:两个对象,一个是静态存储区的“xyz”,一个是用new创建在堆上的对象。
    2. String s = "Hello" ;s = s+"world";则原始的String对象中的内容到底变了没有?
      1. 没有,String是不可变类。在这段代码中,s原先指向一个String对象,内容是hello,然后我们对s进行了+操作。s指向了另外一个String对象,内容是hello world。原来的那个对象还在内存,只不过引用变量s不再指向它了。
    3. String s = “a”+"b"+"c"+"d";共创建了多少个对象?
      1. 答案:1个对象。由于编译器对字符串常量直接相加的表达式进行了优化。编译时即可去掉+号,直接将其编译成一个常量相连的结果。
    4.  String:字符串常量

       StringBuffer:字符串变量,线程安全的;

       StringBuilder:字符串变量,线程非安全的;


    5. 当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。

       


    6.  对于三者使用的总结: 1.如果要操作少量的数据用 = String;

                              2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder;

                              3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值