一.core java
java编程语言
第一代编程语言
机器语言:直接使用机器能识别的0101进行编程
优点:效率高
缺点:可读性可维护性差
第二代编程语言
汇编语言:使用少量指令代替0101代码进行编程
第三代编程语言
面向对象编程语言:以对象为最小编程单位编程
二、java:
- Java有哪些优点
- Java为纯面向对象的语言。
- 平台无关性:Java为解释型语言,“一次编译,到处运行”。跨平台性。
- Java提供了很多的内置的类库。
- 提供了对Web应用开发的支持。
- 具有较好的健壮性和安全性。
- 祛除了C++语言中难以理解。容易混淆的地方。
1、java语言:
1、数据结构: 数据在内存中怎样存放的(数据之间的关联关系)
二叉树 链表 数组 栈和队列 哈希表(散列)
2、算法: 解决问题
3、内存管理: 数据在内存中开启
数据在内存中释放
2、java平台:主要包含两个模块
Windows mac
1、规范: API 应用程序接口 application program interface
2、JVM
3、java包含:
java = javaSE + javaEE + javaMe
1、javaSE:桌面应用级开发
核心:corejava 类库
缺点:画面感差
2、javaEE:企业级应用开发
网站:淘宝,京东 后台服务器
javaEE其实是一套规范
用来将解决企业级开发过程中可能遇到的问题
jpa:规范操作数据库
hibernate实现规范 --> 框架
springDataJPA 操作数据库数据的规范
3、javaMe:移动端开发
车载导航
4、jdk:java开发工具箱
jdk = jre + kit (kit用来开发的小工具)
开发过程中用到的小工具
bin文件夹:
javac 以.java结尾源文件编译
编译后得到.class字节码文件
检查语法
运行:java
jvm --> 运行.class文件中的类 --> 机器码 --> 机器运行
不同的机器的虚拟机不一样(jvm很多个版本)
先编译在运行
javadoc: 生成API文档
jar:把.class字节码文件 打包 成.jar
include文件夹:C语言头文件
java中内部部分是C实现的
db:java提供的数据库
lib:java所用的基本jar包
src:jdk的加载类文件
5、jre:java运行环境
运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。
6、java优点:
1、简单性:面向对象
2、跨平台:一次编译,到处运行。(不同机器 识别的机器码不一样,有不同平台版本对应的虚拟机)
3、多线程:其他语言的多线程一般是系统线程
线程:一个进程有多个线程 多个任务可以同时运行
进程:每个软件的运行都是一个进程
4、动态编译:在一个项目中,如果有一个文件修改,只需要编译修改的文件
5、内存管理方案:gc(专门负责JVM垃圾释放的线程):垃圾回收机制
垃圾:指的是堆中的内存,地址没有被任何位置引用(没有引用的内存节点)
什么时候回收垃圾:地址没有被引用时候,被标记为垃圾 一段时间后被回收(gc机制控制时间)
gc有自己的算法,所以我们无法控制垃圾回收机制
虽然有java.lang.System.gc() java.lang.Runtime.gc(),但还是无法控制垃圾回收
7、java代码必须写在方法里,方法必须在类中,这样的才可以运行
在运行.java文件时候
javac编译出.class字节码文件
jvm运行的是 .class字节码文件中的 类(class类加载)
转换为机器码
机器去执行
8、java 类加载机制 存在这么多类加载的原因:避免类的重复加载
将Hello.class字节码文件中 类 加载到内存的过程
#java Hello
触发类加载机制
类加载机制:双亲委托机制
启动类加载器 /jre/lib/rt.jar 到rt.jar搜索存在字节码文件的类
|
扩展类加载器 /jre/lib/ext/ * .jar
到*.jar搜索存在字节码文件的类
|
应用类加载器 classpath= .
本地路径存在的字节码文件的类
#Hello.class
#对应实际类举例
孔融让梨
孔融拿到梨后
老子 1,吃 2,爱幼
| |
孔子 1,吃 2,爱幼
| |
孔融 1,吃
双亲委托机制流程:
1、执行java 类名 命令时候触发类加载机制
2、本地类加载 接受到加载类命令 不做处理 反馈给上级 到扩张加载类
3、扩展类加载 接收到下级本地类加载反馈 不做处理 反馈给上级 到启动类加载
4、启动类加载 得到下级扩展类加载命令 直接处理 进行 类加载。加载rt.jar中的类,但是没有找到对应匹配的类,接着启动加载类向下级 扩展类进行加载
5、同样的 扩展类 中的*.jar中的类,没有对应匹配的类,接着扩展类交给下级本地类加载
6、在本地类中找到对应字节码文件的类 显示结果
未找到对应类 显示ClassNotFindException 类找不到
9、java 顶级元素(顶级关键字)
package + import + class
-
package
- 最终会是以文件夹的形式体现出来(有什么包,就必须有什么文件夹,运行的时候.class文件必须在这个文件夹下面)
- java文件中有多个package的时候,用.分割并且结尾用;号结束 例如:(com.briup.test;)
- 包也是java中类的标识的一部分,确定某一个类是通过包名加类名来唯一确定的 比如运行java类的时候:
java package.类名 (java com.briup.test.HelloPackage)
-
import
- 导包用的关键字
- 如果你想在当前这个类使用其他的类,那么就必须通过这个关键字,把那个类导入进来
- java.lang包下面的类可以直接使用,不用导入.
- 和当前这个类位于同一个包下面的类,也不需要导入,可以直接使用
-
class : 类(一个类对应一个字节码文件)
- java中标识一个类的关键字
- 一个源文件可以有多个类,但是只能有一个类被public修饰,并且类名需要和文件名一致
- java类中可以没有package,也可以没有import,但是一定会class
- 带包名的类编写,编译运行.HelloPackage.java
- 不要出现中文: 可能会发生中文乱码问题。
- 不指定编码的编译 :javac -d bin src/HelloPackage.java
- -d :指定编译的字节码文件的存放位置
- 指定编码为utf-8 : 编译 : javac -encoding utf-8 -d bin src/HelloPackage.java
- 指定已经编译好的字节码文件存放位置 : java -cp bin com.briup.ch01.HelloPackage