发新话题
打印

JAVA学堂_____从零开始

JAVA学堂_____从零开始

计划于本月13开始开设JAVA学堂,从零起步,大约每两天更新一课,预计一年完成,如果您有兴趣的话请在此坚持听课.

由于视频文件太大,如果需要请加群30101476,在共享里自行下载,请说明论坛ID

[ 本帖最后由 黑雨 于 2006-11-13 03:11 PM 编辑 ]
本帖最近评分记录

TOP

第一课   JAVA概述述

     JAVA语言编译后产生的是虚拟机可以理解的字节码,虚拟机运行在一个解释器上,每一个操作系统均有一个解释器,这样一来,JAVA就成了与平台无关的语言,它的这种跨平台的特性非常适用于网络上,所以JAVA表现出的优越性倍受关注。

一、        JAVA的特点:
1、        简单:由于JAVA的结构类似于C或C++,比如变量声明、操作符形式、参数传递、流控等方面与C语言相同,所以如果会C语言的会稍加学习就可掌握JAVA的编程技术了。同时也C语言相比,JAVA不支持运算符重载、多继承及广泛的自动强制等易混淆和较少用的特性,而增加了内存空间自动垃圾收集功能。对复杂特性的省略和对实用功能的增加使开发变得简单而可靠。

2、        平台无关性:JAVA引进虚拟机(JVM)概念,并运行于虚拟机,实现不同平台之间的JAVA接口。JAVA虚拟机建立在硬件和操作系统之上,用于实现JAVA字节码的解释和执行等功能,为不同平台提供统一的JAVA接口。我们说,只要计算机中有JAVA环境(JVM),JAVA字节码就可以在那台计算机上运行,总结来说就是“一次编译,随处运行”

3、        面象对象:JAVA是一种面象对象的程序语言,它具有“数据封装、继承、抽象化、多形式、可重用性”五方面向对象的特性。另外我们要知道,在JAVA中,类的继承关系是单一的、非多重的,一个子类只有一个父类,子类的父类又只有一个父类。

4、        安全性:JAVA的设计目的是提供一个用于网络/分布式的计算机环境,因此,特别强调安全性,通过多个层次的措施使安全性得到保证。首先,JAVA不允许用户利用程序强制对内存进行存取操作;第二JAVA编译器没有对内存布局的决定权,而是通过系统所在的软件硬件平台决定的;第三JAVA通过字节码检验来保证安全,不合法的字节码是无法被解释和运行的。

5、        解释执行:这一点不同于C语言,其原因在于JAVA程序经过编译后并不直接产生机器码,而是被编译成字码码,再通过JVM将字节码转换成机器码来运行。

6、        跨平台移植:这是JAVA最吸引人的地方,因为我们知道网络由很多不同机型的计算机组合而成的,因此如何使一个应用程序可以在任何一种计算机上执行是一个难题。而JAVA的虚拟机技术就解决了这个问题。另外JAVA严格规定数据类型和类结构标准;链接库还定义了一些可移植的接口以及这些类在不同的计算机平台上的定义结构,这些均使JAVA具有良好的可移植性。

7、        多线程:它的多线程机制使程序可以并行运行,可以非常轻松的实现网络上的实时交互行为,我们在使用JAVA开发出来的多线程程序比传统的单一线程程序所占用的CPU资源少,减少了CPU资源被占据而导致计算机死机的情况。

8、        动态:JAVA在设计加载对象时并不是在程序一开始运行时就将所需对象全部加载,而是在程序运行的过程中一一加载,这程序设计者可以在类库中自由地加入新的方法和实例变量,而不影响用户程序的执行,不会因程序库的更新,而必须重新编译程序。

二、        JAVA的主要应用方面:
1、        嵌入式系统应用
2、        电子商务应用与实施
3、        中小型多媒体系统的设计与实现
4、        分布式交易管理
5、        Internet的系统管理功能模式的设计
6、        交互式软件开发
7、        可视化图形软件开发

三、        JAVA与C语言的比较
1、        JAVA中的内存分配是动态的,程序员不必关心内存管理方面的问题
2、        JAVA是一种解释型的语言
3、        JAVA没有指针
4、        JAVA仅允许单一继承
5、        JAVA不能定义全局变量
6、        JAVA不用goto语句
7、        JAVA不支持宏定义
8、        JAVA对每种数据类型都分配固定长度
9、        JAVA中没有头文件

四、        JAVA的系统结构及工作流程:JAVA的系统结构包括类加载器、字节检验器以及JIT实时编译器。
类加载器:用来取得来自网络或存于本地计算机上的类文件字节码。
字节检验器:他接着确认这些类文件是否有正确的格式,以确保在运行时不会有破坏内存的行为。
JIT编译器可将字节码及时地转换成本地机器码。
那么我们说JAVA系统的功能就是对字节码进行解释和执行,从过程看分为三个部分:
1、        类加载器完成字节码的加载,运行程序所需要的所有代码都被加载,包括内存操作中地址的符号引用信息。
2、        字节码检验器对字节码进行安全性检查。
3、        字节码的翻译和执行。

TOP

第二课  JAVA的下载与安装

1、        JAVA的下载:这个我们可以从SUN公司直接下载了,网址是java.sun.com,具体的下载自己去找吧。
2、        安装:整个安装过程没有什么了,假设你给他安在c:\jdk1.4.2下,我们以这个举例,说一下环境变量的设置,正确的设置环境变量可以省我们很多事啊
a)        XP中环境变量的设置方法:我的电脑à右键à属性à高级à环境变量
b)        设置PATH:我们可以直接编辑path,并在后面加上“ ;c:\jdk1.4.2\bin”,这样JAVA的程序就可以直接执行了(其实不加大部分命令也行的,因为它在windows下有个备份的。
c)        设置类库路径:这个一般情况下得新建一个了,名称为:classpath,变量值为:.;classpath=c:\jdk1.4.2\lib
3、        辅助工具:这里我推荐大家使用UltraEdit,虽说你使用文本类的编辑器什么都可以,但累啊,使用UltraEdit可以省我们很多事(尤其是我们不再更多的考虑在输入中的大小写问题了),网上有很多破解版的,自己下一下安上吧。
4、        程序举例:
a)        在JVM上运行的程序:代码如下
public class HelloWord{
        public static void main(String args[]){
                System.out.println("hello word");
        }
}
b)        Applet小程序(也就是我们说的java小程序,在网页中可以运行)
JAVA程序代码:
   import java.applet.Applet;
import java.awt.*;
public class AppletExample extends Applet{
        public void paint (Graphics g){
                g.drawString("this is an exampleof java applet!",10,20);
        }
}

HTML代码:
<html>
<title>Applet</title>
<h1>Applet</h1>
<applet
        code="AppletExample.class"
        width=250
        height=250
        name="MyApplet">
</applet>
</html>
这节课的东西只要大家能照着打出来并执行就可以了。

TOP

第三课  JAVA语言的基础—标识符和关键字
一、在JAVA中的标识符和关键字统称为保留字,标识符是赋予常量、变量、方法、类或者接口的名称,可以由用户自行定义,但要符合以下规则:
1、        标识符可以由一个或多个字符组成
2、        标识符必须以字母、下划线(_)或$为开头,后面可以包含数字、字母但不包含空格。
3、        标识符中大小写字母有区别,但长度没有限制
4、        关键字不能做为标识符使用
下面我们来看几个标识符,大家看一下错误在哪:
(1)Hello  word  (2)123abc   (3)!ok   (4)public  (5)test-1
二、JAVA中的关键字,它在JAVA中是保留的,具有特殊的意义和用途,不可以任意使用或更改,当我们在编写程序时要注意不要使用它作为变量或方法名称,以免造成程序编译的错误。
Abstract        default        if        package        this
Boolean        do        implements        private        throw
Break        double        import        protected        throws
Byte        else        instanceof        public        transient
Case        false        interface        short        try
Catch        final        long        static        void
Char        finally        native        super        volatile
Class        float        new        switch        while
Continue        for        null        synchronized
三、转义字符:用来表示特殊的符号或特殊意义
\b:表示后退一个字符
\t:表示下划线
\n:表示换到下一行
\”:表示双引号
\’:表示单引号
\\:表示\
三、注释的方法
1、        多行注释的方法:
/*
…………
…………
*/
2、        一行中的后面注释的方法
        //注释语句

TOP

第四课  数据类型

数据类型实际上就是一块内存空间,它可以存储一个特定类型的值。在JAVA中的数据类型与其它语言不同。因为,JAVA严格规定每个数据类型的大小,而且不允许任意更换变量的数据类型。也就是说如果A变量我们声明为整数类型后,就不能再将A变量改为其它类型,而且所占的空间就是32位,无法更改,所以在JAVA中没有sizeof运算符来获取某一个变量占用的内存空间大小。下面列出了JAVA的数据类型:
类型        内容        默认值        内存空间大小        取值范围
boolean         true/false        false        16位        true或false
char        UnIcode        \u0000        16位        \u0000-----\uFFFF
byte        整数        0        8位        -128----+127
short        整数        0        16位        -32768--+32767
int        整数        0        32位        -2147483648---+2147483647
long        整数        0           64位        -9223372036854775808
                                --+9223372036854775807
float          浮点        0.0          32位        ±3.40282347E+38---
                                ±1.40239846E-45
double        浮点        0.0          64位           ±1.79769313486231570E+308---
                                ±4.94065645841246544E-324
   我们在定义数据类型时一定要考虑一下数据范围,尽量减少内存的浪费。
1、        整数型:JAVA定义了四种整数型,即字节型(byte),短整型(short),整型(int),长整型(long)。在JAVA中没有无符号型,这个有区别于C语言,也就是说所有的数都为有符号数。
2、        浮点型:这也就是平时所说的实数,其中单精度数(float)占4个字节,但值很大或很小时就不是很精确了。双精度数占8个字节,当需要保持多次反复迭代的计算的精确性时或操作值很大时,是最好的选择了。
下面我们举一个双精度数计算机圆面积的例子:
//compute the area of a circle
public class Area{
        public static void main(String args[]){
                double pi,r,a;
                r=0.3;//半径
                pi=3.1416;
                a=pi*r*r;//面积
                System.out.println("面积为:"+a);
        }
}
3、        字符型:这个于C语言不同,在C语言中占8位,而JAVA中由于使用的是unicode,所以占16位(Unicode定义的国际化的字符集能表示迄今为止人类语言的所有字符集)
我们还是举个例子说明一下字符型数据的使用:
public class CharDemo{
        public static void main(String args[]){
                char ch1,ch2;
                ch1=65;
                ch2='B';
                System.out.print("ch1 and ch2");
                System.out.println(ch1+"   "+ch2);
        }
}

其实从这里面可以看出,ASCII中的字符集占了Unicode中的前127个字符,所以ASCII中的技巧这里面一样用。
比如下面这个例子:
public class CharDemo{
        public static void main(String args[]){
                char ch1,ch2;
                ch1=65;
                ch2='B';
    ch1++;
    ch2--;
                System.out.println(ch1);
                System.out.println(ch2);
        }
}
4、        布尔型:也就是我们所说的真或假,但要注意由于本身就是逻辑值了,所以在条件语句中没有必要再写上类似于b=true的话了。
下面我们还是举个例子吧:
public class BoolTest{
public static void main(String args[]){
        boolean y;
        y=false;
        System.out.println("y is"+y);
        y=true;
        if(y){
                System.out.println("y is true");
        }
        System.out.println("10>9?"+(10>9));
}
}

TOP

以前学习C语言只是为了应付考试,到了现在早就忘的干干净净了,早知道JAVA蛮实用,一直没机会学习,看来现在有了,真的非常感谢!!

TOP

第五课  变量
一、变量
简单的理解,变量就是在程序运行期间,值可以发生改变的量。比如y=15;然后我们又运行了y=5;那么这时候原来的值就已经发生了更变,现在你只能用5做为y的值了。
在JAVA中变量必须先声明,才能使用。声明时要指出变量的类型、值,有时候还要给出变量的初值,比如以下例子:
float j,k;
Boolean a;
Int i=1;
另外,在JAVA中任何位置都可以声明一个变量,比如:
double b=5;
system.out.println(b);
int a=15;
二、数据类型的转换:在JAVA中类型由低到高的顺序为:(byte  short  char)àintàlongàfloatàdouble.
1、        自动转换:当由低到高时可以自动转换,比如
byte b;int i=b;long l=b;float f=b;double d=b;
那么这些都可以自动转换,是合法的,但byte、short、char是平级的不能自动转换,必须使用强制转换。
2、        强制转换:由高级到低级时,必须使用强制转换
int i=99;byte b=(byte) i;char c=(char) i;
下面我们把这两种转总结一个例子:
public class ChangeTest{
        public static void main(String args[]){
                byte b=15;
                int i=b;
                long l=b;
                float f=b;
                double d=b;
                System.out.println(b);
                System.out.println(i);
                System.out.println(l);
                System.out.println(f);
                System.out.println(d);
                int s=99;
                byte n=(byte)s;
                System.out.println(s);
                System.out.println(n);
        }
}
同时我们也要注意在强制转换时有时会导致溢出或降低精度,比如整型值赋给byte时,如果整型值大了,会自动取模再赋值,而浮点数赋值给整数时会去掉小数点。
3、        字符串型数据与其他数据类型转换:这个在一般语言中都是通过toString()方法来实现的。看下面这个例子:
public class ChangeTest{
        public static void main(String args[]){
                int i1=10;
                float f1=3.14f;
                double d1=3.1415926;
                //注意大小写
                Integer I1=new Integer(i1);//生成integer类
                Float F1=new Float(f1);    //生成float类
                Double D1=new Double(d1);  //生成double类
                //分别调用包装类的tostring()方法转换为字符串
                String si1=I1.toString();//注意大小写,toString在此不转
                String si2=F1.toString();
                String si3=D1.toString();
                System.out.println(si1);
                System.out.println(si2);
                System.out.println(si3);
               
        }
}
4、        将CHAR型值直接做为数值转换为其他数据类型,看下面例子:
public class ChangeTest{
        public static void main(String args[]){
                int i;
                char c1='A';
                i=c1;
                System.out.println(i);
                char c2=(char)(i+2); //此处要强制转换
                System.out.println(c2);
                }
}

TOP

第六课  字符串

其实字符串是没有的,它是从字符型中衍生出来的,我们借助String类来生成相应的字符串。
在字符串中我们要以双引号做为定界符号,并注意转义字符的使用,例如以下字符串是全法的:
“Hello Word”   “”    “\n”   “Hello”+”Word”
一、        字符串的创建:可以使用赋值运算符或是使用类的构造函数
1、        使用赋值运算符:“=”
例:以下是合法的:
   String s1=”Hello Word”;
   String s2=”everybody”;
   String s3=s1+s2;
但通过上节课的学习我们知道,直接将一个其它类型的值赋值给字符串是不合法的,如:
float f=3.12;
String s=f;
需要通过类的toString()方法实现
   Float F=new float(3.12);
   String s=F.toString();
       2、使用String类的构造函数:一共七种如下
构造方法        功能描述
String()        创建一个空字符串
String(String s)        根据字符串创建一个新字符串
String(char[] charArray)        根据字符数组创建一个新字符串
String(char[] charArray,int off,int len)        根据字符数组的指定部分创建一个新字符串
        off为起始位置,len为字符数
String(byte[],int highbyte)        根据字符数组创建一个新字符串,highbyte为高
        位字节
String(byte[],int highbyte,int off,int len)        根据字节数组的指定部分创建一个新字符串
String(StringBuffer)        根据StringBuffer对象创建一个新字符串
我们看下面的例子:
public class StringTest{
        public static void main(String args[]){
                char charArray[]={'P','R','O','G','R','A','M'};
                String s0=new String();            //等同于String s0=""
                String s1=new String("PROGRAM");   //等同于String s1="PROGRAM"
                String s2=new String(s1);          //等同于String s2=s1
                String s3=new String(charArray);
                String s4=new String(charArray,2,4);  //从第二位后的4 位
                   System.out.println(s0);
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
    System.out.println(s4);
        }
}
二、        字符串连接
(1)        通过”+”号直接连接两个字符串,当第一个是字符串而第二个是数值时,则后者转换成字符串后进行连接。看下面例子:
public class StringConnect{
        public static void main(String args[]){
                String s1="Hello Word";
                String s2="everyone!";
                String s3=s1+s2;
                int i=500;
                String s4=s3+i;
                System.out.println(s3);
                System.out.println(s4);
        }
}
(2)        利用concat()方法实现连接,如下例:
public class StringConnect{
        public static void main(String args[]){
                String s1="Hello ";
                String s2="word!";
                String s3=s1.concat(s2);
                System.out.println(s3);
        }
}

TOP

星期六日我休息了啊,下次课,下星期一

TOP

第七课  字符串(2)
一、        子串:在String类中提供了一个substring方法,可以取一个子串,具体请看例子
public class StringDemo{
        public static void main(String args[]){
                String s1="this is my original string";
                String sd="original";
                if (s1.startsWith(sd))
                   s1=s1.substring(sd.length());
                else
                   if(s1.endsWith(sd))
                      s1=s1.substring(0,s1.length()-sd.length());
                   else
                   {
                           int index=s1.indexOf(sd);
                           if(index!=-1)
                           {
                                   String s2=s1.substring(0,index);
                                   String s3=s1.substring(index+sd.length());
                                   s1=s2+s3;
                           }
                           else
                           System.out.println("string \""+sd+"\" not found");
                  }
                  System.out.println(s1);
                }
        }

TOP

发新话题