Skip to content

Java相关概念

1475字约5分钟

java

2024-10-24

编程语言:编译型、解释型

编译型:程序可在操作系统上直接执行

解释型:程序的执行需要解释器(解释环境),跨平台易移植

JDK、JRE、JVM的区别

img

简易图

查看源图像

全图

JVM

JVM是JRE的一部分,是虚拟出来的一台计算机.通过实体计算机仿真各种计算功能来实现,JVM有自己完善的硬件架构,如处理器,堆栈,寄存器等,还有相应的指令集.JVM是Java跨平台的核心,Java程序通过JVM的跨平台,从而使Java程序跨平台.Java程序首选会被编译成字节码文件(.class),JVM的核心任务就是解释字节码文件(.class)并映射到真实CPU指令集或者系统调用.JVM不关系上层Java程序,只关系字节码(.class).

JRE

JRE是Java运行环境,所有Java程序必须依赖JRE才能运行.只有JVM是不能运行字节码文件的(.class),因为解释的字节码的时候需要lib库. JRE里面有两个文件夹bin/,lib/bin/就是JVM,lib就是JVM所需要库。JVM+lib=JRE

JDK

JDK是Java的核心,包含运行Java运行环境(JRE)和一些Java工具及Java基础类库 。

JDK提供的工具

appletviewer.exe*    java-rmi.exe*  jrunscript.exe*    policytool.exe*
extcheck.exe*        javaw.exe*     jsadebugd.exe*     rmic.exe*
idlj.exe*            javaws.exe*    jstack.exe*        rmid.exe*
jabswitch.exe*       jcmd.exe*      jstat.exe*         rmiregistry.exe*
jar.exe*             jconsole.exe*  jstatd.exe*        schemagen.exe*
jarsigner.exe*       jdb.exe*       jvisualvm.exe*     serialver.exe*
java.exe*            jdeps.exe*     keytool.exe*       servertool.exe*
javac.exe*           jhat.exe*      kinit.exe*         tnameserv.exe*
javadoc.exe*         jinfo.exe*     klist.exe*         unpack200.exe*
javafxpackager.exe*  jjs.exe*       ktab.exe*          vcruntime140.dll*
javah.exe*           jli.dll*       native2ascii.exe*  wsgen.exe*
javap.exe*           jmap.exe*      orbd.exe*          wsimport.exe*
javapackager.exe*    jps.exe*       pack200.exe*       xjc.exe*

Java Api是Java的应用程序接口,里面有很多写好的Java Class,包含一些重要的语法结构以及基本图形,网络和文件IO,我们可以直接调用。

总结

有JVM和lib库(JRE)就可以执行字节码(.class)文件(Java程序)

有JRE可以运行(Java程序)但是还不能开发Java程序,需要JDK(JRE+开发工具)才可以

Jdk包含Jre,Jre包含Jvm

标识符

语法规范:

1.区分大小写

2.以字母、_、$、数字组成

3.长度理论无限制

4.不能是关键字

注:详细设计说明在开发后写,用于维护后续维护升级

Tip:将代码复制到包上可以自动创建包含这些代码的类

Debug的使用:观察程序执行的路径(适用于无报错、但是结果与预期不一致的情况)

3E5表示3*10^5

数据类型的转换

基本型数据:默认转换(小——>大,数字,字符)

long < float的原因:虽然long使用8字节存储,float使用4字节存储,但float的表示范围比long大

计算中的默认提升:byte、short、char

++、--、+=、-=、*=、/=、%=这些自增、特殊赋值运算不会默认提升

混合运算按范围大的提升

引用数据类型:里氏替换

在父类对象出现的地方子类对象一定可以代替父类对象

面向对象和面向过程的区别:

1、面向过程在解决问题的时候,会分析出解决问题的步骤,然后用函数一步步的将这些步骤实现,依次调用函数。而面向对象在解决问题的时候,会将问题拆散成一个个对象,建立对象的目的不是为了完成某个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。这来自于思考问题方式的不同。

2、从结构上说,面向过程的特点是过程化和模块化,而面向对象的特点则是类封装、继承和多态(多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法)。

3、执行效率不同,面向过程不需要封装类再实例化对象调用,只定义了函数和调用,所以执行效率会更高一些。

总的来说,面向过程执行效率更高也更直接,面向过程更灵活也更丰满。

变量的范围:

成员变量:类变量、实例变量

局部变量:形参、块变量、局部变量(循环)

运算符:自增运算符的优先级

& 与 &&的区别

1.&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。

2.&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x33 & ++y>0) y会增长,If(x33 && ++y>0)不会增长

以上有防止空指针异常的作用

3.&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。

函数

权限修饰符、static、final、abstract

返回类型:一种对调用者的承诺,保证必须有一个返回值

强制:在非界面类中禁止使用打印语句

函数一定会返回一个值,除非返回类型为void

函数的形参(相当于输入)优先使用引用类型

函数的返回值(相当于输出)

异常列表

递归