java核心杰普实训corejava.docx
《java核心杰普实训corejava.docx》由会员分享,可在线阅读,更多相关《java核心杰普实训corejava.docx(83页珍藏版)》请在冰点文库上搜索。
java核心杰普实训corejava
引言:
1、why:
CoreJava是整个Java体系的基础和核心,其他Java技术均是构建在CoreJava基础之上的。
2、What:
java语法基础:
字符集,条件语句,循环语句
java面向对象编程:
特征,高级特性,面向对象编程思想
javaIO流(输入输出)和文件操作
多线程编程
图形用户界面(GUI)编程
Java网络编程:
Socket编程
3、How:
Thinking+Coding+Testing;
ch01java入门
1、Java起源与发展
java起源于SUN公司的Green项目----》Oak
SUN公司在
推出java语言的同时,也推出了一系列开发工具,如:
JDK(javaDevelopmentKit)java开发工具包
时间版
本类库数量描述
1996JDK1.0250Applet
1997JDK1.1500图形用户界面编程
1998JDK1.2(java2.0)2300
全面支持企业及开发
2000JDK1.3(java2.0)
2002JDK1.4(java2.0)
2004JDK1.5
(java5.0)3500对语言本身做了重大改变,更稳定、更高效、更安全;---Tiger
2005
JDK1.6(java6.0)
补充内容:
java的应用版本:
JavaSE:
java标准版本,基础和核心,主要用来做java小程序,桌面程序;
JavaME:
java微型版本,主要用来做移动开发,游戏开发;
JavaEE:
java企业版本,主要用来做企业级开发;
JDK(javaDevelopmentKit)包括:
java虚拟机JVM:
编译、运行java程序,JVM可以运行在任何平台上;
javaAPI(java/JDK类库):
别人开发好的可以直接使用的类。
提供一些最基础和实用的java类,例如
java.lang,java.util,java.sql包中的类都处于javaAPI中;
开发工具:
这些开发工具都是可执行文件
javac.exe编译java源程序
java.exe运行java程序
javadoc.exe生成java说明文档
jar.exe打包工具
2、设置java开发环境
1)获取J2SDK
2)安装J2SDK
JDK安装目录下的文件夹简介:
bin:
表示java的可执行命令/文件
demo:
java的一些基本例子
include:
一些c程序,主要是和其它语言集成
jre:
java的运行环境,jdk必须有jre,java程序才能被处理
lib:
放置库函数,也称之为第三方文件
sample:
java的实例程序
src.zip:
java类库源代码
3)设置环境变量
JAVA_HOME:
设置为java安装目录,设置
目的是简化其他环境变量的设置;该变量可设可不设;
path:
设置java命令(工具)的路径范围,保证在操作系统的任何
位置调用java命令;该变量必须设置;%JAVA_HOME%\bin;
classpath:
设置java源文件的二进制文件的存储位置,一般设定为当前路径,默认为当前路径。
该变量可设可不设;
3、java是什么?
java是编程语言、开发环境、应用环境、部署环境。
制
订了规则并予以实现(JDK);
4、java的特点
1)简单功能强大的:
语法类似于C、C++;废弃了指针操作,自动内存管理;
Java提供了大量类库;
2)安全的:
无指针操作;严格的代码校验(校验器可以发现操作数栈的溢出,非法类型转化等错误);
3)
健壮的:
致力检查编译和运行时错误;强类型语言;自动垃圾内存回收;
4)纯面向对象的
面向对象是java语言最重要的特征,具
有封装、继承、多态等特征;java语言只支持面向对象编程,不支持类似于C那样的面向过程编程;C++既支持面向对象编程,也支持面向过程编程;
5)解释的:
java源程序先编译成结构中立的字节码文件,然后解释执行;C和C++是编译执行的,先编译成本地机器码文件,然后执行;
6)跨平台的(可移植的):
即“一次编译,处处执行”,通过JVM虚拟机实现的,其原理是为不同的OS提供不同JVM,但其编译生成字节码文件的规格相同;
java作为一门网络编程语言,编译生成结构中立的字节码文件,该文件可以运
行在任意一个具有java运行环境的机器上。
注意:
java语言的跨平台是通过JVM实现的,但是JVM本身并不跨平台;
7)多线程的:
java是一个从语言级支持多线程程序设计的编程语言,也就是可以直接通过java编程实现多线程。
多线程编程的简单性是Java成为流行的服务器端开发语言的主要原因之一
8)自动垃圾内存回收
垃圾:
无用对象占用的内存
垃圾回收:
无用对象占用的内存的回收
过程
C和C++要通过编程者自身通过编程实现内存的分配和回收,如果内存分配和回收不平衡时,将造成系统资源耗尽或者内存溢出
而导致程序异常终止,从而发生错误;
java中垃圾内存是由垃圾回收器线程在适当的时候自动回收。
当系统内存紧张时,回收;否
则不回收;
编程者也可以手动回收垃圾内存:
java.lang.System.gc()/java.lang.Runtime.gc();
5、JVM(javavirtualmachine
)java虚拟机:
利用软件来模拟一个虚拟的环境;
6、垃圾回收
7、java代码安全
8、第一个java程序
1)源文件:
包含java代码(符
合java语言规则编写的内容)的文件;
特征:
以.java为后缀名;可以包含多个类或者接口;文件名与类名或者接口(只包含一
个类或者接口)或者与public修饰的类或者接口(包含多个类或者接口)同名;
结构:
包声明:
可有可无,如果有只能有
一行并且必须处于第一行(注释除外);
import语句:
可有可无,可有多行,紧跟包声明语句;
类的声明语句;
2)
类:
java代码的组织单位,java代码就是由一个个类组织的,java编程就是编写一个个的java类;
3)方法、main方法
4)剖析类
package:
将类放入某一特定的包中,便于类的组织、权限访问和区分名字相同的类;
可以定义多级包,中间用“.”分开,包名.
包名....
引入包名后,类的名字为:
包名+类名;
java中包层次和文件系统中的目录/文件夹结构类似;
import:
导入一个或者多个
与本类不在同一包层次下的类文件;
importjava.io.File;
importjava.io.*;导入java.io包下的所有类,但是不包括其中子包下
的类;
java.lang包下的类默认导入;
9、常用的包:
java.lang:
包含一些Java语言的基本类与核心类,如String、Math、Integer
、System和Runtime,提供常用的功能,这个包中的所有类是被隐式导入的;
java.awt/javax.swing/java.awt.event:
包含编写与
平台无关的图形界面(GUI)应用程序的类;
java.io:
包含一些用作输入输出(I/O)处理的类,主要包括流的类;
:
包含用
于建立网络连接的类,与java.io同时使用完成与网络有关的读写;
java.util:
包含一些实用工具类和数据结构类。
像集合类、日
期类等。
10、JavaAPI:
JavaApplicationProgrammingInterface,java开发者预先定义好的供编程者直接使用的类库;
ch02
java语法基础
1、程序注释
为了增强程序代码的可读性,在java源文件中的任意位置均可以加入程序注释。
程序中加入注释语句,
在java程序编译时会被编译器忽略,无论在程序注释中添加任何东西,编译后程序不受任何影响。
单行注释:
//注释内容;
利用单
行注释,从符号//开始至换行之间的内容会被认为是注释内容编译时编译器会忽略;
例如:
intage;//age表示年龄
多行注
释:
/*.........*/,“/*”,“*/”之间为注释内容,必须成对出现,注释内容可以换行;
例如:
/*注释内容*/
或者
/*
注释内容
*/
为了美观可以写成:
/*
*注释内容
*/
文档注释:
和多行注释相似,任何声明之前均可加入文档注释,注释内容可被JavaDoc工具读取
作为JavaDoc文档内容,文档是对代码结构和功能的描述;
/**
*注释内容
*/
2、java代码编写基本规则
java语句以英文分号结束,为了程序代码的可读性最好占一行;
java代码块放在一对大括号之间;java允许一组语句放在一起用大括号括起来形成代码;例如:
循环体,语句块,类体,方法体;语句块可嵌套;
程序忽略空格、制表符、空行、续行符;
3、标识符
java中用来为类、方法、变量等所起的名字叫标识符;
规则:
标识符以字母、“_”、“$”开头,后可跟字母、“_”、“$”或者数字,无长度限制,大小写敏感,不能使用java的关键字、预留关键字以及有特殊用途的符号作为标识符;
有效:
abc$qw$$$q1_$$_
无效:
1q#qw
classtrue
注意:
goto和const虽然目前不是java的关键字,但是被作为预留关键字保留;
true,false,null具有特殊用途,不能
用做标识符;
Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。
命名规范:
类和接口的
名字首字母要大写;方法名和变量名第一个单词字首字母要小写,其他首字母要大写;包名要小写;常量名要大写;所有的命名最
好不要用中文以及英文之外的其他语言;
4、数据类型:
一组性质相同的值的集合以及定义在该值集合上一组操作的总称;
程序的
基本功能就是处理数据,程序中用变量来表示数据,变量一定要先定义在使用;
常用的数据类型:
整型,浮点型,字符型,字符串
型,逻辑型
java中的数据类型分为基本数据类型和引用类型;
引用类型:
类类型,数组类型,接口类型等;
基本数据类型:
数值型
:
整型(字节型byte,short短整型,int整型,long长整型),浮点型(float单精度型,双精度型double)
逻辑型boolean:
只能
代表两种状态逻辑真或者假,用于判断现实中条件的成立与否,常用来进行逻辑运算和程序的流程控制;
在java中boolean型只能
取true或者false,不能像C语言中那样用0和非0的整数来代表true或者false;
字符型char:
2个字节,16位,无符号,用“'”括
起来;
chara='a';
chara='\u0061';
chara=ox0061;
chara=97;
转义字符:
以反斜杠开头
\n换行符,将光标定位当下一行
的开头;
\t垂直制表符,将光标定位到下一个制表符位置;
\r回车,将光标定位到当前行开始处,并不移到下一行;
\\
反斜杠
\'单引号
5、变量:
变量是用来记录值可以发生改变的数据的标识符,同样那么常量就是用来记录值不可以发生改
变的数据的标识符;
在计算机技术中,变量包括变量名和变量值,变量名标示一段特定的存储空间,变量值就是存放在该空间中的
二进制数据,可以被修改和访问;
变量的分类:
按照存储数据的数据类型分:
基本数据类型和引用类型;
按照声明的位置分:
局部
变量和成员变量(又称为实例变量);
局部变量:
声明在方法
内部或者代码块内;
成员变量:
声明在类的内部,方法的外部;
在
java中变量在声明和初始化后才能使用
成员变量定义在类的内部,在使用类创建对象时同时创建成员变量,进行系统默认初始化和
显示初始化;
方法形参局部变量,在调用方式进行隐式初始化;
变量的作用域和生命周期:
成员变量的作用和其所属对象相同,生
命周期随着对象的创建而创建,随着对象的销毁而销毁;
局部变量的作用域为其所在的方法内部或者代码块内部,生命周期就是方
法或者代码块的一次执行期间;
6、内存的逻辑分区
栈内存:
特定程序专用,先进后出的分配原则,存储空间分配连续,存储容量
小速度快。
通常存放局部变量;
堆内存:
所用应用程序公用,存储空间分配不连续,存储容量大速度慢。
通常存放成员变量、对象
;
代码区:
专门存放方法、代码块;
静态、常量存储区:
存放静态变量、常量;
7、理解对象
面向对象的开发方法把软件系统
看成各种对象的集合,对象就是最小的子系统,一组相关的对象能够组合成更复杂的子系统。
面向对象的开发方法将软件系统看成
各种对象的集合,接近人的自然思维方式。
对象是对问题领域中实体、事件的抽象。
对象具有以下特性:
1)万物皆为对象。
问题
领域中的实体和概念都可以抽象为对象。
例如学生,成绩单、教师、课和教室。
2)每个对象都是惟一的。
正如世界上不存在一模
一样的叶子。
3)对象具有属性和行为。
例如小张,性别女,年龄22,身高1.6m,体重40kg,能够学习,唱歌。
小张的属性包括姓
名、性别、年龄、身高和体重,行为包括学习、唱歌。
例如一部手机,牌子是诺基亚、价格是2000元,银白色,能够拍照、打电话
和收发短信等。
这部手机的属性包括品牌类型type、价格price和颜色color,行为包括拍照takePhoto(),打电话call(),收发短
信receiveMessage()和发短信sendMessage().
4)对象具有状态。
状态是指某个瞬间对象的各个属性的取值。
对象的某些行为会改
变对象自身的状态,即属性的取值。
例如小张本来体重为40kg,经为减肥后,体重减到45kg.
肥胖状态:
40kg
|
|减肥行为
|
肥胖状态:
35kg
5)每个对象都是某个类的实例
。
小张和小王都属于学生类、中国和美国都属于国家类、中文和英文都属于语言类。
类是具有相同属性和行为的对象的集合。
同一
个类的所有实例都有相同属性,但属性取值不一定相同,也就是它们的状态不一定相同。
例如小张和小王都属于学生类,都有姓名
、性别、年龄、身高和体重这些属性,但是他们的属性取值不同。
同一个类的所有实例都有相同行为,意味着它们具有一些相同的
功能。
8、类
类创建对象的模板,创建类语法为:
[]class[extendssuperclass][implements
interfacea,....]{
[]
[]
[]
}
修
饰符+返回类型+methodName(参数列表){
方法体;
}
void
9、实例化对象
new+构造方法
引用变量名.属性名或者方法名;
类创
建好之后,通过new关键字创建具体对象。
它有以下作用:
.为对象分配内存空间,将对象的实例变量自动初始化为其变量类型的
默认值;(Java对象的默认初始化规则:
数值型:
0或者0.0;字符型:
"\u0000";逻辑型:
false;引用类型:
null;)
.如实例
变量显示初始化,将初始化值赋给实例变量;
.调用构造方法;
.返回对象的引用;
注:
结合实例,并画内存分配图讲解。
10.基
本类型和引用类型的区别
1)基本类型代表简单的数据类型,比如整数和字符。
引用类型代表复杂数据类型,引用类型所
引用的实例包括操纵这种数据类型的行为。
通过"."运算符,就能访问引用变量所引用的实例的方法.
2)基本类型Java虚拟机会
为其分配数据类型实际占用的内存空间;
引用类型仅是一个指向堆区中某个实例的指针。
例:
public
classCounter{
intcount=13;
}
Countercounter=newCounter();
counter引用变量------------->Counter实例
count变量(占4个字节,值为13)
counter引用变量的取值为Counter实例的内存地址。
counter引用变量本身也占一定的内存空间,到底占用多少内存空间取决于Java虚拟机的实现,这对Java程序是透明的。
注:
counter引用变量到底位于Java虚拟机的运行时数据区的哪个区?
取决于counter变量的作用域,如果是局部变量,则位于Java
栈区;静态成员变量,则位于方法区;实例成员变量,则位于堆区;
要求:
写一个Teacher类,属性:
name,age,gender,salary
对于属
性赋值和取值并打印本对象信息
对老师的salary做操作--->写方法,给每个老师加薪,减薪
写一个测试类测试所写的方法
ch03表达
式、运算符、流程控制
1、运算符
算术运算符:
+-*/%++--;
自增自减符号:
可以放在变量的前面也可以放在后面,放在后
面表示先取变量值再自增或者自减1,放在变量前面先自增或者自减1再取变量值;
比较运算符:
>>=<<===!
=instanceof
引用
名instanceof类型名;
判断引用是否指向某一类型或者其子类型的实例;
逻辑运算符:
&&||!
&|^
语法:
进行逻辑运算的逻
辑值或者逻辑表达式
短路与:
&&
A&&B:
只有当A的值为true才会考虑B,A,B都为true时返回true,否则false;
短路或:
||
A||
B只有当A为false时才考虑B,A,B都为false时返回false,否则返回true;
位运算符:
&|^~
移位运算符:
<<>>>>>
对整数
的二进制数进行移位处理;
a<
将二进制形式的a左移b位,最高位b为抛弃,低位(右侧)空出的b位补0;
a>>b带符号右
移:
将二进制形式的a右移b位,最右侧的b为抛弃,最高位空出的b位补原来的符号位;
a>>>b无符号右移:
将二进制形式的a右移b
位,最右侧的b为抛弃,最高位空出的b位补0;
inta=5;
00000000000000000000000000000101
a<<2
0000000000000000000000000000010100
a>>2000000000000000000000000
000000010100000000000000101
inta=-5
1000000000000000
a>>>200000000000000000
0000000000000101
11111111111111111111111111111010
1111111111111111
1111111111111011
a<<21111111111111111111111111111101100
a>>21111111111111111
111111111111111011
a>>>20011111111111111111111111111111011
赋值运算符:
=
赋值运算符的左
边必须是已经声明过的变量,不能是常量或者复合表达式;
运算符左右两边必须是相同的数据类型,可以进行类型自动转换的除外
;
aE=b;
a=aEb;
条件运算符:
?
:
(条件表达式)?
(值1):
(值2);
字符串连接符:
+
2、表达式:
符合一定语法规则的运算符和操作
数组成的序列;
3、类型转换
基本数据类型转换和引用类型转换
基本数据类型转换:
隐式转换(自动转换):
从窄精度类型向宽精
度类型转换;intb=3;longd=b;
显示转换(强制类型转换):
从宽精度类型向窄精度类型转换;
longd=234;inta=(int)d;
byte
-->short-->int-->long-->float-->double
char-->int
引用类型转换:
隐式转换(自动转换):
让父类型的引用指向子类型实例(
对象);
Objectobject=newString("abc");
显示转换(强制类型转换):
让子类型引用转换为父类型;
Stringstr=(String)
object;
4、流程控制语句
顺序结构:
最简单的基本结构,按照语句顺序执行;
选择(分支)结构:
按照给定条件判断,条件为true
执行一个分支,为false执行另一个分支;
包括if选择结构和switch分支结构:
if选择结构:
b代表一个逻辑表达式
if(b){
statementorblock;
}
if(b){
statementorblock;
}else{
statementorblock;
}
if(b){
statementor
block;
}elseif(b){
statementorblock;
}elseif(b){
statementorblock;
}
.....
[else{
statementorblock;
}]
if选
择结构可以嵌套;
switch选择结构:
switch(expression){
case(常量1):
{
statementorblock;
break;
}
case(常量2):
{
statementorblock;
break;
}
......
[dafault:
{
statementorblock;
break;
}]
}
expression值的类型只能是int,byte,short,char,枚举,类类型之一;
break
使得执行完一个分支后跳出switch语句,从语法上来讲可以没有break,但是不合语
意;
default语句可以放在switch结构的任何位
置;
循环结构:
按照需要使得重复执行一行或者多行代码;
for循环:
用于循环次数已知的情况;
while循环:
又称为当型循环或者
前测试循环,该循环有可能一次都不执行;
do...while循环:
又称为直到型循环或者后测试循环,该循环至少执行一次;
foreach
循环:
*
***
*****
*******
*********
***********
i为行标
每行*的个数为2i-1个;
每行要打印n-i个空格;
break语
句:
用于终止所在的switch语句或者循环语句;用于终止循环时终止的是所在单层循环;
continue语句:
用于结束