# java全套基础知识第一章 #
1.java平台版本
Java平台包括标准版(J2SE)、企业版(J2EE)和微缩版(J2ME)三个版本
Standard Edition(标准版) J2SE 包含那些构成Java语言核心的类。
比如:数据库连接、接口定义、输入/输出、网络编程
Enterprise Edition(企业版) J2EE 包含J2SE 中的类,并且还包含用于开发企业级应用的类。
比如:EJB、servlet、JSP、XML、事务控制
Micro Edition(微缩版) J2ME 包含J2SE中一部分类,用于消费类电子产品的软件开发。
比如:呼机、智能卡、手机、PDA、机顶盒
2.软件开发中使用的开发工具
SDK: software development kit 软件开发包 函数库或者工具等
JDK java development kit 是面向开发人员的,java开发工具
JRE java runtime enviroment java运行环境,是面向应用程序使用者的
注意:JDK安装后一般都会包含JRE的
API application program interface 应用程序编程接口
别人开发好的供我们来使用(java)代码就称为API,API都会有一个API说明文档,让我们去查阅学习别人写好的代码如何来使用
3.Why(为什么要学习CoreJava)?
CoreJava就是J2SE
CoreJava是Java语言的基础,其它Java技术均是构建在Core Java基础之上。
4.What(CoreJava课程学习什么)?
- Java编程语法(字符集、条件语句、循环语句等);
- Java编程语言面向对象的概念;
- 图形用户界面(GUI)编程;
- 多线程;
- 网络;
- IO;
…
…
5.JDK主要包括内容
a. Java虚拟机:负责解析和执行Java程序。Java虚拟机可运行在各种平台上
b. JDK类库(API): 提供最基础的Java类及各种实用类。java.lang, java.io, java.util, javax.swing和java.sql包中的类都位于JDK类库中。
c. 开发工具: 这些开发工具都是可执行程序,主要包括:
javac.exe 编译工具;
javadoc.exe 生成JavaDoc文档的工具
jar.exe 打包工具
等。
6.JDK安装后的目录结构:
bin:java的相关命令
java javac jar javadoc
db:java提供的数据库
demo/sample:java代码的一些示例
include:C语言的头文件等内容
jre:java的运行环境
lib:java所用的基本的jar包
7.java的特点:
面向对象:
简单性:(相对应C和C++来讲)java不需要程序员操作内存
跨平台:一次编译,到处运行 (JVM)
多线程:其他语言的多线程一般是系统级别的,java的多线程是语言级别的
动态编译:(相对应C或者C++来说),在一个项目中,如果需要修改一个java文件的话,那么就修改这一个文件就行了,其他的java文件不需要动
8.垃圾回收机制(gc)
java不需要程序员释放内存,就是因为java中有gc
为什么要垃圾回收?
垃圾:没有任何作用的/不再使用的内存空间
对象创建,需要占用内存空间,在一个程序运行过程中要创建无数个对象,如果对象永久占用内存,那么内存很快会消费光,导致后续对象无法创建或者出现内存不足的错误。
因此必须采取一定措施及时回收那些无用对象的内存,这样保证内存可以被重复利用。
C++等程序由程序员显示进行内存释放,这样有可能:
1) 忘记内存释放,导致没有意义的内存占用;
2) 释放核心类库占用内存,倒致系统崩溃;
Java中垃圾回收处理特点:
1) 由虚拟机通过垃圾回收器线程自动完成;
2) 只有当对象不再被使用,它的内存才有可能被回收;如果虚拟机认为系统不需要额外的内存,即便对象不再使用,内存也不会回收;
3) 程序无法显示迫使垃圾回收器立即执行垃圾回收,可以通过java.lang.System.gc()/java.lang.Runtime.gc()建议虚拟机回收对象
4) 垃圾回收器线程在释放无用对象占用内存之前会先行调用该对象的finalize()方法
9.JVM(前期理解)
Jvm是什么?简称java 虚拟机(java virtual machine),是用软件来模拟一个虚拟的环境。
编写.java文件—>编译为.class文件—>类加载–>字节码验证–>JIT运行
字节码验证的内容:
代码要符合JVM的规范
代码破坏计算机的系统或者硬件
栈不能溢出
方法的参数类型要正确
类型转换要正确
类加载: 双亲委托机制
把我们写好并编译成的.class字节码文件从硬盘中加载到内存
JVM使用类加载器来完成类加载的过程
类加载器有:
类装载器:(分为4步)1》2》3》4
1、启动类装载器:bootstrap class loader
从jdk的安装目录下 jdk/jre/lib/rt.jar
rt.jar 是个包,放的是Java作为开发环境的所有的库
2、扩展类装载器:extensible class loader
从jdk的安装目录下 jdk/jre/lib/ext/*.jar
jdk下的所有的.jar 文件
3、系统类装载器:system class loader
$CLASSPATH
你所配置的classpath
4、网络类装载器:network class loader
类加载器:从一个指定路径下面去加载代码运行时需要用到的java类
10.java环境变量的设置
JAVA_HOME CLASSPATH PATH
windows:
JAVA_HOME:JDK安装的目录路径
C:\Program Files\Java\jdk1.6.0
CLASSPATH:类加载时候查找的字节码路径
.
PATH:JDK安装目录里面的命令目录
…;%JAVA_HOME%\bin
unix:
vi ~/.bashrc
在文件中的最后一行下面配置:
export JAVA_HOME=…/jdk1.6.0_32
export CLASSPATH=.
export PATH=
J
A
V
A
H
O
M
E
/
b
i
n
:
JAVA_HOME/bin:
JAVAHOME/bin:PATH
保存退出后 source .bashrc 让文件生效
变量设置成功后,在新打开的命令窗口中输入命令:java或者javac 后看到相应的信息提示即可.
java -version
11.Java的程序结构:
a. 源文件:
包含Java代码(按java语法规则编写的内容)的文件;
特征:
i. 以java作为后缀;
ii. 可以包含多个类/接口;
iii.名称与类名(只包含一个类/接口)或public修饰的类/接口(包含多个类/接口)同名;
结构:
i. 包的声明语句(可有可无,如有只能有一行,且位于最前面);
ii. import语句(可有可无, 可有多行,紧跟着包的声明语句);
iii.类的声明语句();
b. 类:
Java代码组织的单位, Java代码都是以一个个类形式组织的。用Java语言编写程序其实就是编写一个个类;
一个类里的语句内容用大括号括起来,一个类里带有零至多个方法。
结构:
i. 类的声明语句,例:
public class HelloWorld
ii. 类的内容语句,用大括号括起来:
类中包括:
(1) 属性
(2) 方法
c. 方法:
类似于其它语言里的函数或过程。方法里带有零至多行语句。
结构:
i. 方法的声明语句,例:
public static void main(String[] args)
ii. 方法体,用大括号括起来:
d. Main方法:
Java虚拟机执行Java程序时,首先执行调用的方法。main方法又叫程序的入口方法或起点方法。不管你的程序有多大,
不管你的程序有多少个类,一定都会有一个main()方法来作为程序的起点。
例如: FirstJavaProgram.java文件中:
public class FirstJavaProgram{
public static void main(String[] args) {
System.out.println("Hello Java, I am your fans!");
}
}
public: 公开给其它类存取;
class: 类声明的关键字;
FirstJavaProgram: 类的名称;
void: 方法的返回值;
main: 方法的名称;
String[]: 数组类型;
args: 参数名称;
System.out.println: 打印到标准输出上(默认为命令行)
"Hello Java, I am your fans!": 要输出的字符串内容;
; 每一行语句必须用分号结尾;
12.java类名和文件名的关系:
一个java源文件(.java)中,可以有好多个类(class),但是,最多只能有一个类(class)被public修饰
如果有一个类被public修饰,那么这个源文件(.java)的名字就必须和这个被public修饰的类的名字一致(必须),而且还要首字母大写(首字母大写是命名规范,其实小写也可以的)
13.java文件中的三个顶级元素:
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)
注意:一般情况下
src 目录下放java程序的源代码(.java)
bin 目录放.java文件编译后的.class(字节码文件)
14.HelloWorld.java文件中写一个带到package(包名)的类HelloWorld并编译运行
创建并打开一个java文件:
vi src/HelloWorld.java
编译这个java源文件
javac -d bin src/HelloWorld.java
运行这个java类
java -cp bin HelloWorld
注意:-d表示编译的时候生成和类中的package相对于的目录结构,然后把编译完成的.class文件放到这个目录中.如果这个类中没有类名,那么就不生成这个包目录了。
-cp表示在运行这个java类的时候去bin目录下找这个java类所在的.class文件进行类加载
cp就是classpath的意思
我们运行的时候是运行的java类,这个java类在相应的.class文件中,例如这个例子中,我们运行的是HelloWorld这个java类,这个java类是在HelloWorld.class文件中的,所以我们运行的时候HelloWorld.class文件中的HelloWorld这个java类:java -cp bin HelloWorld
15.HelloPackage.java文件中写带到package(包名)的类HelloPackage并编译运行,包名为:com.briup.chap01
vi src/HelloPackage.java
javac -d bin src/HelloPackage.java
java -cp bin com.brup.chap01.HelloPackage
注意:一个类的package是类的名字的一部分,完整的类名是 包名.类名
例如:一个类MyTest的package为com.briup.test,那么将来这个这个类将来编译成为的MyTest.class文件一定要放在com/briup/test这样的目录下面才能运行,目录结构要和包结构一样.