第一部分:什么是java
Java技术既是一种编程语言,也是一个平台。
1.1:java是编程语言:
Java编程语言是一种高级语言,可以用以下所有流行语来表征:
简单,面向对象,多线程,高性能,强大的,安全
在Java编程语言中,所有源代码首先以纯文本文件编写,并以.java扩展名结尾。这些源文件然后由javac编译器编译生成.class成文件。一个.class文件不包含的代码是原产于你的处理器; 它代之以字节码 - Java虚拟机1(Java VM)的机器语言。然后,java启动程序工具将使用Java虚拟机的实例运行您的应用程序。
java 面向对象的语言:以面向对象的形式进行编程。
java语言 : 数据结构 + 算法 + 内存管理
数据结构:数据在内存的分布方式
算法:解决问题的方式
内存的管理:内存的划分和释放
知识点速记: java语言就是用来操作内存中的数据。
: java语言需要先编译然后再运行。
1.2:java 是一个平台 :
平台: 是在程序运行的硬件或软件环境,大多数平台可以被描述为操作系统和底层硬件的组合
流行的平台: window...Mac OS
java平台有两个组件:
java虚拟机 和 java应用程序接口
第二部分: java中包含哪些东西
java = javaSE + javaEE + javaME
SDK : software development kit 软件开发包 函数库或者工具
JDK : java development kit 是面向开发人员的,java开发工具
jre : java runtime enviroment java运行环境,是面向应用程序使用者的
知识点速记:
jdk = jre + java提供小工具
第三部分: java可以做什么
javaSE桌面应用:(逗你玩)
javaEE企业级网站项目(实战项目演示)
javaME手机应用
第四部分: java的安装配置
1,java 的下载:SUN公司的java 已经被oracle公司收购。
: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Java SE Development Kit 8u172部分 勾选Accept License Agreement
然后选中所需要版本进行下载。
2,安装jdk ,然后安装jre
注意:安装目录不要有中文,不要有空格。
3,配置环境变量:
window : 1.1:新建JAVA_HOME = jdk安装目录
1.2:新建classpath:.
1.3:修改path : 在path的最前面添加java的工具路径,
%JAVA_HOME%/bin;
ubuntu : 在登陆用户的家目录下面:
配置环境变量(文件: .bashrc 这文件的最后一行开始配置)
export JAVA_HOME=/home/briup/jdk/jdk1.8.0_172
export CLASSPATH=.
export PATH=$JAVA_HOME/bin:$PATH
配置完了之后,需求让文件立刻生效: source .bashrc
第五部分: 安装完成以后的java
bin : 存放可执行文件
javac : 编译.java文件 变成.class文件
cmd : javac Hello.java
java : 运行.class文件
cmd : java Hello
javadoc:生成java文档
javadoc HelloWorld.java
jar : 把 .class 文件 变成jar包。
jar -cvf hello.jar HelloWorld.class
db : java提供的数据库
include : C语言的头文件内容
jre : java 的运行环境
lib : java 所用的基本jar包
知识点速记:
java 内部有些东西是用C实现的。
第六部分 : java的优点
1,简单性 : 面向对象变成,写代码变得非常简单。
2,跨平台 : 一次编译,到处运行。(jvm)
3,多线程 : 其他语言的多线程一般是系统级别的,java的多线程是语言级别的
线程 : 一个进程下 其他多个任务同时完成
进程 : 一个应用 运行 会在内存中开辟一块独立的内存空间
4,动态编译: 在一个项目中,如果需要修改一个java文件的话,那么就修改这一个文件就行了,其他的java文件不需要动
5,内存管理方案,gc:垃圾回收机制 : 指的是堆中的内存。
如果被引用数为0 就是 垃圾
java中有一个专门负责JVM中垃圾释放的线程。
垃圾的定义:在堆中的对象,没有任何引用指向这个对象,那么这个对象就是垃圾。
: 没有引用的内存节点
注意:垃圾回收有自己的算法,我们是不能控制垃圾回收机制的,虽然有和垃圾回收相关的方法:java.lang.System.gc() java.lang.Runtime.gc(),但是还是无法控制垃圾回收机制
知识点速记:java 一次编译,到处运行。
第七部分: java的helloworld例子
编写java程序.HelloWorld.java
知识点速记:java代码必须写在方法中,方法必须写在类中,有主方法的类是可以运行的。
类{
方法{
int a = 10;
syso(a);
}
}
第八部分: java代码的类加载机制
把Hello.class字节码文件中
Hello类加载到内存的过程
java Hello就会触发java类加载
类加载:双亲委托机制
启动类加载 老子(孔子爹)
/jre/lib/rt.jar
扩展类加载 孔子
/jre/lib/ext/*.jar
本地类加载 孔融
classpath:.
什么时候触发类加载?
java Hello
为了避免类的重复加载
网络类加载
思考:为啥要存在这么多类加载?
双亲委托机制加载类的流程:
1,执行java HelloWord 命令时候开始类加载(得到加载类的指令)
2,本地类加载器接到 加载HelloWorld类的指令,但是不做处理,反馈给上级 扩展类加载器
3,扩展类加载器得到 加载HelloWorld类的指令,但是也不做处理,反馈给上级 启动类加载
4,启动类加载器得到 加载HelloWorld类的指令,直接处理,进行类加载。加载rt.jar中的类,但是没有加载到HelloWorl的类,接着启动类加载器又把加载 HelloWorld类的指令 向下交给扩展类加载器进行完成
5,扩展类加载器 得到上级分配的任务:加载HelloWorld类,立刻加载jre/lib/ext/*.jar,但是也没有加载到HelloWorl的类,接着 扩展类加载器又把加载HelloWorld类的指令 向下交给本地类加载器进行完成。
6,本地类加载器 得到上级分配的任务:加载HelloWorld类,立刻执行加载ClassPath下的类,如果加载到了HelloWorld类 调用main方法执行,如果没有加载到HelloWorld类就报异常,ClassNotFindException 类找不到。
扩展:可以自己动手把一个class文件打成jar包,放到jre/lib/ext/下,然后 运行jar包中的类,看是否可以运行成功。
第九部分:简单了解java虚拟机
进行类加载,字节码验证,栈不能溢出,方法的参数类型需要正确,类型转换需要正确。
把字节码转换为机器码进行运行。
第十部分:java中的顶级元素(顶级关键字)
package + import + class
package
1.最终会是以文件夹的形式体现出来(有什么包,就必须有什么文件夹,运行的时候.class文件必须在这个文件夹下面)
2. .java文件中有多个package的时候,用.分割并且结尾用;号结束 例如:(com.briup.test;)
3.包也是java中类的标识的一部分,确定某一个类是通过包名加类名来唯一确定的 比如运行java类的时候:
java package.类名 (java com.briup.test.HelloPackage)
import
1.导包用的关键字
2.如果你想在当前这个类使用其他的类,那么就必须通过这个关键字,把那个类导入进来
3. java.lang包下面的类可以直接使用,不用导入.
4. 和当前这个类位于同一个包下面的类,也不需要导入,可以直接使用
class : 类
java中标识一个类的关键字
(java类中可以没有package,也可以没有import,但是一定会class)
带包名的类编写,编译运行.HelloPackage.java
不要出现中文: 可能会发生中文乱码问题。
不指定编码的编译 :javac -d bin src/HelloPackage.java
指定编码为utf-8 : 编译 : javac -encoding utf-8 -d bin src/HelloPackage.java
运行 : java -cp bin com.briup.ch01.HelloPackage