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运行时数据区
-
第一块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):
-
第六块本地方法堆栈(Native Method Stacks)
1、JVM采用本地方法堆栈来支持native方法执行,此区域于存储每个native方法调用的状态。
四、JVM周期
- JVM在Java程序开始执行的时候,它才运行,程序结束的时它就停止。
- 一个Java程序会开启一个JVM进程,如果一台机器上运行三个程序,那么就会有三个运行中的JVM进程。
- JVM中的线程分为两种:守护线程和普通线程
- 守护线程是JVM自己使用的线程,比如垃圾回收(GC)就是一个守护线程。
- 普通线程一般是Java程序的线程,只要JVM中有普通线程在执行,那么JVM就不会停止。
- 权限足够的话,可以调用exit()方法终止程序。
四、java运行的过程
Java的JDK1.8新增特性
java的基本数据类型
一、java有两大数据类型
内置数据类型:内置数据类型是java语言本身自带的八种基本类型
引用数据类型:引用式数据类型是需要导入
二、内置数据类型:
-
byte:
-
byte:数据类型是8位、有符号的、以二进制补码表示整数
-
最小值是-128(-2^7)
-
最大值是127(2^7-1)
-
默认值是0
-
例子:short s = 1000, short r = -20000
-
-
int:
-
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
-
-
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):
封装就是指属性私有化
隐藏具体属性和实体细节,仅对外开发接口
控制程序中属性的访问安全级
目的:增强数据安全性,不能让其他用户随意访问和修改数据,简化编程,使用者不必在意具体实现细节,而只是通过外部接口即可访问类的成员
2、继承(Extend):
继承是指将多个相同的属性和方法提取出来,新建一个父类,在java中只能继承一个父类,且只能继承访问权限非private属性和方法,
目的:代码复用
3、多态:
多态可以分为两种:设计时多态、运行时多态
设计时多态:
即重载Overload),是指java允许方法名相同而参数不同(返回值可以相同可以不同),同一个类中允许存在一个或者多个以上的同名函数,只要参数类型个数不同即可。
运行时多态:
即重写(Override)必须是在继承体系中,子类重写父类方法,JVM运行时根据调用该方法的类型决定调用那个方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。