java 基础入门

java基础学习笔记(一)

java优势:面向对象、可移植、分布式、动态性、多线程。。。

java安装路径 D:\java8\jdk\

测试jdk是否安装成功,在cmd输入 Java -version

编写代码输出HelloWorld

public class Hello{
    public static void main (String[] arg){
        System.out.print("Hello,World!");
    }
}

编译javac

在这里插入图片描述

java 程序运行机制

编译型

全部编译,但更新麻烦(操作系统、C/C++)

解释型

走一步运行一步,效率低(网页、Java、Python)
Javac——class——解释器解释

IDEA运行Hello World

快捷键:psvm, sout

Java基础语法

注释

单行 //
多行 /* 我是多行注释 /
文档 /
* */ ( /**开头, */结尾)

public class HelloWorld {
    public static void main(String[] args) {
        //单行注释

        /*
        我是多行注释
         */
         
        //文档注释
        /**
         *
         * */
        System.out.println("Hello,World!");
    }
}
标识符
关键字

abstract class extends implements null strictfp true
assert const false import package super try
boolean continue final instanceof private switch void
break default finally int protected synchronized volatile
byte do float interface public this while
case double for long return throw
catch else goto native short throws
char enum if new static transient

标识符注意点
  • 标识符由数字(0-9)和字母(A-Z 和 a-z)、美元符号($)、下划线(_)以及 Unicode 字符集中符号大于 0xC0 的所有符号组合构成(各符号之间没有空格)
  • 标识符的第一个符号为字母、下划线和美元符号,后面可以是任何字母、数字、美元符号或下划线
  • 标识符大小写敏感
  • 标识符不能重名
数据类型
强类型语言

所有变量定义后才能用

基本类型(整数、浮点、字符)
  • 数值类型:

     整数类型:byte占1个字节范围:-128~127    (2的8次方除以2)
                       short占2个字节范围:-32768~32767
                       int占4个字节范围:-2147483648~2147483647
                       long占8个字节范围:-9223372036854775808~9223372036854775807
     浮点类型:float 占4个字节
                       double 占8个字节
     字符类型:char占2个字节
    
  • 布尔类型:占1位,值只有true、 false

引用类型

  • 接口
  • 数组
科普一下基本知识在这里插入图片描述
//输入
        //float   有限   离散    舍入误差       大约       接近但不得等于
        //double
        //最好完全避免使用浮点数进行比较     
        float f =0.1f;
        double d =1.0/10;
        System.out.println(f==d);//false

        float d1=231231231231f;
        float d2=d1+1;
        System.out.println(d1==d2);//true
        //浮点数扩展       银行业务怎么表示?钱
        //DigDecimal   数学工具类
//输出
false
true
Class transformation time: 0.0182823s for 105 classes or 1.7411714285714286E-4s per class
变量

Java 强类型语言,变量必须声明类型
变量:Java最基本存储单元,包括变量名、数据类型和作用域
作用域包括:类变量、实例变量、局部变量。

//变量练习
public class Demo05 {
    //类变量 static 从属于类
    static double salary = 2500;

    //属性:变量

    //实例变量,在类的里面,方法外面。从属于对象(Demo05)
    //实例变量如果不初始化,这个类型的默认值  0   0.0    布尔值:默认false
    //除了基本类型其余默认值都是null
    String name;
    int age;

    //main 方法
    public static void main(String[] args) {

        //局部变量;必须声明和初始化;只在括号内有用
        int i = 10;
        System.out.println(i);

        //变量类型(自定义类型)  变量名字  = new Demo05();
        Demo05 demo05 = new Demo05();
        System.out.println(demo05.age);
        System.out.println( demo05.name);

        //类变量 static
        System.out.println(salary);

    }
    //其他方法
    public void add() {

    }

}

输出

10
0
null
2500.0
常量

关键词 final
final 常量名 = 值;
常量名一般用大写

//常量定义 final
public class Demo06 {
    //static修饰符,没前后顺序.
    static final double PI1 = 3.14; //静态常量
    final static double PI2 = 3.14;

    public static void main(String[] args) {
        final double PI = 3.14;

        System.out.println(PI);
        System.out.println(PI1);
        System.out.println(PI2);
    }
}

输出

3.14
3.14
3.14
变量命名规范

在这里插入图片描述

运算符

①、算术运算符。

+ — * / %

%:任何整数模2不是0就是1,所以只要改变被模数就可以实现开关运算。

+:连接符。

++,——

package operator;

public class Demo02 {
    public static void main(String[] args) {
        long a = 219377732828828L;
        int b =1000;
        short c=10;
        byte d=8;

        System.out.println(a+b+c+d); //long  有一个数为long,结果就为long
        System.out.println(b+c+d); //int   没long,结果都为int
        System.out.println(c+d);//int

    }
}

输出
219377732829846
1018
18

②、赋值运算符。

= += —= *= /= %=

③、关系运算符。

特点:该运算符的特点是:运算完的结果,要么是true,要么是false。

package operator;

public class Demo03 {
    public static void main(String[] args) {
        //关系运算符,运算结果,要么是true,要么是false
        int a=10;
        int b=20;
        int c=21;

        System.out.println(c%a);//取余数

        System.out.println(a>b);
        System.out.println(a<b);
        System.out.println(a==b);
        System.out.println(a!=b);

    }
}


输出
1
false
true
false
true

④、逻辑运算符。

& | ^ ! && ||

逻辑运算符除了 ! 外都是用于连接两个boolean类型表达式。

&: 只有两边都为true结果是true。否则就是false。

|:只要两边都为false结果是false,否则就是true

^:异或:和或有点不一样。

两边结果一样,就为false。

两边结果不一样,就为true.

& 和 &&区别: & :无论左边结果是什么,右边都参与运算。

&&:短路与,如果左边为false,那么右边不参数与运算。

| 和|| 区别: |:两边都运算。

||:短路或,如果左边为true,那么右边不参与运算。

⑤、位运算符:用于操作二进制位的运算符。

& | ^

<< >> >>>(无符号右移)

//逻辑运算符
public class Demo05 {
    public static void main(String[] args) {
        // 与 获 非
        boolean a = true;
        boolean b = false;
        System.out.println("a && b:"+ (a && b));//两个为真结果才true
        System.out.println("a || b:"+(a || b));//两个中一个为真结果为true
        System.out.println("!(a && b):"+!(a && b));//如果是真则为false

        //短路运算
        int c =5;
        boolean d =(c<4)&&(c++<4);//c<4为false,后面不执行
        System.out.println(d);
        System.out.println(c);
    }
}

输出
a && b:false
a || b:true
!(a && b):true
false
5
package operator;

public class Demo06 {
    public static void main(String[] args) {
        /* 位运算
          A=0011 1100
          B=0000 1101

          A&B (两个都为1才1)   1100 1100
          A/B (都是0才为0,有一个1则为1)  0011 1101
          A^B (相同则为0,不同为1)  0011 0001
          ~B  (取反)   1111 0010

           2*8怎么最快   2*2*2*2
           效率高
           << 左移   *2
           >> 右移   /2

           0000 0000   0
           0000 0001   1
           0000 0010   2
           0000 0011   3
           0000 0100   4
           0000 0101   5
           0000 1000   8
           0001 0000   16
         */
    }
}
public class Demo07 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        a+=b;
        a-=b;
        System.out.println(a);

        //字符串连接符 +
        System.out.println(a+b);
        System.out.println(""+a+b); //前面出现String类型,都转为 String
        System.out.println(a+b+"");  //后面出现String类型,依旧运算
    }
}

输出
10
30
1020
30
三元运算符
public class Demo08 {
    public static void main(String[] args) {
        //三元运算符
        //x ? y : z
        //x 为 true结果为 y 否则为 z
        int score =80;
        String type = score < 60 ? "不及格" : "及格";
        System.out.println(type);
    }
}

输出
及格
包机制

包的本质是文件夹
一般用公司域名倒置作为包名 com.baidu.www
导包 :按住alt + 回车
导入包下所有文件:

import com.lqy.base.*;

JavaDoc

  • 方法1:用命令行生成JavaDoc文档(生成前要确保operator文档中有Doc.java这个文件)
    在这里插入图片描述
    -方法2:用idea导出
    先编辑java文件
package com.lqy.operator;
/**
 * @author 作者名
 * @version  版本号
 * @since  最早用的jdk版本
 */

public class Doc {
    String name;
    /**
     * @author
     * @version
     *@since
     */

    public String test(String name) throws Exception{
        return name;
    }

}

在这里插入图片描述
在这里插入图片描述

  • 第一步:选择生成JavaDoc文档的范围,我对文件生成Doc,所以选择File。
  • 第二步:确定输出路径。
  • 第三步:区域设置,决定文档的语言,简体中文就是zh_CN、繁体(台湾)zh_tw、繁体(香港)zh-hk、英语(香港)en-hk、英语(美国)en-us、英语(英国)en-gb、英语(全球)en-ww。
  • 第四步:其他命令行参数:如果区域设置为中国,参数一般为-encoding UTF-8 -charset UTF-8
  • 第五步:点击OK即可生成
  • 第六步:打开输出的路径,找到 index.html 便能看生成的文档
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
第 一 章   Java概 述 § 1.1 Java语 言 出 现 的 背景 、 影 响 及 应 用 前 景 一 、 背 景 最 近 一 年 多 来 ,在 Internet上 出 现 的 特 别 吸 引 人 的 事 件 就是 Ja va语 言 和 用 Java编 写 的 浏 览 器 HotJava。 1991年 ,SUN MicroSystem 公 司 的 Jame Gosling、 Bill Joe等 人 , 为 在电视 、 控 制 烤 面 包箱 等 家 用 消 费 类 电 子 产 品 上 进 行 交 互 式操 作 而 开 发 了 一 个 名为 Oak的 软 件 (即一 种 橡 树 的 名 字 ), 但当 时 并 没 有 引 起 人 们 的 注 意 ,直 到 1994年下 半 年 ,Internet的 迅猛发 展 ,环 球 信 息 网 WWW的 快 速 增 长 ,促 进 了 Java 语 言 研 制 的 进展 ,使 得 它 逐 渐 成为 Int ernet上 受 欢 迎 的 开 发 与 编 程 语 言 ,一 些著 名 的 计 算 机 公司 纷 纷 购 买 了 Java 语言 的 使 用 权 , 如 Mi-croSoft、 IBM、 Netscape、 Novell、 Apple、 DEC、 SGI 等,因 此 ,Java 语言 被 美 国 的 著 名 杂 志 PC Magazine 评 为 1995年 十 大 优 秀科 技 产 品,(计 算 机 类 就 此 一项 入 选 ),随 之 大 量 出 现 了 用 Java编写 的 软 件 产 品 ,受 到 工 业 界的 重 视 与 好 评 ,认 为 "Java是八 十 年 代 以 来 计 算 机 界 的 一 件 大 事 ", 微 软 总 裁 比 尔 ·盖 茨 在 悄 悄 地 观 察了 一 段 时 间 后 ,不 无感 慨 地 说 :"Java是 长 时 间 以 来 最 卓 越 的 程序 设 计 语 言 ",并确 定 微软 整 个 软 件 开 发 的 战 略 从 PC 单 机 时 代 向 着 以 网 络为中 心 的 计 算 时 代 转 移 ,而 购 买 Java则 是 他 的 重 大 战 略 决 策的实施 部 署 。因 此 ,Java的 诞 生 必 将 对 整 个 计 算 机 产 业 发 生 深远的 影 响,对 传 统 的 计 算 模型 提 出 了 新 的 挑 战 。 SUN MicroSystem 公 司 的 总 裁 Scott McNealy认 为 Java为 Internet和WWW开辟 了 一 个崭 新 的 时 代 . 环 球 信 息 网 WWW的 创 始 人 Berners-Lee说 : "计 算 机 事 业 发展 的下 一 个 浪 潮 就是 Java,并 且 将 很 快 会 发 生 的 "。看 来 ,使 用 Java已 成 大 势 所 趋 ! MicroSoft 和 IBM 两 大 公 司 都 计 划 在 Internet上 销 售 用 Java 编写的 软 件 。 Apple、 HP、 IBM、 MicroSoft、 Novell、 SGI、 SCO、 Tandem 等 公 司均计 划 将 Java并入 各 自 开 发 的 操 作系 统 ,而 负 责 开 发 并 推 广 Java技 术 的 SunSoft公司 (这 是 SUN下 属的 一 个 子 公 司 ), 将 通 过 颁发 许 可 证 的 办 法 来 允 许 各 家 公 司 把Java虚 拟 机 和 Java的Applets类库 嵌 入 他 们 开 发 的 操 作 系 统 ,这 样 各 类 开 发 人 员 就 能更 容易 地 选 择 多种 平 台 来 使 用 Java语 言 编 程 ,不 同 的 用 户 也 就 可以 脱 离 Web浏 览器 来 运 行 Java应 用程 序 ,这 无 疑 是 很 受 广 大 用户 欢 迎 的 ,也 为 Java语 言 的 应 用 开 拓了极为 广 阔 的 前景 。 (当然 ,各 类 JavaOS之 间 的 兼 容 性 必 须 得 到 重 视 ,好 在JavaSoft已 保证 将 监 督 这种 兼 容 性 )。 另 外 ,由 JavaSoft 推 出 的 完 全 用 Java编 写 的 Internet上 新 型 浏览器 HotJava,比 去 年alpha版 更 为 实 用 ,不 仅 能 编 制 动 态 的 应 用 软件 ,而 且 能 编 制 完整 的 成 套 桌 面 应 用软 件 ,将 来 还 会 提 供 更多 的 能 帮 助 编 制 动 态 应 用 软 件 的 模 块,显 然 ,这 也 是 为 J ava的应 用 提 供 了 有 力 的 例 证 。 今 年 6月 7日 ,由 SUN公 司 和 台 湾 经 济 事 务 部 信 息 发 展 局, 台湾信 息 技 术 研究 所 等 单 位 牵 头 ,成 立 了 一 个 "Java联 盟 ", 参 加 的 有 22个 在 台 湾相 当 著 名 的 计 算 机公 司 ,并 在 台 北 建 立一 个 "Java 开 发 中 心 ",在 新 竹 建 立 一 个 "Java语 言实 验 室 ", 以 掀起 台 湾 开 发 与 应 用 Java 语 言 的 热 潮 。 香 港 则 在 今 年 4月 就 举 行 了 全 岛 的 Java杯 比 赛 ,在 计 算 机界掀 起 了 学 习 Java的热 潮 (尤 其 是 在 大 学 生 们 中 ,出 现 了 一 批 Java迷 )。 有 人 预 言 :Java将 是 网 络 上 的 "世 界 语 ",今 后 所 有的 用 其 他语 言 编 写 的 软 件统 统 都 要 用 Java 语 言 来 改 写 。 二 、 Java 语 言 对 软 件 开 发 技 术 的 影 响 工 业 界 不 少 人 预 言 :"Java 语 言 的 出 现 ,将 会 引 起 一 场软 件革 命 ",这 是 因 为 传统 的 软 件 往 往 都 是 与 具 体 的 实现 环 境 有 关 ,换 了 一 个 环 境 就需 要 作 一 番 改 动 ,耗时 费 力 ,而 Java 语 言 能 在 执 行 码 (二 进 制 码 )上 兼 容 ,这 样 以 前 所开 发 的软 件 就 能 运行 在 不 同 的 机 器 上 ,只 要 所 用 的 机 器 能 提供 Java 语 言 解 释 器 即可 。 Java 语 言 将 对 未 来 软 件 的 开 发 产 生 影 响 , 可 从 如 下 几 个方面 考 虑 : 1 软 件 的 需 求 分 析 :可 将 用 户 的 需 求 进 行 动 态 的 、 可 视化描 述 ,以 提供设 计者 更 加 直 观 的 要 求 。 而 用 户 的 需 求 是 各色 各 样 的 ,不 受 地 区、 行 业 、 部 门 、 爱好 的 影 响 ,都 可 以 用 Java 语 言 描 述 清 楚 。 2 软 件 的 开 发 方 法 :由 于 Java 语 言 的 面 向 目 标 的 特 性 , 所以完 全 可 以 用 O-O的技 术 与 方 法 来 开 发 ,这 是 符 合 最 新 的 软件 开 发 规 范 要 求 的 。 3 Java 语 言 的 动 画 效 果 远 比 GUI技 术 更 加 逼 真 ,尤 其 是 利用WW W提 供 的 巨 大动 画 资 源 空 间 ,可 以 共 享 全 世 界 的 动 态 画面 的 资 源 。 4 软 件 最 终 产 品 :用 Java 语 言   开 发 的 软 件 可 以 具 有 可视化 、 可 听 化 、 可 操作 化 的 效 果 ,这 要 比 电 视 、 电 影 的 效果 更 为 理 想 ,因 为 它 可 以做 到 "即 时 、 交 互、 动 画 与 动作 ",要 它 停 就 停 ,要 它 继 续 就 继 续 ,而 这 是 在 电 影与 电视 播 放 过 程 中难 以 做 到 的 。 5 其 它 :使 用 Java 语 言 对 开 发 效 益 、 开 发 价 值 都 有 比 较明显 的 影 响 。 三 、 工 业 界 对 Java 语 言 的 评 价 1996年 5月 29 ~ 31日 ,在 美 国 旧 金 山 召 开 了 一 个 全 世 界 Java语言 开 发 者 大 会,(JavaOne Developer Confer-ence),出 席 会 议 的 多 达 6500多 人 ,来 自 工 业界 的 超 过 一 半 ,有人 评 价 说 :"这 是 近年 来 计 算 机 界 最 光 辉 的 一 次 盛 会 ",一 些 工 业 界 的 老 总们 相 当看 好 Java 语 言 ,认 为 它 的 使 用 将 会 引 起 一 场 软 件 革命 。 从 软 件的 设 计 风 格 、 设计 方 法 、 设 计 目 标 到 设 计 过 程 ,都 会 产 生 彻 底 的 变 革 ,"甚 至 会改 变 此 星 球 的 生活 方 式 "。 在 这 次 会 上 ,Java的 创 始 人 之 一 James Gosling 说 :"Java 不仅 仅只 是 applets, 它 能 做任 何 事 情 ",Dta 咨 询 公 司 的 高 级软 件 工 程 师 Rich Kadel说 :"Java 不仅 仅 是 一 种 程 序 设计 语言 ,更 是 现 代 化 软 件 再 实 现 的 基 础 ;Java 还 是 未 来 新 型 OS的核 心 ;将 会 出 现Java 芯 片 ;将 构 成 各 种 应 用 软 件 的 开 发 平 台与 实 现 环 境 ,是 人们 必 不 可 少 的 开 发工 具 "。 由 于 各 界 都 看 好 它 ,因 此 ,各 大 公 司 都 纷 纷 表 示 支 持 Java,Inte l、 Xerox公 司 声 言将 把 Java嵌 入 到 他 们 的 产 品 中 去 。 就 连 华尔 街 金 融 界 也 在 投入 资 金 人 力 用 Java开 发 电 子 贸 易 、 金 融软 件 。 所 以 有 人 说 :"现 在 第 三 方 的 开 发 商 都 团 结 在 Java大旗 周 围了 !",纷 纷 推 出 用Java 开 发 的 各 种 软 件 产 品 ,以 期尽 快 地 占 领 市 场 。 四 、 Java 语 言 的 应 用 前 景 Java 语 言 有 着 广 泛 的 应 用 前 景 ,大 体 上 可 以 从 以 下 几 个方面 来 考 虑 其 应 用 : 1 所 有 面 向 对 象 的 应 用 开 发 ,包 括 面 向 对 象 的 事 件 描 述、处 理 、 综 合 等 ; 2 计 算 过 程 的 可 视 化 、 可 操 作 化 的 软 件 的 开 发 ; 3 动 态 画 面 的 设 计 ,包 括 图 形 图 像 的 调 用 ; 4 交 互 操 作 的 设 计 (选 择 交 互 、 定 向 交 互 、 控 制 流 程 等 ); 5 Internet的 系 统 管 理 功 能 模 块 的 设 计 ,包 括 Web页 面 的 动 态设计 、 管 理 和 交互 操 作 设 计 等 ; 6 Intranet(企 业 内 部 网 )上 的 软 件 开 发 (直 接 面 向 企 业 内 部用户 的 软 件 ); 7 与 各 类 数 据 库 连 接 查 询 的 SQL 语 句 实 现 ; 8 其 它 应 用 类 型 的 程 序 。 § 1.2 Java的 特 点 Java是 一 个 广 泛 使 用 的 网 络 编 程 语 言 ,它 是 一 种 新 的 计算概 念 。 首 先 ,作 为 一 种 程 序 设 计 语 言 ,它 简 单 、 面向对象 、 不依 赖于 机 器 的 结 构 、具 有 可 移 植 性 、 鲁 棒 性 、 安 全 性 、 并 且提 供 了 并 发 的 机 制 、具 有 很 高 的 性 能。 其 次 ,它 最 大 限 度 地 利 用 了 网 络 ,Java的小应用程序(applet) 可在网 络 上 传 输 而 不受 CPU和 环 境 的 限 制 。 另 外 ,Java还 提 供 了 丰富 的 类 库 ,使 程 序 设计 者 可 以 很 方 便地 建 立 自 己 的 系 统 。 下 面 我 们 分 别 从 这 三 个 方 面 来 讨 论 Java的 特 点 ,然 后通 过把 Java与 C,C++相 比进 一 步 指 出 它 所 具 有 的 优 点 。 一 、 Java语 言 Java语 言 有 下 面 一 些 特 点 :简 单 、 面 向 对 象 、 分 布 式 、解释 执 行 、 鲁 棒 、安 全 、 体 系 结 构 中 立 、 可 移 植 、 高 性 能、 多 线 程 以 及 动 态 性。 1.简 单 性 Java语 言 是 一 种 面 向 对 象 的 语 言 ,它 通 过 提 供 最 基 本 的方法 来 完 成 指 定 的任 务 ,只 需 理 解 一 些 基 本 的 概 念 ,就 可 以用 它 编 写 出 适 合 于 各种 情 况 的 应 用 程 序。 Java略 去了 运 算 符重 载 、 多 重 继 承 等 模 糊 的 概 念 ,并 且 通 过实 现 自 动 垃 圾 收集大 大 简 化 了 程 序 设 计 者 的 内 存 管 理 工 作 。 另 外 ,Java也 适合于 在 小 型 机 上 运行 ,它 的 基 本 解 释 器 及 类 的 支 持 只 有 40KB左右 ,加 上 标 准 类 库 和线 程 的 支 持 也 只 有 215KB左 右 。 库 和 线程 的 支 持 也 只 有 2 15KB左 右 。 2.面 向 对 象 Java语 言 的 设 计 集 中 于 对 象 及 其 接 口 ,它 提 供 了 简 单 的类机 制 以 及 动 态 的接 口 模 型 。 对 象 中 封 装 了 它 的 状 态 变 量以 及 相 应 的 方 法 ,实现 了 模 块 化 和 信 息隐 藏 ;而 类 则 提 供 了一 类 对 象 的 原 型 ,并 且 通 过 继 承 机 制 ,子 类可 以 使 用 父 类 所提供 的 方 法 , 实 现 了 代 码 的 复 用 。 3.分 布 性 Java是 面 向 网 络 的 语 言 。 通 过 它 提 供 的 类 库 可 以 处 理TCP/IP协议 ,用 户 可 以通 过 URL地 址 在 网 络 上 很 方 便 地 访 问 其 它 对 象。 4.鲁 棒 性 Java在 编 译 和 运 行 程 序 时 ,都 要 对 可 能 出 现 的 问 题 进 行检查 ,以 消 除 错 误 的产 生 。 它 提 供 自 动 垃 圾 收 集 来 进 行 内存 管 理 ,防 止 程 序 员 在管 理 内 存 时 容 易 产生 的 错 误 。 通 过集 成 的 面 向 对 象 的 例 外 处 理 机 制 ,在 编 译 时,Java提 示 出 可能 出现 但 未 被 处 理 的 例 外 ,帮 助 程 序 员 正 确 地 进 行 选 择 以防 止 系统 的 崩 溃 。 另 外,Java在 编 译 时 还 可 捕 获 类 型 声 明 中的 许 多 常 见 错 误 ,防 止 动 态运 行 时 不 匹 配 问题 的 出 现 。 5.安 全 性 用 于 网 络 、 分 布 环 境 下 的 Java必 须 要 防 止 病 毒 的 入 侵 。Java 不 支 持 指 针 ,一切 对 内 存 的 访 问 都 必 须 通 过 对 象 的 实 例 变量 来 实 现 ,这 样 就防 止 程 序 员 使 用 "特洛 伊 " 木 马 等欺 骗 手 段 访 问 对 象 的 私 有 成 员 ,同 时 也 避 免 了指 针 操 作 中容 易 产 生的 错 误 。 6.体 系 结 构 中 立 Java解 释 器 生 成 与 体 系 结 构 无 关 的 字 节 码 指 令 ,只 要 安装了 Java运 行 时 系 统,Java程 序 就 可 在 任 意 的 处 理 器 上 运 行 。这 些 字 节 码 指 令 对 应于 Java虚 拟 机 中 的表 示 ,Java 解 释 器 得到 字 节 码 后 ,对 它 进 行 转 换 ,使 之 能 够 在 不同 的 平 台 运 行 。 7.可 移 植 性 与 平 台 无 关 的 特 性 使 Java程 序 可 以 方 便 地 被 移 植 到 网 络上的 不 同 机 器 。同 时 ,Java的 类 库 中 也 实 现 了 与 不 同 平 台 的 接口 ,使 这 些 类 库 可以 移 植 。 另 外 ,Java编 译 器 是 由 Java语 言 实现 的 ,Java运 行 时 系 统 由 标 准 C实 现 ,这使 得 Java系 统 本 身 也具有 可 移 植 性 。 8.解 释 执 行 Java解 释 器 直 接 对 Java字 节 码 进 行 解 释 执 行 。 字 节 码 本身携 带 了 许 多 编 译时 信 息 ,使 得 连 接 过 程 更 加 简 单 。 9.高 性 能 和 其 它 解 释 执 行 的 语 言 如 BASIC、 TCL不 同 ,Java字 节 码 的 设计使 之 能 很 容 易地 直 接 转 换 成 对 应 于 特 定 CPU 的 机 器 码 ,从 而得 到 较 高 的 性 能。 10.多 线 程 多 线 程 机 制 使 应 用 程 序 能 够 并 行 执 行 ,而 且 同 步 机 制 保证了 对 共 享 数 据 的正 确 操 作 。 通 过 使 用 多 线 程 ,程 序 设 计 者可 以 分 别 用 不 同 的线 程 完 成 特 定 的 行为 ,而不 需 要 采 用 全 局的 事 件 循 环 机 制 ,这 样 就 很 容 易 地 实 现 网 络 上 的 实 时 交 互行为 。 11.动 态 性 Java的 设 计 使 它 适 合 于 一 个 不 断 发 展 的 环 境 。 在 类 库 中可以 自 由 地 加 入新 的 方 法 和 实 例 变 量 而 不 会 影 响 用 户 程 序的 执 行 。 并 且Java通 过 接 口 来 支 持 多重 继 承 ,使 之 比 严 格 的类 继 承 具 有 更 灵 活 的 方 式 和 扩 展 性 。 二 、 Java Applet Java语 言 的 特 性 使 它 可 以 最 大 限 度 地 利 用 网 络 。 Applet是Jav a的 小 应 用 程序 ,它 是 动 态 、 安 全 、 跨 平 台 的 网 络 应 用 程 序。 Java Applet嵌 入HTML语 言 ,通 过 主页 发 布 到 Internet。 网 络 用 户访 问 服 务 器 的Applet时 ,这些Applet 从网 络 上 进 行 传 输 ,然 后 在支 持 Java 的 浏 览 器 中 运 行 。 由 于 Java语 言 的 安 全 机 制,用 户一 旦 载 入Applet,就 可 以 放 心 地 来 生 成 多 媒 体 的 用 户 界 面 或完 成 复 杂 的计 算 而 不 必 担 心 病毒 的 入 侵 。 虽 然 Applet可 以 和图 像 、 声 音 、 动 画 等 一 样 从 网 络上 下 载 ,但 它 并 不同 于 这些 多 媒 体 的 文 件 格 式 ,它 可 以 接 收 用 户 的 输 入 ,动 态 地进 行改 变 ,而 不 仅 仅是 动 画 的 显 示 和 声 音 的 播 放 。 三 、 丰 富 的 类 库 Java提 供 了 大 量 的 类 以 满 足 网 络 化 、 多 线 程 、 面 向 对 象系统 的 需 要 。 1.语 言 包 提 供 的 支 持 包 括 字 符 串 处 理 、 多 线 程 处 理 、例外 处 理 、 数 学 函数 处 理 等 ,可 以 用 它 简 单 地 实 现 Java 程 序的 运 行 平 台 。 2.实 用 程 序 包 提 供 的 支 持 包 括 哈 希 表 、 堆 栈 、 可 变 数组、 时 间 和 日 期 等。 3.输 入 输 出 包 用 统 一 的 "流 "模 型 来 实 现 所 有 格式 的 I/O,包括 文 件 系 统 、 网 络、 输 入 /出 设 备 等 。 4.低 级 网 络 包 用 于 实 现 Socket编 程 。 5.抽 象 图 形 用 户 接 口 包 实 现 了 不 同 平 台 的 计 算 机 的 图形用 户 接 口 部 件 ,包括 窗 口 、 菜 单 、 滚 动 条 、 对 话 框 等 ,使得 Java可 以 移 植 到 不 同平 台 的 机 器 。 6.网 络 包 支 持 Internet的 TCP/IP协 议 ,提 供 了 与 Internet的 接 口。它 支 持 URL连 接,WWW的 即 时 访 问 ,并 且 简 化 了 用 户 /服 务 器 模型 的 程 序 设 计 。 四 、 Java和 C、 C++ 对 于 变 量 声 明 、 参 数 传 递 、 操 作 符 、 流 控 制 等 ,Java 使用了 和 C、 C++相 同的 传 统 ,使 得 熟 悉 C、 C++的 程 序 员 能 很 方 便地 进 行 编 程 。 同 时,Java为 了 实 现 其简 单 、 鲁 棒 、 安 全 等 特性 ,也 摒 弃 了 C和 C++中 许 多 不 合 理 的 内容 。 1.全 局 变 量 Java程 序 中 ,不 能 在 所 有 类 之 外 定 义 全 局 变 量 ,只 能 通 过在一 个 类 中 定 义 公用 、 静 态 的 变 量 来 实 现 一 个 全 局 变 量 。例 如 : Class GlobalVar{ public static global_var; } 在 类 GlobalVar中 定 义 变 量 global_var为 public stat-ic,使 得 其 它类可 以 访 问 和 修 改该 变 量 。 Java对 全 局 变 量 进 行 了 更 好 的 封 装 。 而 在 C和 C++中 , 依 赖于不 加 封 装 的 全局 变 量 常 常 造 成 系 统 的 崩 溃 。 2.Goto Java不 支 持 C、 C++中 的 goto语 句 ,而 是 通 过 例 外 处 理 语 句 try,Ca tch, final等 来 代替 C、 C++中 用 goto来 处 理 遇 到 错 误 时 跳 转 的情 况 ,使 程 序 更 可 读且 更 结 构 化 。 3.指 针 指 针 是 C、 C++中 最 灵 活 ,也 是 最 容 易 产 生 错 误 的 数 据 类型。 由 指 针 所 进 行的 内 存 地 址 操 作 常 会 造 成 不 可 预 知 的 错误 ,同 时 通 过 指 针 对某 个 内 存 地 址 进 行显 式 类 型 转 换 后 ,可以 访 问 一 个 C++中 的 私 有 成 员 ,从 而 破 坏 安全 性 ,造 成 系 统 的崩 溃 。 而 Java 对 指 针 进 行 完 全 的 控 制 ,程 序 员 不 能 直 接进行 任 何 指 针 操 作 ,例 如把 整 数 转 化 为 指 针 ,或 者 通 过 指 针释放 某 一 内 存 地 址 等 。 同时 ,数 组 作 为 类 在Java中 实 现 ,良 好 地解 决 了 数 组 访 问 越 界 这 一 C、 C++中 不 作 检 查的 错 误 。 4.内 存 管 理 在 C中 ,程 序 员 通 过 库 函 数 malloc()和 free()来 分 配 和 释 放 内存 , C++中 则 通 过 运算 符 new和 delete来 分 配 和 释 放 内 存 。 再 次 释放 已 释 放 的 内 存 块或 未 被 分 配 的 内存 块 ,会 造 成 系 统 的 崩溃 ;同 样 ,忘 记 释 放 不 再 使 用 的 内 存 块 也会 逐 渐 耗 尽 系 统资源 。 而 在 Java中 ,所 有 的 数 据 结 构 都 是 对 象 , 通 过 运 算 符 new为它们 分 配 内 存 堆。 通 过 new得 到 对 象 的 处 理 权 ,而 实 际 分 配 给对 象 的 内 存 可 能随 程 序 运 行 而 改变, Java对 此 自 动 地 进 行 管理 并 且 进 行 垃 圾 收 集 ,有 效 防 止 了 由 于程 序 员 的 误 操 作而导 致 的 错 误 ,并 且 更 好 地 利 用 了 系 统 资 源 。 5.数 据 类 型 的 支 持 在 C、 C++中 ,对 于 不 同 的 平 台 ,编 译 器 对 于 简 单 数 据 类 型如in t,float等 分 别 分配 不 同 长 度 的 字 节 数 ,例 如 :int在 IBM PC中为 16位 ,在 VAX-11中 为32位 ,这 导 致 了 代 码的 不 可 移 植 性 ,但 在 Java中 ,对 于 这 些 数 据 类 型 总 是 分 配 固 定 长 度 的 位 数 ,如 对 int型 ,它 总 占 32位 ,这 就 保 证 了 Java的 平 台 无 关 性 。 6.类 型 转 换 在 C、 C++中 ,可 以 通 过 指 针 进 行 任 意 的 类 型 转 换 ,常 常 带来不 安 全 性 ,而 Java中 ,运 行 时 系 统 对 对 象 的 处 理 要 进 行 类型 相 容 性 检 查 ,以 防 止不 安 全 的 转 换 。 7.头 文 件 C、 C++中 用 头 文 件 来 声 明 类 的 原 型 以 及 全 局 变 量 、 库 函数等 ,在 大 的 系 统中 ,维 护 这 些 头 文 件 是 很 困 难 的 。 而 Java不支 持 头 文 件 ,类 成 员的 类 型 和 访 问 权限 都 封 装 在 一 个 类 中 ,运 行 时 系 统 对 访 问 进 行 控 制 ,防 止 对 私有 成 员 的 操 作 。 同时 ,Java中 用 import语 句 来 与 其 它 类 进 行 通 讯 ,以 便 使 用它 们 的方法 。 8.结 构 和 联 合 C、 C++中 的 结 构 和 联 合 中 所 有 成 员 均 为 公 有 ,这 就 带 来了安 全 性 问 题 。Java中 不 包 含 结 构 和 联 合 ,所 有 的 内 容 都 封装 在 类 中 。 9.预 处 理 C、 C++中 用 宏 定 义 来 实 现 的 代 码 给 程 序 的 可 读 性 带 来 了困难 。 在 Java中 ,不 支 持 宏 ,它 通 过 关 键 字 final 来 声 明 一 个 常量 ,以 实 现 宏 定 义中 广 泛 使 用 的 常 量定 义 。 § 1.3 简 单 的 Java程 序 下 面 我 们 先 介 绍 两 个 简 单 的 Java程 序 ,并 对 其 进 行 分 析。 例 1.1. public class HelloWorldApp { //an application public static void main (String args[ ]){ System.out.println("Hello World!"); } } 本 程 序 的 作 用 是 输 出 下 面 一 行 信 息 : Hello World! 程 序 中 ,首 先 用 保 留 字 class来 声 明 一 个 新 的 类 ,其 类 名 为Hell oWorldApp,它 是 一 个公 共 类 (public)。 整 个 类 定 义 由 大 括 号 {}括起 来 。 在 该 类 中 定义 了 一 个 main ()方 法 ,其中 public表 示 访 问权 限 ,指 明 所 有 的 类 都 可 以 使 用 这 一 方 法 ;static指 明 该 方法 是 一 个 类方 法 ,它 可 以 通 过 类 名 直 接 调 用 ;void则 指 明 main()方法 不 返 回 任何 值 。 对 于 一 个 应 用程 序 来 说 ,main()方 法 是 必需 的 ,而 且 必 须 按 照 如 上 的 格 式 来 定义 。 Jave解 释 器 在 没 有生成 任 何 实 例 的 情 况 下 ,以 main()作 为 入 口 来 执 行 程 序 。 Jave程序中 可 以 定 义 多 个 类 , 每 个 类 中 可 以 定 义 多 个 方 法 ,但 是 最多 只 能 有 一 个 公 共 类,main()方 法 也 只 能 有 一 个 ,作 为 程 序 的入 口 。 main()方 法 定 义 中 ,括 号 ()中 的 String args[ ]是传 递 给 main()方法 的 参 数 ,参 数 名 为 args,它 是 类 String的 一 个 实 例 ,参 数 可 以为 0个 或 多 个,每 个 参 数 用 "类 名 参数 名 "来 指 定 , 多个 参 数 间 用 逗 号 分 隔 。 在 main()方 法 的 实 现(大 括 号 中 ),只有 一 条 语句 : System.out.println ("Hello World!"); 它 用 来 实 现 字 符串 的 输 出 ,这 条 语 句 实 现 与 C语 言 中 的printf 语 句 和 C++中 cout<<语句 相 同 的 功 能 。 另 外 ,//后 的 内 容 为 注 释 。 现 在 我 们 可 以 运 行 该 程 序 。 首 先 把 它 放 到 一 个 名 为HelloWor ldApp.java的 文 件 中 ,这 里 ,文 件 名 应 和 类 名 相 同 ,因 为 Java解释 器 要 求 公 共 类 必 须 放在 与 其 同 名 的 文 件 中。 然 后 对 它 进行 编 译 : C:\>javac HelloWorldApp.java 编 译 的 结 果 是 生 成 字 节 码 文 件 HelloWorldApp.class。最 后 用java 解 释 器 来 运 行 该字 节 码 文 件 : C:\>java HelloWorldApp 结 果 在 屏 幕 上 显 示 Hello World! 我 们 再 来 看 下 面 的 一 个 例 子 : 例 1.2 import java.awr.*; import java.applet.*; public class HelloWorldApplet extends Applet { //an applet public void paint(Graphics g){ g.drawString ("Hello World!",20,20); } } 这 是 一 个 简 单 的 Applet(小 应 用 程 序 )。 程 序 中 ,首 先 用 import语句 输 入 java.awr和java.applet下 所 有 的 包 ,使 得 该 程 序 可 能 使 用这 些 包 中 所 定 义 的类 , 它 类 似 于 C中 的#include 语 句 。 然 后 声明 一 个 公 共 类 HelloWorldApplet,用 extends指明 它 是 Applet的 子 类。 在类 中 ,我 们 重 写 父 类 Ap-plet的 paint()方 法 ,其 中 参 数 g为 Graphics类,它表 明 当 前 作 画 的 上下 文 。 在 paint()方 法 中 ,调 用 g的 方 法 drawString(),在坐 标 (20,20)处输 出 字 符 串 ""Hello World!",其 中 坐 标是 用 象 素 点 来 表 示 的 。 这 个 程 序 中 没 有 实 现 main()方 法 ,这 是 Applet与 应 用 程序 Applica tion(如 例 1)的 区 别 之一 。 为 了 运 行 该 程 序 ,首 先 我们 也 要 把它 放 在 文 件HelloWorldAppl et.java中 ,然 后 对 它 进行 编 译 : C:\>javac HelloWorldApplet.java 得 到 字 节 码 文 件 HelloWorldApplet.class。 由 于 Applet中 没 有main()方法 作 为 Java解 释 器的 入 口 ,我 们 必 须 编 写 HTML文 件 ,把 该 Applet嵌入 其 中 ,然 后 用 appletviewer来 运 行 ,或 在支 持 Java的 浏 览 器 上运 行 。 它 的 <HTML>文 件 如 下 : <HTML> <HEAD> <TITLE> An Applet </TITLE> </HEAD> <BODY> <applet code="HelloWorldApplet.class" width=200 height=40> </applet> </BODY> </HTML> 其 中 用 <applet>标 记 来 启 动 HelloWorldApplet,code指 明字 节 码所在 的 文 件 ,width和height指 明 applet所 占 的 大 小 ,我 们 把 这 个 HTML文件 存 入Example.html,然 后 运 行 : C:\>appleviewer Example.html 这 时 屏 幕 上 弹 出 一 个 窗 口 ,其 中 显 示 Hello World!,显 示 结果如 图 : 从 上 述 例 子 中 可 以 看 出 ,Java程 序 是 由 类 构 成 的 ,对 于 一个应 用 程 序 来 说 ,必 须有 一 个 类 中 定 义 main()方 法 ,而 对 applet来说 ,它 必 须 作 为 Applet的一 个 子 类 。 在 类 的 定 义 中 ,应 包 含 类变 量 的 声 明 和 类 中 方 法 的 实 现 。 Java在 基 本 数据 类 型 、 运算 符 、 表达 式 、 控 制 语 句 等 方 面 与 C、 C++基 本 上 是 相 同 的 ,但 它 同 时 也增 加 了 一 些 新 的 内 容 ,在 以 后 的 各 章 中 ,我 们会 详 细 介 绍 。 本 节 中 ,只 是 使 大 家 对Java程 序 有 一 个 初 步 的了解 。 第 二 章   数 据 类 型 § 2.1 数 据 类 型 数 据 类 型 指 明 了 变 量 或 表 达 式 的 状 态 和 行 为 。 Java 的数据 类 型 如 下 所 示 : Java不 支 持 C、 C++中 的 指 针 类 型 、 结 构 体 类 型 和 共 用 体类型 。 本 章 我 们 主 要 介 绍 简 单 类 型 。 § 2.2 常 量 与 变 量 一 、 常 量 Java中 的 常 量 值 是 用 文 字 串 表 示 的 ,它 区 分 为 不 同的 类 型,如整 型 常 量 123,实 型常 量 1.23,字 符 常 量 ‘ a’ ,布 尔 常 量 true、 false以 及 字 符 串 常 量"This is a constant string."。 与 C、 C++不 同 ,Java中 不 能 通 过 #define命 令 把 一 个 标 识 符 定义为 常 量 ,而 是 用 关键 字 final来 实 现 ,如 final double PI=3.14159( 有 关 final的 用 法 见[6.2.3])。 二 、 变 量 变 量 是 Java程 序 中 的 基 本 存 储 单 元 ,它 的 定 义 包 括 变 量名、 变 量 类 型 和 作 用 域几 个 部 分 。 ① 变 量 名 是 一 个 合 法 的 标 识 符 ,它 是 字 母 、 数 字 、 下 划线或 美 元 符 "$ "的 序 列,Java对 变 量 名 区 分 大 小 写 ,变量 名 不 能 以 数 字 开 头 ,而 且 不 能为 保 留 字 。 合 法 的 变 量 名如 :myName、 value-1、 dollar$ 等 。 非 法 的 变 量 名 如 : 2mail、room#、 class (保 留 字 )等 ,变量 名 应 具 有 一 定 的 含 义 ,以 增 加 程 序 的可 读 性 。 ② 变 量 类 型 可 以 为 上 面 所 说 的 任 意 一 种 数 据 类 型 。 ③ 变 量 的 作 用 域 指 明 可 访 问 该 变 量 的 一 段 代 码 。 声 明一个 变 量 的 同 时 也 就指 明 了 变 量 的 作 用 域 。 按 作 用 域 来 分 ,变 量 可 以 有 下 面 几 种:局 部 变 量 、 类 变 量 、方 法 参 数 、 例外 处 理 参 数 。 局 部 变 量 在 方 法 或 方 法 的 一 块 码 中 声 明 ,它 的 作 用域 为它 所 在 的 代 码 块 (整 个 方 法 或 方 法 中 的 某 块 代 码 )。 类 变 量 在 类 中 声 明 ,而 不 是 在 类 的 某 个 方 法 中 声 明 , 它的作 用 域 是 整 个 类 。 方 法 参 数 传 递 给 方 法 ,它 的 作 用 域 就 是 这 个 方 法 。 例 外 处 理 参 数 传 递 给 例 外 处 理 代 码 ,它 的 作 用 域 就 是 例外处 理 部 分 。 在 一 个 确 定 的 域 中 ,变 量 名 应 该 是 唯 一 的 。 通 常 , 一 个域用 大 括 号 {}来 划 定 。 ④ 变 量 的 声 明 格 式 为 : type identifier[=value][,identifier[=value]… ]; 例 如 : int a, b, c; double d1, d2=0.0; 其 中 ,多 个 变 量 间 用 逗 号 隔 开 ,d2=0.0对 实 型 变 量 d2赋 初 值0.0, 只 有 局 部 变 量 和 类变 量 是 可 以 这 样 赋 初 值 的 ,而 方 法 参 数和 例 外 处 理 参 数 的 变量 值 是 由 调 用 者 给 出的 。 § 2.3 整 型 数 据 一 、 整 型 常 量 : 与 C,C++相 同 ,Java的 整 常 数 有 三 种 形 式 : ① 十 进 制 整 数 ,如 123,-456,0 ② 八 进 制 整 数 ,以 0开 头 ,如 0123表 示 十 进 制 数 83,-011 表 示十进 制 数 -9。 ③ 十 六 进 制 整 数 ,以 0x或 0X开 头 ,如 0x123表 示 十 进 制 数291,-0X12 表 示 十 进 制 数 -18。 整 型 常 量 在 机 器 中 占 32位 ,具 有 int型 的 值 ,对 于 long 型 值 ,则要 在 数 字 后 加 L或 l,如123L表 示 一 个 长 整 数 ,它 在 机 器 中 占 64位 。 二 、 整 型 变 量 : 整 型 变 量 的 类 型 有 byte、 short、 int、 long四 种 。 下 表 列 出各类 型 所 在 内 存 的 位数 和 其 表 示 范 围 。 int类 型 是 最 常 使 用 的 一 种 整 数 类 型 。 它 所 表 示 的 数 据范围 足 够 大 ,而 且适 合 于 32位 、 64位 处 理 器 。 但 对 于 大 型 计算 ,常 会 遇 到 很 大 的整 数 ,超 出 int类型 所 表 示 的 范 围 ,这 时 要使 用 long类 型 。 由 于 不 同 的 机 器 对 于 多 字 节 数 据 的 存 储 方 式 不 同 ,可 能是从 低 字 节 向高 字 节 存 储 ,也 可 能 是 从 高 字 节 向 低 字 节 存 储 ,这 样 ,在 分 析 网络 协 议 或 文 件格 式 时 , 为 了 解 决 不 同 机 器上 的 字 节 存 储 顺 序 问 题 ,用 byte类 型来 表 示 数 据 是合 适 的 。而 通 常 情 况 下 ,由 于 其 表 示 的 数 据 范 围 很 小 ,容 易 造成 溢 出 ,应 避 免使 用 。 short类 型 则 很 少 使 用 ,它 限 制 数 据 的 存 储 为 先 高 字 节 ,后低字 节 ,这 样 在 某些 机 器 中 会 出 错 。 三 、 整 型 变 量 的 定 义 ,如 : byte b; //指定变量b为byte型 short s; //指定变量s为short型 int i; //指定变量i为int型 long l; //指定变量l为long型 § 2.4 浮 点 型 (实 型 )数 据 一 、 实 型 常 量 与 C,C++相 同 ,Java的 实 常 数 有 两 种 表 示 形 式 : ① 十 进 制 数 形 式 ,由 数 字 和 小 数 点 组 成 ,且 必 须 有 小 数点,如 0.123, .123,123.,123.0 ② 科 学 计 数 法 形 式 。 如 :123e3或 123E3,其 中 e或 E之 前 必 须有数 字 ,且 e或 E后面 的 指 数 必 须 为 整 数 。 实 常 数 在 机 器 中 占 64位 ,具 有 double型 的 值 。 对 于 float 型的值 ,则 要 在 数 字后 加 f或 F,如 12.3F,它 在 机 器 中 占 32位 , 且 表示 精 度 较 低 。 二 、 实 型 变 量 实 型 变 量 的 类 型 有 float和 double两 种 ,下 表 列 出 这 两 种 类型所 占 内 存 的 位数 和 其 表 示 范 围 。 数据类型 所占位数 数的范围 float 32 3.4e-038~3.4e+038 double 64 1.7e-308~1.7e+308 双 精 度 类 型 double比 单 精 度 类 型 float具 有 更 高 的 精 度 和更大 的 表 示 范 围 ,常 常 使 用 。 三 、 实 型 变 量 定 义 ,如 float f; //指 定 变 量 f为 float型 double d; //指 定 变 量 d为 double型 [注 ]与 C、 C++不 同 ,Java中 没 有 无 符 号 型 整 数 ,而 且 明 确 规定了 整 型 和 浮点 型 数 据 所 占 的 内 存 字 节 数 ,这 样 就 保 证 了安 全 性 、 鲁 棒 性和 平 台 无 关 性。 § 2.5 字 符 型 数 据 一 、 字 符 常 量 字 符 常 量 是 用 单 引 号 括 起 来 的 一 个 字 符 ,如 ‘ a’ , ‘ A’。另 外 ,与 C、C++相 同 ,Java也 提 供 转 义 字 符 ,以 反 斜 杠 (\)开 头 ,将其 后 的 字 符转 变 为 另 外 的 含义 ,下 表 列 出 了 Java中 的 转 义 字符 。 与 C、 C++不 同 ,Java中 的 字 符 型 数 据 是 16位 无 符 号 型 数 据 ,它表 示 Unicode集,而 不 仅 仅 是 ASCII集 ,例 如 \u0061表 示 ISO拉 丁 码的 ‘ a’ 。 转义字符 描述 \ddd 1到3位8进制数据所表示的字符(ddd) \uxxxx 1到4位16进制数所表示的字符(xxxx) \' 单引号字符 \\ 反斜杠字符 \r 回车 \n 换行 \f 走纸换页 \t 横向跳格 \b 退格 二 、 字 符 型 变 量 字 符 型 变 量 的 类 型 为 char,它 在 机 器 中 占 16位 ,其 范 围 为 0~65 535。 字 符 型变 量 的 定 义 如 : char c='a'; //指 定 变 量 c为 char型 ,且 赋 初 值 为 'a' 与 C、 C++不 同 ,Java中 的 字 符 型 数 据 不 能 用 作 整 数 , 因 为Java不提 供 无 符号 整 数 类 型 。 但 是 同 样 可 以 把 它 当 作 整 数 数 据来 操 作 。 例 如 : int three=3; char one='1'; char four=(char)(three+one);//four='4' 上 例 中 ,在 计 算 加 法 时 ,字 符 型 变 量 one被 转 化 为 整 数 , 进行相 加 ,最 后 把 结果 又 转 化 为 字 符 型 。 三 、 字 符 串 常 量 与 C、 C++相 同 ,Java的 字 符 串 常 量 是 用 双 引 号 ("")括起 来 的一 串 字 符 ,如"This is a string.\n"。 但 不 同 的 是 ,Java中 的 字 符 串 常 量 是 作 为String类 的 一 个 对 象 来处 理 的 ,而不 是 一 个 数 据 。 有 关 类 String,我 们 将 在 第 七 章 讲 述。 § 2.6 布 尔 型 数 据 布 尔 型 数 据 只 有 两 个 值 ,true和 false,且 它 们 不 对 应 于 任何整 数 值 。 在 流 控制 中 常 用 到 它 。 布 尔 型 变 量 的 定 义 如 : boolean b=true; //定 义 b为 布 尔 型 变 量 ,且 初 值 为 true § 2.7 举 例 例 2.1.下 例 中 用 到 了 前 面 提 到 的 数 据 类 型 ,并 通 过 屏 幕显 示 它 们 的 值 。 public class SimpleTypes{ public static void main( String args[] ){ byte b=0x55; short s=0x55ff; int i=1000000; long l=0xfffL; char c='c'; float f=0.23F; double d=0.7E-3; boolean bool=true; System.out.println("b = "+b); System.out.println("s = "+s); System.out.println("i = "+i); System.out.println("c = "+c); System.out.println("f = "+f); System.out.println("d = "+d); System.out.println("bool = "+bool); } } 编译并运行该程序,输出结果为: C:\>java SimpleTypes b = 85 s = 22015 i = 1000000 l = 4095 c = c f = 0.23 d = 0.0007 bool = true § 2.8 各 类 数 值 型 数 据 间 的 混 合 运 算 一 、 自 动 类 型 转 换 整 型 、 实 型 、 字 符 型 数 据 可 以 混 合 运 算 。 运 算 中 , 不同类 型 的 数 据 先转 化 为 同 一 类 型 ,然 后 进 行 运 算 。 转 换 从低 级 到 高 级 ,如 下 图: 转 换 规 则 为 : ① (byte或 short) op int→ int ② (byte或 short或 int) op long→ long ③ (byte或 short或 int或 long) op float→ float ④ (byte或 short或 int或 long或 float) op double→ double ⑤ char op int→ int 其 中 ,箭 头 左 边 表 示 参 与 运 算 的 数 据 类 型 ,op为 运 算 符 (如加、 减 、 乘 、除 等 ),右 边 表 示 转 换 成 的 进 行 运 算 的 数 据 类 型。 例2.2 public class Promotion{ public static void main( String args[ ] ){ byte b=10; char c='a'; int i=90; long l=555L; float f=3.5f; double d=1.234; float f1=f*b; // float * byte -> float int i1=c+i;    // char + int -> int long l1=l+i1; // long + int ->ling double d1=f1/i1-d; // float / int ->float, float - double -> double} } 二 、 强 制 类 型 转 换 高 级 数 据 要 转 换 成 低 级 数 据 ,需 用 到 强 制 类 型 转 换 ,如 : int i; byte b=(byte)i; //把 int型 变 量 i强 制 转 换 为 byte型 这 种 使 用 可 能 会 导 致 溢 出 或 精 度 的 下 降 ,最 好 不 要 使 用。 第 三 章   运 算 符 和 表 达式 运 算 符 指 明 对 操 作 数 所 进 行 的 运 算 。 按 操 作 数 的 数 目来分 ,可 以 有 一元 运 算 符 (如 ++、--),二 元 运 算 符 (如 +、 >)和 三元 运 算 符 (如?:),它 们 分 别 对 应 于一 个 、 两 个 和 三 个 操 作 数。 对 于 一 元 运 算 符 来 说 ,可 以 有 前缀 表 达 式 (如 ++i )和 后 缀表 达 式 (如 i++),对 于 二 元 运 算 符 来 说 则 采 用 中 缀 表 达 式 (如 a+b)。 按 照运 算 符 功 能 来 分 ,基 本 的 运 算 符 有 下 面 几 类 : 1.算 术 运 算 符 (+,-,*,/,%,++,--) 2.关 系 运 算 符 (>,<,>=,<=,==,!=) 3.布 尔 逻 辑 运 算 符 (!,&&,||) 4.位 运 算 符 (>>,<<,>>>,&,|,^,~ ) 5.赋 值 运 算 符 (=,及 其 扩 展 赋 值 运 算 符 如 +=) 6.条 件 运 算 符 ( ?:) 7.其 它 (包 括 分 量 运 算 符 · ,下 标 运 算 符 [],实 例 运 算 符 instanc eof,内 存 分 配运 算 符 new,强 制 类 型 转 换 运 算 符 (类 型 ), 方 法调 用 运 算 符 () 等 ) 本 章 中 我 们 主 要 讲 述 前 6类 运 算 符 。 § 3.1 算 术 运 算 符 算 术 运 算 符 作 用 于 整 型 或 浮 点 型 数 据 ,完 成 算 术 运 算。 一 、 二 元 算 术 运 算 符 ,如 下 表 所 示 运算符 用法 描述 + op1+op2 加 - op1-op2 减 * op1*op2 乘 / op1/op2 除 % op1%op2 取模(求余) Java对 加 运 算 符 进 行 了 扩 展 ,使 它 能 够 进 行 字 符 串 的连 接,如 "abc"+"de",得到 串 "abcde"。 我 们 将 在第 七 章 中 讲 解 。 与 C、 C++不 同 ,对 取 模 运 算 符 %来 说 ,其 操 作 数 可 以为浮点 数 , 如37.2%10=7.2。 二 、 一 元 算 术 运 算 符 ,如 下 表 所 示 : 运算符 用法 描述 + +op 正值 - -op 负值 ++ ++op,op++ 加1 -- --op,op-- 减1 i++与 ++i的 区 别 i++在 使 用 i之 后 ,使 i的 值 加 1,因 此 执 行 完 i++后 ,整 个 表达式的 值 为 i,而 i的 值变 为 i+1。 ++i在 使 用 i之 前 ,使 i的 值 加 1,因 此 执 行 完 ++i后 ,整 个 表达式和 i的 值 均 为 i+1。 对 i--与 --i同 样 。 例 3.1.下 面 的 例 子 说 明 了 算 术 运 算 符 的 使 用 public class ArithmaticOp{ public static void main( String args[] ){ int a=5+4; //a=9 int b=a*2; //b=18 int c=b/4; //c=4 int d=b-c; //d=14 int e=-d; //e=-14 int f=e%4; //f=-2 double g=18.4; double h=g%4; //h=2.4 int i=3; int j=i++; //i=4,j=3 int k=++i; //i=5,k=5 System.out.println("a = "+a); System.out.println("b = "+b); System.out.println("c = "+c); System.out.println("d = "+d); System.out.println("e = "+e); System.out.println("f = "+f); System.out.println("g = "+g); System.out.println("h = "+h); System.out.println("i = "+i); System.out.println("j = "+j); System.out.println("k = "+k); } } 其结果为: C:\>java ArithmaticOp a = 9 b = 18 c = 4 d = 14 e = -14 f = -2 g = 18.4 h = 2.4 i = 5 j = 3 k = 5 § 3.2 关 系 运 算 符 关 系 运 算 符 用 来 比 较 两 个 值 ,返 回 布 尔 类 型 的值true或 false。关 系 运 算 符 都 是 二 元 运 算 符 ,如 下 表 所 示 : 运算符 用法 返回true的情况 > op1>op2 op1大于op2 >= op1>=op2 op1大于或等于op2 < op1<op2 op1小于op2 <= op1<=op2 op1小于或等于op2 == op1==op2 op1与op2相等 != op1!=op2 op1与op2不等 Java中 ,任 何 数 据 类 型 的 数 据 (包 括 基 本 类 型 和 组 合 类 型)都可 以 通 过 ==或!=来 比 较 是 否 相 等 (这 与 C、 C++不 同 )。 关 系 运 算 的 结 果 返 回 true或 false,而不是C、C++中 的 1或 0。 关 系 运 算 符 常 与 布 尔 逻 辑 运 算 符 一 起 使 用 ,作 为 流 控 制语句 的 判 断 条件 。 如 if( a>b && b==c) § 3.3 布 尔 逻 辑 运 算 符 布 尔 逻 辑 运 算 符 进 行 布 尔 逻 辑 运 算 ,如 下 表 所 示 : op1 op2 op1&&op2 op1||op2 !op1 false false false false true false true false true true true false false true false true true true true false } ·&&、‖ 为二元运算符,实现逻辑与、逻辑或。 ·! 为一元运算符,实现逻辑非。 ·对 于 布 尔 逻 辑 运 算 , 先 求 出 运 算 符 左 边 的 表 达 式 的 值 , 对 或 运 算 如 果 为 true, 则 整 个 表 达 式 的 结 果 为 true, 不 必对 运 算 符 右 边 的 表 达 式 再 进 行 运 算 ; 同 样 , 对 与 运 算 , 如果 左 边 表 达 式 的 值 为 false, 则 不 必 对 右 边的 表 达式 求 值 , 整个表 达 式 的 结果 为 false。 下面的例子说明了关系运算符和布尔逻辑运算符的使用。 public class RelationAndConditionOp{ public static void main( String args[] ){ int a=25,b=3; boolean d=a<b; //d=false System.out.println("a<b = "+d); int e=3; if(e!=0 && a/e>5) System.out.println("a/e = "+a/e); int f=0; if(f!=0 && a/f>5) System.out.println("a/f = "+a/f); else System.out.println("f = "+f); } } 其运行结果为: C:\>java RelationAndConditionOp a<b = false a/e = 8 f = 0 注 意 :上 例 中 ,第 二 个 if语 句 在 运 行 时 不 会 发 生 除 0溢 出的错 误 ,因 为 e!=0为false,所 以 就 不 需 要 对 a/e进 行 运 算 。 § 3.4 位 运 算 符 位 运 算 符 用 来 对 二 进 制 位 进 行 操 作 ,Java中 提 供 了 如 下表所 示 的 位 运 算符 : 位 运 算 符 中 ,除   ~   以 外 ,其 余 均 为 二 元 运 算 符 。 操 作 数 只 能 为 整 型 和 字 符 型 数 据 。 3.4.1 补 码 Java使 用 补 码 来 表 示 二 进 制 数 ,在 补 码 表 示 中 ,最 高 位 为符号 位 ,正 数 的 符 号 位 为 0,负 数 为 1。 补 码 的 规 定 如 下 : 对 正 数 来 说 ,最 高 位 为 0,其 余 各 位 代 表 数 值 本 身 (以 二 进制表 示 ),如 +42的补 码 为 00101010。 对 负 数 而 言 ,把 该 数 绝 对 值 的 补 码 按 位 取 反 ,然 后 对 整个数 加 1,即 得 该 数的 补 码 。 如 -42的 补 码 为 11010110 (00101010 按位 取 反 11010101 +1=11010110 ) 用 补 码 来 表 示 数 ,0的 补 码 是 唯 一 的 ,都 为 00000000。 (而 在原码 ,反 码 表 示中 ,+0和 -0的 表 示 是 不 唯 一 的 ,可 参 见 相 应 的书 籍 )。 而 且 可 以用 111111表 示 -1的 补 码 (这 也 是 补 码 与 原 码和 反 码 的 区 别 )。 3.4.2 按 位 取 反 运 算 符 ~ ~   是 一 元 运 算 法 ,对 数 据 的 每 个 二 进 制 位 取 反 ,即 把 1变为 0,把 0变 为 1。 例 如 : 0010101 ~ 1101010 注 意 ,~ 运 算 符 与 - 运 算 符 不 同 ,~ 21≠ -21。 3.4.3 按 位 与 运 算 符 & 参 与 运 算 的 两 个 值 ,如 果 两 个 相 应 位 都 为 1,则 该 位 的 结果为 1,否 则 为 0。即 : 0 & 0 = 0,0 &1 = 0,1 & 0 = 0,1 & 1 = 1

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值