Java基础知识点01-20(持续更新~)

简介: Java基础知识点01-20(持续更新~)

1、JDK与JRE

JDK

我们把Java编程语言、Java API类库和Java虚拟机三部分统称为JDK(Java Development Kit),JDK包括:JRE,Java基本类库,Java开发工具如编辑器、调试器等。JDK是用于支持Java程序开发的最小环境。


JRE

我们把Java API类库中的Java SE API 子集和Java虚拟机两部分统称为JRE(Java Runtime Environment),JRE是支持Java程序运行的标准环境。

二者区别与联系

JDK范围涵盖JRE,JRE是JDK的子集。如果仅仅是运行Java程序,用户计算机仅需配置JRE;如果用户想要自己开发Java程序,那么则需要安装配置JDK。

2、JVM

机器与编译程序之间一层抽象的虚拟机器,在任何平台上都提供给编译程序一个共同的接口,编译程序只需要面向虚拟机,由解释器将虚拟机代码转换为特定系统的机器码执行。


3、Java与C++的区别

  1. Java提供了对内存的自动垃圾回收,程序员无需在程序中进行分配、释放内存的操作;
  2. Java去除了指针,用诸如引用的方法来代替,避免了赋值语句与逻辑运算语句混淆;
  3. Java没有类的多重继承,但有接口的多重继承。


4、声明变量

  1. 指定在内存中分配空间的大小;
  2. 规定这个变量所能接受的运算。


5、Java中的数据类型

基本数据类型

数值型

整数类型(byte 8位,short 16位,int 32位,long 64位)

浮点类型(float 32位,double 64位)

字符型(char 16位)

布尔型(boolean 1位)

引用数据类型

类(class)

接口(interface)

数组(array)


6、Unicode编码

Java中默认采用的编码方式是Unicode编码,是一种十六进制编码,可以表示世界上任意一种文字信息。所以Java中的单个char可以保存中文字符(2字节),而在C/C++中,中文字符只能当作字符串处理。


7、短路逻辑运算

&&、|| ,先对左边的语句进行判断,符合运算符要求后再判断右边语句,否则直接退出运算。

8、null值

基本数据类型有默认值,无法将null赋值给基本数据类型变量。

9、封装、继承与多态

封装

封装是一种信息隐蔽技术,使数据和加工该数据的方法封装为一个整体,以实现独立性很强的模块,使用户只能看到对象的外特性(对象能接收哪些消息,具有哪些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者与对象的使用者分开,使用者不必知晓其行为实现的细节,只需使用设计者提供的消息来访问对象。

良好的封装可以提高代码的模块化程度,防止对象之间的不良的相互影响,使程序达到高内聚(许多功能尽量在类内部独立完成,不让外部干预),低耦合(提供给外部尽量少的方法调用)的终极目标。


继承

子类共享其父类数据和方法的机制,可以对父类进行扩展,是我们非常方便地复用以前的代码。

多态

对象根据所接收的消息而做出动作,不同的对象接收相同的消息会做出不同的动作。

在Java中,分为方法的多态性与对象的多态性。


方法的多态性

重载与重写

重载是指两个方法具有相同的方法名,但是入参的个数或类型或顺序不同,那么传入参数时会调用相应的方法;

重写是指子类继承父类时,拥有与父类方法的入参及返回值类型完全相同的方法,但子类的该方法接收消息时会执行子类的方法;


对象的多态性

对象的多态性主要体现在父子类对象之间的相互转型。

10、栈内存与堆内存

在Java中,栈是由编译器自动分配和释放的一块内存区域,主要用于存放一些基本数据类型的变量,指令代码,常量及对象句柄(对象的引用地址)。


栈内存的操作方式类似于数据结构中的栈,优势在于它的存取速度较快,仅次于寄存器,栈中的数据还可以共享。缺点表现在栈中的数据大小与生存期必须是确定的,缺乏灵活性。


堆是一个程序运行动态分配的内存区域,在Java中,构建对象所需要的内存从堆中分配,放弃分配方式类似于链表。堆内存在使用完毕后,由垃圾回收器隐式回收。这一点上与C++不同,C++中堆内存的分配和回收都是显式的,由用户负责,如果用户申请了堆内存而在使用后忘记释放,则会产生“内存溢出”问题–可用内存存在,而其他用户无法使用。堆的优势在于动态分配内存大小,按需分配,其生存期也不必事先告诉编译器。在使用完毕后,Java的垃圾收集器会自动收走这些不再使用的内存块。其缺点为,由于要在运行时动态分配,相比于栈内存,存取速度较慢。


由于栈内存较小,如果不慎耗尽,则产生堆栈溢出 Stack Overflow问题。


堆内存使用不当则会产生内存碎片。回收堆内存时可能产生一些小块但不连续的内存,从而导致用户申请一块较大的堆内存时,虽然可用内存总和够大,但由于不连续导致申请失败。


11、final关键字的使用

  1. 使用final修饰的类无法被继承;
  2. 使用final修饰的ff无法被子类重写;
  3. 使用final修饰的变量无法被修改,即为常量。


12、使用final关键字的好处

  1. 使用final可以提升性能,JVM和Java应用都会缓存final变量;
  2. final变量可以安全地在多线程环境下共享,不需要额外的同步开销;
  3. 使用final关键字,JVM会对方法、变量及类进行优化;
  4. 可以创建不可变类(如String)。


13、抽象类

1.抽象类和抽象方法都必须用abstract关键字修饰;

2.抽象类不能实例化,不能直接用new关键字去产生对象;

3.抽象类定义抽象方法时只需声明,不需实现;

4.含有抽象方法的类必须被声明为抽象类,抽象类的子类必须重写抽象类中的所有抽象方法才能够实例化,否则这个子类仍然是抽象类。

5.抽象类中可以有构造方法,但只能在子类中调用,子类实例化对象时首先默认调用父类的构造方法,再调用子类的构造方法;

6.抽象类不能被final修饰;

7.外部抽象类不能使用static关键字修饰,但内部抽象类可以被static关键字修饰,使用static关键字修饰的内部抽象类表示一个外部类。


14、接口

  1. 接口中的数据成员必须初始化,且均为常量,常见的是全局变量;

2.接口中不能像抽象类一样定义普通方法,所有方法必须全为抽象方法;

3.接口中允许定义default方法;

4.接口必须有子类,子类可以同时实现多个接口;

5.接口的子类(如果不是抽象类)必须重写接口中的全部抽象方法;

6.接口与一般类一样,本身也具有数据成员(final可省略)与方法(abstrat可省略)


15、static关键字的使用

1.使用static关键字修饰属性:静态属性,类的公共属性,可直接用类名访问;

2.使用static关键字修饰方法:静态方法,可由类名直接调用;

注意:静态方法与非静态方法都可以使用static属性,但静态方法不能调用非静态属性!

3.static 主方法:Java虚拟机需要调用类的main()方法,所以该方法的访问权限必须是public,又因Java虚拟机在执行main()方法时不必创建对象,因此该方法必须是static的。该方法接受一个String类型的数组参数,该数组中保存了执行Java命令时传递给所运行的类的参数。


16、内部类

  1. 提供了更好的封装,把内部类隐藏在外部类之内,不允许同一个包中的其他类访问内部类;
  2. 内部类成员可以直接访问外部类的私有数据,但外部类不能访问内部类的实现细节,如成员变量;
  3. 匿名内部类适合用于创建那些仅需要创建一次的类;
  4. 使用static关键字修饰的内部类属于外部类本身,也就是外部类;


17、匿名对象

匿名对象使用一次后,就会被Java的垃圾回收器回收。

18、System类

Java不支持全局方法和全局变量,Java设计者将一些系统相关的重要方法和变量收集到了一个统一的类中,这就是System类。


System类中所有的成员都是静态的。


exit(int status)方法,提前终止JVM的运行;

currentTimeMillis方法,返回自1970年1月1日0时0分0秒起至今以ms为单位的时间,这是一个long类型的大数值;

getProperties方法获得当前虚拟机的环境属性。


19、RunTime类

程序运行时,在每一个JVM进程之中都会存在唯一一个Runtime类的实例化对象。这是一个明显的单例设计模式,将构造方法私有化了。在类内部存在一个static定义的方法,用于取得本类的实例化对象。

public static Runtime getRuntime();

取得Runtime类的实例化对象后,可以获得一些内存信息:


最大可用内存数:public long maxMemory();

总共可用内存数:public long totalMemory();

空闲内存数:public long freeMemory();

如果程序之中出现过多垃圾,则会影响性能,此时可以清除垃圾:


public void gc()。


20、正则表达式

public boolean matches(String regex) 将字符串与正则表达式匹配验证;

public String replaceAll(String regex, String replacement) 按正则全部替换;

public String replaceFirst(String regex, String replacement) 按正则替换首个;

public String[] split(String regex) 按指定正则拆分;

public String[] split(String regex, int limit) 按指定正则拆分为指定长度的字符串数组;

目录
相关文章
|
9天前
|
安全 Java 编译器
JAVA-多线程知识点总结(二)
JAVA-多线程知识点总结(二)
|
1月前
|
Java 程序员 Windows
【Java知识点详解 10】为何要配置环境变量,35岁老年程序员的绝地翻身之路
【Java知识点详解 10】为何要配置环境变量,35岁老年程序员的绝地翻身之路
|
1月前
|
Java 程序员
Java this关键字详解(3种用法),Java程序员面试必备的知识点
Java this关键字详解(3种用法),Java程序员面试必备的知识点
|
9天前
|
存储 算法 NoSQL
JAVA—IO流知识点总结
JAVA—IO流知识点总结
|
9天前
|
存储 前端开发 Java
JAVA-反射知识点总结
JAVA-反射知识点总结
|
9天前
|
设计模式 安全 Java
JAVA-多线程知识点总结(三)
JAVA-多线程知识点总结(三)
|
9天前
|
Java 调度
JAVA-多线程知识点总结(一)
JAVA-多线程知识点总结(一)
|
20天前
|
SQL 前端开发 Java
苍穹外卖》电商实战项目(java)知识点整理(下)
苍穹外卖》电商实战项目(java)知识点整理(下)
|
20天前
|
Java 应用服务中间件 开发工具
苍穹外卖》电商实战项目(java)知识点整理
苍穹外卖》电商实战项目(java)知识点整理
|
1月前
|
Java 数据库连接 数据安全/隐私保护
springBoot集成token认证,最全Java面试知识点梳理
springBoot集成token认证,最全Java面试知识点梳理