一章 JAVA简介
一. 认识JAVA
1. SUM公司开发,非微软
2. 原名:Oak
3. java 之父:James Gosing
4. Internet 救了JAVA,JAVA 成就了Internet
二. JAVA 的3 个版本
1. j2se 标准版本 桌面应用程序
2. j2ee 企业版 服务器,客户端
3. jeme 微型版 原始,手机开发
三. 2 种程序类型
1. Appleet 小应用程序
2. 应用程序
四. 开发环境
1.JDK: JAVA 开发工具包,版本 1.4 或1.5
工具包目录:
bin :命令文件 lib:类库文件
demo:演示程序 jre:运行环境
3. 配置环境变量
(1).右击我的电脑-->属性-->高级-->环境变量
配置: Path: java 完整路径/bin ; 注:路径与路径用分号隔开
(2).classpath: java路径/lib;.; 注:点表示当前文件夹
(3).开发过程
a.编码,记事本
例:
class 类名
{
public static void main(String args[])
{
System.out.println("输出内容");
}
}
注:String, System 第一个字母大写
类名与文件名相同,区分大小写
源文件点后缀.java
b.运行-->Cmd-->文件存放位置 CD命令 进入
编译格式: Javac 文件名.java
运行格式: Java 文件名
注:编译时,文件名一定要带后缀.Java ,在编译后产生.Class字节码文件.
System.out.println() println 换行,print 不换行
+:能相加则相加,不能则相连
例:
a=10;
System.out.println("a="+a);
结果:a=10;
(4).虚拟机:JVM 负责解释字节码,
JVM 实现了跨平台,但本身不跨平台,
java 解释运行:源文件.java--javac 编译-->字节码.class--jvm解释-->机器码
C 编译运行:源文件--编译-->目标C机器码
注释:/** */文档注释,通过java doc 指令生成帮助
二章.JAVA 语言基础
一.数据类型
byte 1字节,数据传输
char 2字节,带单引号,可存放汉字
整型 short
int
long
数字
float 1.5F float 中的F不能省略,否则为double类型
小数
基本数据类型 double 1.5L L 可省略
布尔型:boolean, true(真) / false(假)
二.引用数据类型
1.数组
2.类
3.接口
注:1.大小:由大到小: double-->float-->long-->int-->short/char-->byte
2.结果类型为大类型:
例:(1)
int a=10,float b=1.5f,c=a+b;
结果 c 为 float 类型
例:(2)
3>4?9.9:5
结果为 5.0,取大类型 double
3.小类型到大类型自动转换,大类型到小类型必须强制转换
例:(3)
int a=(int)1.5;
1.5为double 类型,将double 类型转换为int 类型
4.数字不能转布尔,布尔不能转数字
5.整数在运算时都提升为int 类型,即结果至少是int 类型
例:(4)
byte a=1;
byte b=2;
byte c=a+b; 报错,因为a,b 在运算时提升为int 类型
改:int c=a+b; 或 byte c=(byte)(a+b);
三.变量
1.先声明再使用,命名:可包含字母,数字,符号,但不能使用数字开头,可使用 $Aa_作为开头 A_123;
2.变量的作用域,包含他的代码块 {}
3.运算符
a.&& 短路与,如果前面为假,直接为假,不再运算
& 与, 全部运算, 两个条件为真,结果为真
例:(5)
int a=0;
if (3>4& ++a==2) 结果为:假 a=1;
if (3>4&& ++a==2) 结果为:假 a=0;
b.|| 短路或, 如果前面为真,结果为真,不再运算
| 或, 全部运算,只要一个条件为真,结果为真
c.^ 异或, 不同不真,相同为假
d.if(表达式) 表达式必须为布尔型,
swith(表达式) 表达式必须为非长整数,每个case 都必须加break,否则一直往下执行,default位置可任意,但执行顺序
先case后default
嵌套循环:大循环一次,小循环一轮,
例:(6)
for (int i=1;i<5;i++){}
1到4循环,跳出循环时i 为5
四.数组
类型 数组名 申请空间 空间类型 空间大小 引 用 对 象
1.声明: int a[] = new int [5]; double b[]=new double[10];
通过引用(名)找到对象, 数组分类: 引用 和 对象 两类
注:第一个[]不能加空间大小(数字),第二个[]长度可为变量
例:(7)
int a[] =new int [10];
int b[]={1,2,3}; b[]中不能加长度,可在声明数组时赋值
int c[]=new int [3]{1,2,3}; 错误,在声明赋值时[]中不能规定空间大小 [3]
int d[]; d={1,2,3} 报错 数组只有在初始化集体赋值,否则只能单个赋值
先产生引用,再指向对象
int e[]=new int [3];
int f[]={1,2,3,4};
a=b;
可以,只是引用的转移,a抛弃原用的3块空间,与b 共同指向后4块空间,后4块空间有2个名
2.命令行参数
java 文件名 参数1 参数2,参数n,
注:a.参数之间用空格隔开,
b.命令行参数会自动存入args[]数组中,
c.下标从0开始,
d.参数为 String 型字符串
e.字符串转int 类型
例:(8)
int a=Integer.parseInt(args[0]);
字符串转float 类型
float b=Float.parseFloat(args[1]);
f.如果提供参数不够,报错
三章.面向对象的概念和java实现
一.OOP:Object Oriented Programming 面向对象编程
面向过程:为解决问题而采用的步骤
面向对象:制造对象,解决不类问题
类制造者:制造对象
类使用者:掌握尽可能多的类
类: 一类对象的总称,描述对象,制造对象
对象: 一切皆为对象
属性:特征,状态(变量)
方法:行为,功能(函数)
抽象:关注重要属性为方法,忽略次要(提取)
消息传递:对象之间通讯
封装:隐藏属性和方法,及实现过程
1,代码
Class 类名
{
类型 变量名; //用变量表属性
返回类型 函数名(参数)
{
功能; //用函数表示方法
}
}
2.实例化对象
a.类名 对象名=new 类名();
b.类名 对象名;
对象名=new 类名();
Teacher t =new Teacher(); //Teacher 为类名 产生一个老师类型的对象名为t
new 为对象在堆中开辟空间
Teacher() 构造函数,制造对象
Teacher t;声明一个引用指向对象,相当于对象名
3.属性,方法
对象名.属性名 对象名.方法名()
注:类中只能包含属性和方法,涌有其它代码(即代码必须放在方法中)
4.变量
成员变量(属性) 有默认值,数字为 0,布尔型为flase, 对象为null
方法中的变量:无默认值,未赋值直接使用报错
构造方法:制造对象(初始化对象)与类同名
分类:
(1).默认构造函数
(2).显示构造函数
a.无参构造函数
b.有参构造函数
格式:
类名(类型1,参数1.....)
注:a.构造方法与类同名,无返回类型
b.可以有多个构造方法,但参数的类型和个数不一样,系统会根据参数调用不同的构造方法
c.构造方法必须写在new 后面
d.如果不写显示构造方法,系统调用默认构造方法,如果有显示构造方法,默认构造方法自动消失
二.包:文件夹
作用:
1.保护类,属性和方法
2.层次分明,便于管理类
3.避免命名冲突
操作步骤:
1.建立包 package 包名,习惯小写
注:package 必须位于第一行,不能有两个package
2.编译时为包指定位置
javac -d 位置 类名.java
例:
javac -d c:/ Teacher.java
javac -d . student.java 点代表当前文件夹
3.跨包调用
import 包名.类名
注:
a.可以有多个import
b.也可以不写import,使用时直接 包名.类名
c.被调用的类,方法,属性必须为public,参数可以是对象,如果改变对象的属性是有效的(影响原值)
如果改变对象的引用是无效的(不影响原值)
例:
Class Yufu
{
String zt="脏了";
}
Class Demo
{
public static void main(String args[])
{
Yifu yf=new Yifu();
Gxd g=new Gxd();
g.xi(yf); //让干洗店洗衣服
}
}
Class Gxd
{
void xi (Yifu y)
{
y.zt="干净了"; //y 和 yf是指同一件衣服,所以yf.zt由脏变成干净
y=new Yifu();
y.zt="干净了"; //因为不是同一件衣服,所以yf.zt还是脏的
}
}
四章.面向对象的概念和java实现(2)
一.面向对象的三大特征
封装:隐藏细节
继承:子类重用父类的代码
多态:方法的同名不同用
继承只能是单一的,即一个子类只能有一个父类,一个父类可以有多个子类
继承:层次/重用
语法:
Class 子类 extends 父类
注:
a.子类可以重用父类的属性和方法
b.父子关系是相对的
c.构造子类对象时会先调用父类的构造方法再调用子类的构造方法
d.只能自动调用父类无参构造方法,如父类无无参构造方法报错
super: 手动调用父类构造方法/调用父类普通方法
语法:
1.调用父类构造 super(参数) 注:必须位于子类构造方法的第一行
2.调变通方法 super.方法名() 注:无位置要求
二.多态
1.重载:在同一类中,方法名相同,参数个数,类型或顺序不同 注:与返回值参数名无关
2.重写:在子类中重写父类的某个方法
作用:改写父类和改善欠类方法
注:
a.重写时,方法名和参数必须完全一样
b.不能缩小访问范围
c.不能扩大异常的范围
三.final :终级类
final 类:是不能被继承
final 方法:不能在子类中重写
final 属性:常量,不能改变
四.static :静态(全局)
1.方法:类名.方法名()
2.属性:类名.属性名
3.代码块:
a.先加载静态属性,方法,再有对象
b.静态方法中只能使用静态属性
c.静态方法中不能使用this 和 super关键字
五.abstract :抽象
1.抽象类:不能实例化,即不能产生对象,只能被继承
2.抽象方法:只能方法的声明没有方法体
语法:
abstract 返回类型 方法名(参数)
注:
a.子类必须实现父类的所有抽象方法除非子类出变成抽象类
b.有抽象方法的类必须为抽象类,抽象类中不不一定要有抽象方法
六.接口: 多重继承,描述业务规则
定义:interface 接口
注:
a.接口中的所有方法都是抽象方法且公有,自动加public,abstract
b.接口中的属性都是public ,static ,final 即常量,子类实现接口
c.接口不能产生对象
语法:
Class 类名 implements 接口名1,接口名2
注:
a.子类必须实现接口中的所有方法
b.所有方法都必须加public
c.子类实现接口,子类继承父类
d.类对类用extends, 类对接口用 implements, 接口对接口用extends
七.修饰符
private 私有 protected 受保护 default 缺省 public 公有
只读属性
private String name; //将属性变为私有
String getName();
{
return name; //只读
}
只写属性
private String PassWord;
void setpassword(String pwd)
{
PassWord=pwd; //为该属性配写方法
}
五章.异常
一.错误:
1.语法错误(编译时出错)
2.运行时出错(异常)
3.逻辑错误
二.异常关键字
try, catch finally throw throws
如果出现异常未处理,程序中止
try,catch格式:
try
{
可能出现异常的代码(监视代码)
}
catch(异常类,引用)
{
处理代码
}
注:
1.一个try可以有多个catch,只执行一个catch,即处理一次
2.父类可以捕获子类的异常,所以父类必须位于子类之后
3.异常处理可嵌套,先内后外
4.常用的处理错误的两种方法
tx.printStackTrace(); //显示异常的详细信息
System.out.println(ex.toString()); //显示异常
finally 强制要求某段代码必须执行除 System.exit(0)
注:
try,catch,finally 不能单独出现,不能只出现catch 和 finally
thorws 抛出异常,谁调用谁处理
thorw 引发异常,格式: void 方法名() thorws 异常
自定义异常
class Fushuexception extends RuntimeException
{
public String toString(); //重写toSting 方法
{
return ("不能是负数");
}
}
Class yanzheng //产生异常
{
static void yz(int a)
{
throw new FushuException ();
}
}
Class Demo //测试,捕获异常对象
{
public static vodi main (String args[])
{
int i=Integer.ParseInt(args[0]);
try
{
yanzheng.yz(i); // 产生对象异常
}catch (FushuExcetion e) //捕获
{
System.out.println(ex.toString()); //调用异常的toSting方法
}
}
}
六章.JAVA.lang 包
前提:java.lang 自动导入(即可写可不写)
一.包装类
1.作用:将原始数据类型包装成对象进行操作,得到相应属性和方法
2.八种基本数据类型的包装类名为将首字母大写,但int 为Integer,char 为characher
3.产生对象
a. Integer 对象名=new Integer(20);
Integer 对象名=new Integer("100");
b.Integer 对象名=Integer.valueof(20);
4.变通方法
a.将字符串转换为数字
Integer.parseInt("20");
Float.parseFloat("20.5"); //类名.方法名()
b.将数字转换为字符串
String.valueof(10)
二.String 是类,不是基本数据类型
1.作用: 产生字符串,并提供方法对字符串进行操作
2.产生字符串
a.直接产生,指向字符串池,String str="java";
b.利用构造方法指向堆空间
String str=new String ("java");
char c[]={'j','a','v','a'};
String str2=new String(c);
3.字符串池:如果池中已存在现成的相同的字符串不再产生新的,直接使用,节约空间
堆空间:不管是否存在,都产生新字符串,可回收
4.字符串比较
equals() 比较字符串的字面是否相同
== 比较字符串是否指向同一对象
5.常用方法
a.length() 长度, 注:数组中length 为属性
b.charat(位置) 查看某位置上的字符
c.indexof('字符') 查看某字符的位置,没找到位置为-1
d.substring(开始位置,结束位置) 截取字符串
三.StringBuffer 可变字符串,但String 不可变
1.构造对象
StringBuffer sb=new StringBuffer("字符串");
2.常用方法
append() 追加 delete() 删除
insert() 插入 reverse() 反转
四.Math 数学类,包含数学计算的方法
所有方法都是静态方法, 类名.方法名()
五.oBject类,是所有对象的父类(根类)
toString() 转换成字符串
六.Class 类,用于检索类的信息
七章.java.util 包 显示导入