外观
Java相关概念
编程语言:编译型、解释型
编译型:程序可在操作系统上直接执行
解释型:程序的执行需要解释器(解释环境),跨平台易移植
JDK、JRE、JVM的区别
简易图
全图
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
函数的形参(相当于输入)优先使用引用类型
函数的返回值(相当于输出)
异常列表
递归