Java基础

Posted zmy98

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础相关的知识,希望对你有一定的参考价值。

java基础

基本数据类型

  • byte/8----------------------->Byte

  • char/16---------------------->Character

  • short/16--------------------->Short(java8中缓存池的默认大小-128~127)

  • int/32------------------------>Integer(java8中缓存池的默认大小-128~127)

  • float/32---------------------->Float

  • long/64---------------------->Long

  • double/64------------------->Double

  • boolean/~-------------------->Boolean

    boolean只有两个值:true、false,可以使用1bit来存储,但是具体大小没有明确规定。JVM会编译时期将boolean类型的数据转换为int,使用1来表示true,0来表示false。JVM支持boolean数组,但是是通过读写byte数组来实现的
    

String

  • String被声明为final,因此不可被继承,不可变。(Interger等包装类也不能被继承)
    • 在java8中,使用char数组存储数据
    • 在java9中,使用byte数组存储字符串,同时使用coder来标识使用了哪种编码
不可变的好处:
1、可以缓存hash值
2、String tool的需要
3、安全性
4、线程安全
  • String,StringBuffer,StringBuilder

    • 可变性

      • String不可变

      • StringBuffer和StringBuilder可变

    • 线程安全

      • String不可变,线程安全
      • StringBuilder线程不安全
      • StringBuffer线程安全,内部使用synchronilder

运算

  • java的参数是以值传递的形式传入方法中,而不是引用传递
  • java不能隐式执行向下转型,因为这会使得精度降低
  • 使用+=或者++运算符会执行隐式类型转换

关键字

  • final

    • 数据
      • 对于基本数据类型,final使数值不变
      • 对于引用类型,final使引用不变,引用对象本身可以修改
    • 方法
      • 声明方法不能被子类重写
      • 声明类不允许被继承
  • static

    • 静态变量
      • 静态变量:又称为类变量,也就是说这个变量属于类的,类所有的实力都共享静态变量,可以直接通过类名来访问它。静态变量在内存中只存在一份
      • 实例变量:每创建一个实例就会产生一个实例变量,它与该实例同生共死
    • 静态方法
      • 静态方法在类加载的时候就存在了,它不依赖于任何实例,所以静态方法必须有实现,也就是说它不能是抽象方法
      • 只能访问所属类的静态字段和静态方法,方法中不能有this和super关键字,因为这两个关键字与具体对象关联
    • 静态语句块
      • 静态语句块在类初始化时运行一次
    • 静态内部类
      • 非静态内部类依赖于外部类的实体类,也就是说需要先创建外部类实例,才能用这个实例去创建非静态内部类,而静态内部类不需要
public class A{
    private int x;    //实例变量
    private static int y;  //静态变量
    
    public static void  func1(){
        int a = y;
        //int b = x;    只能访问静态字段和静态方法
    }
    //静态语句块
    static {
        System.out.println("hello word");
    }
    //静态内部类
    static class func2(){
        
    }
    
}

public abstract B{
    public static void func1(){
        //静态方法必须有实现
    }
}


初始化顺序:
    父类(静态变量,静态语句块)
    子类(静态变量,静态语句块)
    父类(实例变量,普通语句块)
    父类(构造函数)
    子类(实例变量,普通语句块)
    子类(构造函数)

反射

每个类都有一个Class对象,包含了与类有关的信息。当编译一个新类时,会产生一个同名的.class文件,该文件内容保存着Class对象。

类加载相当于Class对象的加载,类在第一次使用时才动态的加载到JVM中。也可以使用Class.forName("com.mysql.jdbc.Driver")这种方式来控制类的加载,该方法会返回一个CLass对象。

反射可以提供运行时的类信息,并且这个类可以在运行时才加载进来,甚至在编译时期该类的.class不存在也可以加载进来。

优点:

  • 可扩展性:应用程序可以利用全限定名创建可扩展的实例,来使用来自外部的用户自定义类
  • 类浏览器和可视化开发环境
  • 调试器和测试工具

缺点:

  • 性能开销:反射涉及到了动态类型的解析,所以JVM无法对这些代码进行优化。因此反射的效率要比那些非反射操作低得多。
  • 安全限制
  • 内部暴漏

以上是关于Java基础的主要内容,如果未能解决你的问题,请参考以下文章

JSP 基础语法

Java基础:封装

[vscode]--HTML代码片段(基础版,reactvuejquery)

JSP开发中的基础语法

Java基础之方法的调用重载以及简单的递归

Java基础——JSP