前言:
这半年不太勤快,一直没更新,今天开始会持续更新记录学习以及工作中的心得!
之前发布介绍了什么是Java,那么今天我们来讲解介绍下Java的基础篇,特别适合Java零基础小白学习。
1. java的加载与执行
java程序加载执行需要两个命令:
javac 文件名 这个命令执行后会编译加载.java文件(java文件为源文件),生成.class文件(字节码文件)
java 文件名 这个命令执行后会执行class文件,运行java程序。
java的执行过程:java 类名——>启动java虚拟机(jvm),jvm会启动类加载器ClassLoader——>加载器会去硬盘上搜索相应的class文件,并把它装载到java虚拟机中——>虚拟机将class文件解释为二进制数据,然后操作系统执行二进制,和底层硬件平台进行交互。
2.Java的三大变量
实例变量:在堆区中,在类中声明的变量就是实例变量,也叫对象变量
静态变量:在方法区,用static修饰的变量就是静态变量,静态变量可以用类名直接访问,属于类。
局部变量:在栈区中,出现在一个作用域中,常出现在方法、函数中,只能在哪个作用范围之内使用。
3. JDK、JRE、JVM之间的关系
JDK:Java开发工具箱
JRE: Java运行环境
JVM:Java虚拟机
JDK包括JRE,JRE包括JVM
4. Java语言中的包机制
1. 包又称为package,Java中引入package这种语法机制主要是为了方便程序的管理。不同功能的类被分门别类放到不同的软件包当中,查找比较方便,管理比较方便,易维护。
2. 定义package:
在java源程序的第一行上编写package语句。
package只能编写一个语句。
-语法结构: package 包名;
3. 包名的命名规范:
公司域名倒序+项目名+模块名+功能名;
例如:
com.baidu.oa.user.service;
org.apache.tomcat.core;
4.包名要求全部小写,包名也是标识符,必须遵守标识符的命名规则。
5.一个包将来对应的是一个目录。
6. import关键字:
导包
语法:import 包名;
java.lang.*; 不需要手动引入,系统自动引入。
lang: language语言包,是java语言的核心类,不需要手动引入。
那什么时候需要import导入包呢?
当不是java.lang包下,并且不在同一个包下的时候,需要使用import进行引入。
5.Path环境变量
windows系统搜索硬盘上的命令是从path环境变量中搜索的,windows系统搜索硬盘上的命令首先会从当前目录下搜索,如果搜不到,则会从环境变量path指定的路径当中搜索该命令,如果也搜不到,则会报错误。所以当想在windos系统上的任意位置使用windos命令时,请将要执行的命令的目录配置到Path环境变量中,就可以在windos系统任意位置执行了。
6.变量
变量是内存中的一块空间,这块空间有名字(也就是变量的名字)、数据类型和字面值
变量是内存中存储数据的最基本的单元
所以变量有三部分组成:名字、数据类型、字面值,其中数据类型是知道程序在运行阶段应该分配多大的内存空间。有了变量以后,就可以重复方法,节省了内存.
String str = "你好代码";
7. 作用域
什么是作用域?
答:可以起到正常作用的范围
什么是变量的作用域?
答:代码里面一个变量它可以使用的范围
public class BinarySearch { private int b = 2; public void init(){ int a = 1; } }
比如以上代码里面,a的作用域就是在init()方法中,超出init()方法之外的地方,a是都不能使用的。
变量根据作用域分为局部变量和全局变量
以上代码中,b就是全局变量,a就是局部变量
8.标识符
在java源代码中凡是可以自主命名的都是标识符,例如:类名、方法名、方法的形式参数名称、变量...
命名规则:只能有字母、数字、_、$组成,不能是其他的符号,并且不能以数字开头、关键字不能用来命名。
命名规范(不是硬性的,不属于语法,只是建议):
1.最好是有意义的名称,例如:apple,pear
2.驼峰式命名,例如:userService
3.类名、接口名:首字母大写,其后每个单词首字母大写
变量名、方法名:首字母小写,其后每个单词首字母大写
常量名:全部大写
9.递归
递归就是方法自身调用自身
使用递归的时候,必须添加结束条件,没有结束条件,会发生栈内存溢出错误。
java.lang.StackUverflowError
原因:一直压栈,没有弹栈,栈内存不够
能够使用循环代替递归的尽量使用循环,循环的执行耗费内存少一些,递归耗费内存相对多一些,另外递归使用不当很容易内存溢出,JVM停止工作。当然,只有极少数情况下,只能用递归,其他代码解决不了问题。
递归即使有了结束条件,即使结束条件是正确的,也可能会发生栈内存溢出错误,因为递归的太深了。
遇到递归导致的栈内存溢出错误是怎么办?
第一步:先检查递归结束条件是否正确
第二部:如果正确,可以调整JVM的栈内存大小。
10.对象和引用
对象:在使用new运算符在堆内存中开辟的内存空间称为对象。
引用:是一个变量,不一定是局部变量,还可能是成员变量。引用保存了内存地址,指向了堆内存当中的对象。所有访问实例相关的数据,都需要通过“引用”的方式访问,只有通过引用才能找到对象。只有一个空的引用,访问对象的实例相关的数据会出现空指针异常。
11.类加载器
专门负责加载类的命令/工具 ClassLoader
JDK中自带了3个类加载器
启动类加载器
扩展类加载器
应用类加载器
类加载器的过程:
假设有这样一段代码:String s = "abc";
代码在开始执行之前,会将所需要类全部加载到JVM当中,通过类加载器加载,类加载器会找String.class文件,找到就加载。首先通过“启动类加载器”加载。
启动类加载器加载位置:jdk目录/jre/lib/rt.jar
rt.jar都是JDK最核心的类库
如果通过“启动类加载器”加载不到的时候,会通过“扩展类加载器”加载。
扩展类加载器加载位置:jdk目录/jre/lib/ext
如果”扩展类加载器“没有加载到,那么会通过”应用类加载器“加载。
应用类加载器加载位置:classpath中的类
java中为了保证加载类加载的安全,使用了双亲委派机制。
优先从启动类加载器中加载,这个称为”父“,”父“无法加载到,再从扩展类加载器中加载,这个称为”母“,双亲委派机制如果都加载不到,才会考虑从应用类加载器中加载,直到加载到为止。
12.相对路径和绝对路径
相对路径:相对于当前所在位置而言的,相对路径是相对于当前而言,从当前所在的位置作为起点。
绝对路径:在windos操作系统中路径起点为盘符的都是绝对路径,例如:C:\Users\Adminstrator
在linux操作系统中以/为起点的代表是绝对路径,例如:/etc
13.基本数据类型
整数型:byte short long int
浮点型:float double
布尔类型:boolean
字符型:char
在java中,在任何情况下,整数型的字面量值默认当作int类型来处理,如果希望该整数类型字面量被当作long类型来处理的话,需要在字面量后面添加L/l。
任何一个浮点型数据默认被当作double来处理,如果希望该浮点型字面量被当成float来处理的话,需要在字面量后面添加F/f。
14.注释和转义符
单行注释://
多行注释:/*注释内容*/
文档注释:/**
*
*/
文档注释在以后将会被生成doc文档
\在java中是转义符,如果需要输出\,那么需要"\\"如此写。
PS:如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!