查看: 1581|回复: 0

[Java学习] java基础-1

发表于 2018-1-18 14:07:30
java类初始化顺序
  • 父类静态变量
  • 父类静态代码块
  • 子类静态代码块
  • 父类非静态变量
  • 父类非静态代码块
  • 父类构造函数
  • 子类非静态变量
  • 子类非静态代码块
  • 子类构造函数
    注意:没有则跳过
java运行过程
java遵循先编译后运行的过程,首先通过javac命令将.java源文件编译为.class字节码文件,之后通过java命令去启动jvm,由jvm来加载.class文件。
jdk,jre,jvm的关系
  • JDK:java开发工具包,包含编写java程序所必须的编译、运行等开发工具以及JRE。
  • JRE:Java运行环境,提供了运行Java应用程序所必须的软件环境,包含有Java虚拟机(JVM)和丰富的系统类库。
  • JVM:Java虚拟机,提供了字节码文件(.class)的运行环境支持.
内存管理
JVM会将申请到的内存从逻辑上划分为三个区域:堆、栈、方法区.
堆:用于存储使用new关键字所创建的对象以及对象的属性成员变量。
栈:用于存储程序运行时在方法中声明的所有的局部变量。
方法区:用于存放类的各种信息(包括方法)都在方法区存储。
java中实现多态的机制
靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。
抽象类和接口
  • 含有abstract修饰符的class即为抽象类,抽象类不能创建的实例对象。含有抽象方法的类必须定义为abstract class.
  • 接口可以说成是一种特殊的抽象类,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。
  • 下面比较一下两者的语法区别:
    • 抽象类可以有构造方法,接口中不能有构造方法。
    • 抽象类中可以有普通成员变量,接口中没有普通成员变量
    • 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
    • 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然eclipse不报错,但也不行,默认类型子类不能继承),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型.
    • 抽象类中可以包含静态方法,接口中不能包含静态方法
    • 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
    • 一个类可以实现多个接口,但只能继承一个抽象类,接口不可以实现接口,但可以继承接口并且可以继承多个接口,用逗号隔开.

匿名内部类
  • 若想创建一个类(子类)的对象,并且对象只被创建一个,此时该类不必命名,称 之为匿名内部类
  • 匿名内部类中访问外部的变量,该变量必须是final的.
StringBuilder这个类常用的处理字符串的方法
  • append(String str):追加字符串;
  • insert (int dstOffset,String s):插入字符串;
  • delete(int start,int end):删除字符串;
  • replace(int start,int end,String str): 替换字符串;
  • reverse():字符串反转.
包装类的自动拆装箱
  • 将基本类型转换为包装类时,我们可以调用包装类的一个静态方法valueOf():
    Integer i = Integer.valueOf(1);
    Double d = Double.valueOf(1.1):
    将包装类转换为基本类型时,我们可以使用包装类的方法xxxValue()方法
    Integer i = new Integer(1);
    int n = i.intValue();
    Double d = new Double(1.1);
    double dn = d.doubleValue();
  • 通过new关键字在堆内存中创建了2个值相等的对象,所以==比较为false,内容相同equals比较为true
  • 在包装类的内存中有一块区域,缓存着Integer的byte范围内的值(-128~127),如果未超出此范围,则直接在该缓存区取值,并不会在堆中创建新对象,如果超出此范围则会在堆内存中创建新对象.
    如果i=128超出了取值范围,双等号比较为false,内容相同equals比较为true
    注意:如果i=127,通过new关键字创建的对象也是两个对象,通过valueOf()创建的对象为同一个对象.
重载的方法是否可以改变返回值的类型
  • 如果几个重载的方法的参数列表不一样,它们的返回者类型当然也可以不一样。
  • 如果两个方法的参数列表完全一样,是否可以让它们的返回值不同来实现重载Overload。这是不行的,我们可以用反证法来说明这个问题,假设类中有两个名称和参数列表完全相同的方法,仅仅是返回类型不同,java就无法确定编程者倒底是想调用哪个方法了,因为它无法通过返回结果类型来判断。
内存操作流
ByteArrayInputStream:将内容写到内存中 CharArrayReader
ByteArrayOutputStream:将内存中的数据写出 CharArrayWriter
同步和异步
如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。
forward 和redirect的区别
  • forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
  • redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。
值传递
  • 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递
    • 是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

垃圾回收的优点和原理
  • java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有”作用域”的概念,只有对象的引用才有”作用域”。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。
  • 回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。
JVM加载class文件的原理机制
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。
创客学院全新视频:www.makeru.com.cn
java学习交流群:587131012



回复

使用道具 举报