注 :本文档只是本人在学习 JAVA 时的笔记,每一天学习的知识都不同,并不是完全的学习手册。这里很多地方都只是对知识点的讲一下就带过了没有详解,这里主要是给入门者一个全景概括,让他们知道, JAVA 里会有哪些东西,哪些是基础性的必须要掌握的。
在线pdf浏览地址:http://www.docin.com/p-203504193.html
下面给上第一天的笔记,全文在附件。
我的二十一天 CoreJava
培训学习笔记
第一天 了解JAVA基础知识 2
第二天 语言元素 6
第三天 流程控制 10
第四天 数组 12
第五天 对象 14
第六天 类 16
第七天 接口 20
第八天 修饰符 21
第九天 类相关 22
第十天 内部类 25
第十一天 集合 28
第十二天 泛型 29
第十三天 异常 30
第十四天 反射和 注释(标注) 33
第十五天 图形界面 36
第十六天 Swing具体用法 37
第十七天 Swing事件 39
第十八天 THREADS (多线程) 40
第十九天 锁 42
第二十天 I/O流 44
第二十一天 网络编程 46
第一天 了解 JAVA 基础知识
一、学习CoreJava 的要求
1 、上课一定要听懂(理解)
2 、课后一定要练习
3 、练完后要思考
二、Java 的优势
1. 简单:c++ 里面内存要自己去管理,而java 里面有系统的垃圾回收器,Java 中省去了对指针的操作,但并不是没有指针了,只是被封装了而已,
代替指针的是种新的变量,叫做引用,这个引用里面也是保存的一个对象的地址,它和指针的差别就是比指针功能要弱化了,也更简单了。
2 、安全,字节码的验证,c++ 中对指针的操作可能会导致内存栈的溢出,而在Java 里面不用我们去担心这些问题,这些统统有JVM 去替我们做。
3 、Java 的跨平台性:用这个语言开发出来的程序可以在不同系统中运行:
源码是怎样成为可执行代码的
源码--> 编译--> 目标码(二进制机器码)--> 连接--> 可执行文件
由此看来,汇编、C 、C++ 等语言都是不跨平台的,因为他们的编译过程就直接与当前系统挂钩了
C 和C++ 源码都是跨平台的,我们所指的跨平台是基于编译过程中的跨平台,以上几种语言在不同
的系统中编译出来的目标码是不同的。
Java 跨平台就是编译过程中的跨平台,怎么实现的呢,那就是Java 虚拟机:
Java 的源码编译过程:
源码--> 编译--> 字节码--> 把字节码装载到虚拟机中运行
--JAVA 虚拟机:JVM
屏蔽掉了不同平台的差异,为上层的字节码提供了一个统一的运行环境
虚拟机是为了给字节码提供统一的执行平台,每种操作系统所用的虚拟机是不同的,是为了统一
JAVA 字节码的解析执行方式,如果没有虚拟机,在一种操作系统上写了JAVA 代码,编译成字节码
后只能在本操作系统上运行,但是换一个操作系统的话就要重新再写一遍JAVA 代码然后重新编译,
所以虚拟机提高了代码的复用性,实现了一次编写,多处使用的优点。
不同系统的Java 虚拟机之前的源码和字节码部分都是跨平台的,从虚拟机就不是跨平台的了。
这样Java 的字节码就可以直接用来传播,而不用传播源码了。
三、JDK/JRE/JVM
JDK :JAVA 开发工具包,比JRE 多了一些开发和调试的命令,比如javac 、java 等等。
JRE :JAVA 运行环境
JVM :JAVA 虚拟机
包含关系:JDK 包含JRE ,JRE 包含JVM
如果你搭建的Java 开发环境是用来做Java 开发的,那么就安一个JDK
如果你不做开发,而只是运行别人开发调试好的程序,那么就只安装一个JRE 就可以了
一般服务器上就只安装JRE
针对不同的操作系统有不同的JDK 下载
在JDK 安装好后的文件夹中有个bin 目录,里面一般是我们经常用到的一些命令,比如javac 、java
在JDK 目录下有个src.zip 文件,解压开后就是JDK 类库中的源码,也就是rt.jar 压缩文件中class
文件的源码。
jre 目录是JDK 自带的JRE ,里面也有bin 目录,一般存放的是运行时的一些命令
jre 文件夹中的lib 文件中有一些jar 文件,里面都是一些class 文件在虚拟机运行时作为类代码
其中一个比较重要的jar 文件就是rt.jar ,里面放的是JDK 给我们提供的一整套类库的字节码
四、配置环境变量
JAVA_HOME :JDK 的安装路径
CLASSPATH :类的搜索路径
PATH :命令的搜索路径=$JAVA_HOME/bin-->java javac
Linux :
-- 一般JDK 是放在/opt/jdk1.6.0_05
-- 配置环境变量的文件是主目录中的".bash_profile" 文件(bash)
.profile(bsh),.cshrc(csh)
进入终端后:vi .bash_profile
在里面配置:
JAVA_HOME=/opt/jdk1.6.0_05
CLASSPATH=.
PATH=$PATH:$JAVA_HOME/bin:.......
export JAVA_HOME
export CLASSPATH
-- 配置完后保存退出,然后source .bash_profile
在命令行打java 命令验证是否配置成功,如果成功了,注销一遍系统
Windows:
-- 右键我的电脑--> 高级--> 环境变量--> 在系统变量或者用户变量上配置-->
JAVA_HOME :当前机器上JDK 的文件目录 "C:\Program Files\Java\jdk1.6.0_05"
CLASSPATH :类的搜索路径 "." 当前目录
Path: 命令的搜索路径 ...;%JAVA_HOME%\bin
-- 开始--> 运行-->cmd-->java 验证是否配置成功
五、第一个JAVA 程序
一个java 文件只能定义一个public 类,并且public 修饰的类的类名要与文件名相同
vi MyFirstJava.java
public class MyFirstJava{
public static void main(String[] args){
String name="tangliang";
int age=30;
System.out.println("my name is:"+name);
System.out.println("my age is:"+age);
}
}
写好后在命令行cd 到文件所在目录,然后打 javac MyFirstJava.java 编译文件
编译成功后当前文件夹中会出现一个MyFirstJava.class 文件
运行:java MyFirstJava
结果:
my name is:tangliang
my age is :30
要学会编译出错后查找错误!
在文件中在定义一个class Animal{}
保存编译后文件中就会多一个Animal.class 文件,也就是说,文件中有多少类,那么就有多少class 文件
注:
1 、文件名必须和public 修饰的类名一致,以.java 作为文件后缀。
2 、一个.java 文件中可以有多个class ,但是只有一个public 修饰的类。
3 、.java 文件编译以后,一个class 对应一个.class 文件。
4 、main 函数是我们整个程序的执行入口所以必须是静态公开的。
java 命令执行所做的东西(要用到PATH 的环境变量)
1. 启动jvm
2 、找到类的字节码(class )文件,要用到CLASSPATH 的环境变量
3 、装载该字节码文件(加载类到内存中)
4 、找类的主方法,main 方法,执行代码:"": 里面是字符串值,System.out.println(): 向控制台输出,
括号里面代表的是输出的内容,不加ln 代表不换行,+ :代表字符串的连接。
类:里面可以写方法,可以写属性,一般来说:类与类(后面会讲到不并列的情形),方法与方法之间是并列的。
刚开始写代码时要注意代码的格式问题,有利于以后代码的维护以及可观性!
六、包
1 、作用,java 程序很庞大的话会有很多类文件,为了分类存放,那么就把相同类型的类文件放在同一个包中。
2 、语法:
package 包名;
... 正文;
包名规范:公司的URL. 项目的简称. 项目的模块(如:com.tarena.abs.model ),好处:保证包的唯一性
编译时用javac -d 目录 XX.java
编译好后,class 文件会被自动放在自己定义的包(自动生成的文件夹)中,包会放在编译命令中指定的目录中
执行时在包所在的当前目录下打 java 包名. 类名
七、创建jar 文件命令
把指定的包中的class 文件打包成jar 文件
语法:
jar cvf jar 文件名 要打包的文件夹
c :create (创建) v:visible (可视的) f:filename (文件名)
比如:jar cvf abc.jar ./com
执行完后在当前目录会生成一个abc.jar 的文件,解压后就是com 文件夹,里面还是class 文件
cvf:create visible filename 创建可视文件名
如果在别的java 文件中要用到此jar 文件中的类,那么就要在环境变量的CLASSPATH 中多配一个abc.jar
的路径。然后在类文件中直接import 这个类就可以了
jvm 查找类的顺序:
(1 )、当前路径下找类
(2 )、从rt.jar 中找类(jdk 提供给我们的<