Java教程

Java基础知识

本文主要是介绍Java基础知识,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Java基础知识点

Java为什么可以跨平台?

​ 因为java程序编译后的代码不是能被硬件系统直接运行的代码,而是一种”中间码“----字节码。然而不同硬件平台上安装有不同的Java虚拟机(Jvm),

​ 由JVM来把字节码在“编译”成所对应的硬件平台能够执行的代码,因此对于Java编程着来说,就不用考虑硬件平台是什么,因为它有虚拟机(JVM),JAVA程序不是

​ 直接在电脑上运行的,是在虚拟机上进行的,每个系统平台都有属于自己的虚拟机(JVM),所以Java可以跨平台。

​ 正因为java程序运行在JVM上,所以就不经修改,就能在不同平台上的JVM访问,UNIX在UNIX中有自己的JVM虚拟机,Linux在Linux中有自己的JVM虚拟机,Windows上有自己的JVM虚拟机。

什么是JVM?

一、定义:

​ Java Virtual Machine -java 程序的运行环境(java二进制字节码的运行环境)

二、好处:
  • 一次编写,到处运行
  • 自动内存管理,垃圾回收功能
  • 数组下标越界检查
  • 多态
三、JVM概念
  • jvm即Java Virtual Machine java虚拟机。它是由软件技模拟出计算运行的一个虚拟计算机
  • java虚拟机主要有字节码指令集、寄存器、栈、垃圾回收堆和存储方案域构成。
四、JVM运行时数据区
  • 第一块PC寄存器:PC寄存器是用于存储每个线程下一步执行的JVM指令,如该方法为native的,则PC寄存器中不存储任何信息。

  • 第二块JVM栈: JVM栈是线程私有的,每个线程创建的同时都会创建JVM栈,JVM栈中存放为当前线中局部基本类型的变量(java中的八种数据类型,Boolean、char、Byte、short、int、long、float、double)、部分的返回结果以及Stack Frame,非基本类型的对象在JVM栈上仅存放一个指向堆上的地址。

  • 第三块堆(Heap): 它是JVM用来存储对象实例以及数组值的区域,可以认为Java中所用通过new创建的对象的内存都在此分配,Heap中的对象内存需要等待GC进行回收。

  • 第四块方法区域(Method Area):

    ​ 1、在Sun JDK中这块区域对应的为PermanetGeneration,又称为久代。

    ​ 2、方法区域存放了所加载的类信息(名称,修饰符等)、类中的静态变量、类中定义为final类型的常量、类中的Field信息、类中的方法信息,当开发 人员在程序中通过Class对象中的getName,isInterFace等方法来获取信息时,这些数据都来源于方法区域,同时方法区域也是全局共享的,在一定的条件下它也会被GC,当方法区域需要使用的内存超过其允许的大小时,会抛出OutOfMemory的错误信息。

  • 第五块运行时的常量池(Runtime Constant Pool):

    ​ 1、存放为类中的固定的常量信息、方法和Field的引用信息等,其空间从方法区域中分配。

  • 第六块本地方法堆栈(Native Method Stacks)

    ​ 1、JVM采用本地方法堆栈来支持native方法执行,此区域于存储每个native方法调用的状态。

四、JVM周期
  • ​ JVM在Java程序开始执行的时候,它才运行,程序结束的时它就停止。
  • ​ 一个Java程序会开启一个JVM进程,如果一台机器上运行三个程序,那么就会有三个运行中的JVM进程。
  • ​ JVM中的线程分为两种:守护线程和普通线程
  • ​ 守护线程是JVM自己使用的线程,比如垃圾回收(GC)就是一个守护线程。
  • ​ 普通线程一般是Java程序的线程,只要JVM中有普通线程在执行,那么JVM就不会停止。
  • ​ 权限足够的话,可以调用exit()方法终止程序。
四、java运行的过程

Java的JDK1.8新增特性

  • Lambda表达式
  • 函数式接口
  • 方法引用和构造器调用
  • Stream API
  • 接口中的默认方法和静态方法
  • 新时间日期API

java的基本数据类型

一、java有两大数据类型

​ 内置数据类型:内置数据类型是java语言本身自带的八种基本类型

​ 引用数据类型:引用式数据类型是需要导入

二、内置数据类型:
  • byte:
    • byte:数据类型是8位、有符号的、以二进制补码表示整数

    • 最小值是-128(-2^7)

    • 最大值是127(2^7-1)

    • 默认值是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,233,372,036,854,775,808(-2 ^ 63)

    • 最大值是 9,233,372,036,854,775,807(2 ^ 63 - 1)

    • 这种类型主要使用在比较大的整数的系统上

    • 默认值是 0L;

    • 例子:long a = 100000L, long b = -200000L

    "L"理论上不分大小写,但是若写成"I"容易与数字"1混淆,不容易分辨。所以最好大写。

  • float:
    • float 数据类型是单精度、32位、符合IEEE754标准的浮点数;

    • float 在存储大型浮点数组的时候可以节省内存空间

    • 默认值是 0.0f

    • 浮点数不能用来表示精度的值,如货币;

    • 例子: float f1 = 234.5f

    double
    • double 数据类型是双精度、64 位、符合 IEEE 754 标准的浮点数;

    • 浮点数的默认类型为 double 类型;

    • double类型同样不能表示精确的值,如货币;

    • 默认值是 0.0d

    • 例子:

    • double   d1  = 7D ;
      double   d2  = 7.; 
      double   d3  =  8.0; 
      double   d4  =  8.D; 
      double   d5  =  12.9867; 					
      
  • boolean:
    • boolean数据类型表示一位的信息;

    • 只有两个取值:true 和 false;

    • 这种类型只作为一种标志来记录 true/false 情况;

    • 默认值是 false

    • 例子:boolean one = true。

  • char
    • char 类型是一个单一的 16 位 Unicode 字符;
    • 最小值是 \u0000(十进制等效值为 0);
    • 最大值是 \uffff(即为 65535);
    • char 数据类型可以储存任何字符;
    • 例子:char letter = 'A';。
    默认值

三、引用类型:
  • 引用类型就是相应的封装类,如要使用需要引入,所以称为应用类型,常用的引用类型有以下几种
    • Integer、Short、Long、Byte、Float、Double、Character
四、JAVA线程理解
  • 用户线程(ULT):
    • 在用户中实现的线程,不依赖操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户进制。不需要用户态/核心切换 ,速度快。操作系统内核不知道多线程的存在,因此一个线程阻塞将使整个进程(包括它的所有线程)阻塞。
  • 内核线程(KLT):
    • 线程的所有管理操作由系统内核完成,内核保存线程的状态和上下信息,线程阻塞不会引起进程阻塞。在多处理系统上,内核可以分派属于同一进程的多个线程在多个处理运行。线程的创建、调度和管理由内核完成,相对ULT要慢,但比进程的创建和管理操作要快。
五、java权限修饰符权限图解

六、Java面向对象三大特征
1、封装(Encapsulation):

​ 封装就是指属性私有化

​ 根据需要提供的setter和getter方法来访属性

​ 隐藏具体属性和实体细节,仅对外开发接口

​ 控制程序中属性的访问安全级

目的:增强数据安全性,不能让其他用户随意访问和修改数据,简化编程,使用者不必在意具体实现细节,而只是通过外部接口即可访问类的成员

2、继承(Extend):

​ 继承是指将多个相同的属性和方法提取出来,新建一个父类,在java中只能继承一个父类,且只能继承访问权限非private属性和方法,

​ 子类可以重写父类中的方法,命令与父类中同名的属性

目的:代码复用

3、多态:
多态可以分为两种:设计时多态、运行时多态
设计时多态:
即重载Overload),是指java允许方法名相同而参数不同(返回值可以相同可以不同),同一个类中允许存在一个或者多个以上的同名函数,只要参数类型个数不同即可。

运行时多态:
即重写(Override)必须是在继承体系中,子类重写父类方法,JVM运行时根据调用该方法的类型决定调用那个方法。

目的:增加代码活跃性

这篇关于Java基础知识的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!