1.Java相关简介:
(1)面向对象:依靠对象之间的交互来完成事情。在Java中,一切皆对象,编码的核心就是发现对象、找对象、用对象。所有的属性和行为一定都是归属于某个特定的对象,关注的都是对象本身。
Java的面向对象特性与C++相当,主要不同点在于多重继承。Java中取而代之的是更简单的接口概念,且与C++相比,Java提供了更丰富的运行时自省功能。
eg:面向对象和面向过程在描述狗吃屎的问题上:
面向对象:狗吃屎---->吃只是狗这个对象的一个行为。
面向过程:吃狗屎---->在C中主要关心的是吃这个方法的实现,对象不清晰。
(2)体系结构中立,可移植性比C++强很多
编译阶段是将*.java文件编译为*.class文件(不是给某个具体的操作系统执行的)。
*.class文件(二进制文件)是交给JVM(Java虚拟机)来执行的,就是一个程序,这个程序可以在多个平台上执行。
解释阶段是JVM读取class文件解释具体操作系统的机器码来执行。
JVM:Java虚拟机,Java最核心的实现,就是一个程序,用来将class文件具体在操作系统上运行起来。支持多种语言,理论上无论哪种编程语言,只要能将源代码编译为*.class代码,都能在JVM上解释运行。
(3)Java是一门半编译半解释型语言。
编译型语言:一次将所有待翻译的文字写完之后交给翻译软件,一次性生成所有翻译后的语言。类似现实生活中的翻译软件。
解释型语言:没有编译型语言效率高,一行行翻译执行,速度慢。类似现实生活中的翻译,口头翻译。
(4)JDK\JRE\JVM:
JDK:Java开发工具包,供程序员使用,包括了Java运行环境JRE(Java Runtime Envirnment)、一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。JDK=JRE+开发工具集(如编译器Javac等)
JRE:Java运行时环境,是运行基于Java语言编写的程序所不可缺少的运行环境。也是通过它,Java的开发者才得以将自己开发的程序发布到用户手中,让用户使用。JRE=JVM+JavaSE标准类库
JVM:Java虚拟机,运行Java代码,是整个Java实现跨平台的最核心的部分,所有的Java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。。
PS:
JVM∈JRE∈JDK
语句∈方法∈类∈源文件(扩展名为.java)
在一个源文件中只能有一个public修饰的类,且源文件名字必须与public修饰的类名字相同。
(5)
*.java:Java源文件,所有的Java源代码都在后缀名为.java的文件中。源文件中至少要包含一个类(class声明的称之为类)。
public class:主类。主类必须与源文件名称相同且一个源文件有且只有一个主类。
一般主方法存在于主类中。所有的方法和属性都在类中进行定义,包括主方法。
PS:要运行上面的HelloWorld.java代码,可以分两步:
第一步:编译阶段-->使用javac(Java编译器)对源文件(.java)进行编译,编译之后生成.class文件(字节码文件),面向JVM生成的,和具体操作系统与硬件无关。格式:javac+空格+主类名称+.java
第二步:解释阶段-->使用Java程序(Java解释器)将.class文件进行解释,翻译成具体操作系统线管的机器码进行执行。格式:java+空格+主类名称
2.(1)Java中的注释分为三种:
单行注释://注释内容(一般用在某一行具体代码之上,表示属性或这行代码的作用)
多行注释:/* */ (不推荐使用)
文档注释:/** 多行注释的内容 */ (一般文档注释用在方法和类声明之上,表示该类或方法的作用,使用javadoc可以解释所有的文档注释,生成java程序文档)
PS:注释只存在于编译阶段(源代码阶段),编译之后的class文件不存在任何注释信息。
PS:若需要将源码中某一行代码或多行代码注释起来,则选中相关的代码ctrl+/即可注释,再次选中使用ctrl+/即可取消注释。
(2)标识符:包含数字、字母、下划线_ 、$(这个虽然合法但不推荐使用,后面将内部类时,$--一边编译后标注内部类)。不能使用数字开头,也不能时关键字,且严格区分大小写。
PS:类名中,采用大驼峰命名法:每个单词的首字母大写,eg:Test HelloWorld
方法和属性中,采用小驼峰命名法:第一个单词全小写,从第二个单词(若存在)开始首字母大写,eg:int a=10; int personAge=20;
关键字:有Java语言提前定义好的、有特殊含义的标识符或保留字。
(3)字面常量:直接写出来的值都属于常量(值是一个确定的值,无法修改)。
常量:程序运行期间,固定不变的量称为常量。
(4)数据类型
Java中的数据类型分为两大类:8种基本数据类型,引用数据类型。
在Java中所有数据类型都有默认值(一定是类中定义的属性猜具备默认值),不是方法中的局部变量。
1字节(byte)=8bit。每个bit位就是一个二进制位数, 2^8多个数。在Java中有使用一个bit位要保存符号,所以会浪费一个bit位。
byte:[-128,127],-2^7~2^7-1
int:-2^31~2^31-1
long:-2^63~2^63-1
PS:String是一个类,是引用数据类型。
PS:所有的基本数据类型都有相关的包装类,就是将基本的数据类型转为类这个引用类,除了int(对应Integer)和char(对应Character)基本类除外,其它基本类的包装类都是首字母大写即可。因为基本数据类型无法进行对象化处理,所以就引入了包装类。
(5)变量:在程序运行过程中,内容可以改变的量。
强类型语言:定义一个量,必须同时规定该变量的数据类型是什么,值可以改变,但必须在该数据类型范围内更改。(C\C++\JAVA)
定义一个变量的语法:数据类型 变量名称=初始值;
PS:在定义boolean值时,真就是true,错就是false,不能用0或1。
1》整型变量:
int类型
定义时给出初始值;定义时不屑初始值,在使用前进行赋值。eg:
PS:
局部变量:在方法中定义的变量都属于局部变量,没有默认值,必须赋值后再使用。
只有在类中定义的变量才有默认值。
整型变量的保存范围:有两个常量分别表示整型的最大值和最小值。最大值为Integer(整型int的包装类).MAX_VALUE,最小值为Integer.MIN_VALUE。
PS:若字面量超出整型最大值,则要更换数据类型(即长整型)。若在运算时超出范围,观察溢出问题。
PS:在Java中,无论什么操作系统、什么硬件,int统一都是4字节,默认值都是0.
PS:无论在什么操作系统中、什么版本的JVM数据类型的大小都是一致的。
PS:基本的数据类型都有相关的包装类,就是将基本数据类型转换为类这个引用数据类型。
长整型
当数据的大小超出了int的保存范围就会出现精度丢失问题(数据溢出问题)-->数要么存不了报错,要么存的是个错误的值。
错误的值:进行数学运算时发生溢出问题。
编译时报错:直接使用长整型字面量赋值给int时。eg:
当对应的数据类型保存不下这个数值时,我们就需要更换数据类型-->换一个保存范围更大的类型。长整型变量long 8字节,工厂场景下已经足够用。
一般来说,由于数字字面量默认时int,为了区分int字面量还是long字面量,一般使用正数字面量赋值给long类型,加上l或L作为结尾。eg:(该结果为11)
短整型(一般使用较少)
字节型
byte ,1字节,单位KB,保存范围-128~127
2》浮点型
double类型
关于某些数值,double输出的偏差问题。(C和Java内存布局都采用IEEE 754标准,尝试使用整数来模拟小数,因此在小数部分有一定偏差。float-->一般只关注小数点6位之内的小数,double-->一般只关注小数点12位之内的小数(保证正确)。)
单精度浮点数float,4字节,对应包装类为Float.
Java中,浮点数字面量默认为double类型,要想表示float单精度字面量,在结尾加f/F。
3》字符型变量
char ,2字节,对应包装类为Character。使用单引号‘’字面量称为字符字面量,使用char类型保存。
在Java中,char采用Unicode编码,16进制编码(16bit),2字节,支持地球上所有语言。只要是char类型语言,无论保存的时什么语言字符,统一都是2字节。而C默认采用ASCII字符集。eg :
4》布尔型
boolean,对应包装类为Boolean,默认值为false,只有两值true 和false。(真就是true,假就是false,不能用1或0来表示)