Java基础知识
2021/6/4 12:23:37
本文主要是介绍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基础知识的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-26大厂数据结构与算法教程:入门级详解
- 2024-12-26大厂算法与数据结构教程:新手入门指南
- 2024-12-26Python编程入门指南
- 2024-12-26数据结构高级教程:新手入门及初级提升指南
- 2024-12-26并查集入门教程:从零开始学会并查集
- 2024-12-26大厂数据结构与算法入门指南
- 2024-12-26大厂算法与数据结构入门教程
- 2024-12-26二叉树入门教程:轻松掌握基础概念与操作
- 2024-12-26初学者指南:轻松掌握链表
- 2024-12-26平衡树入门教程:轻松理解与应用