Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1463897
  • 博文数量: 218
  • 博客积分: 6394
  • 博客等级: 准将
  • 技术积分: 2563
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-08 15:33
个人简介

持之以恒

文章分类

全部博文(218)

文章存档

2013年(8)

2012年(2)

2011年(21)

2010年(55)

2009年(116)

2008年(16)

分类: Java

2008-02-08 15:55:18

1.JAVA的特点是:

简单性、面向对象、分布式、平台无关、可移植、多线程、动态性等。

Java是平台无关的语言是指用Java写的应用程序不用修改就可在不同的软硬件平台上运行。平台无关有两种:源代码级和目标代码级。CC++具有一定程度的源代码级平台无关,表明用CC++写的应用程序不用修改只需重新编译就可以在不同平台上运行。Java主要靠Java虚拟机(JVM)在目标码级实现平台无关性。JVM是一种抽象机器,它附着在具体操作系统之上,本身具有一套虚机器指令,并有自己的栈、寄存器组等。但JVM通常是在软件上而不是在硬件上实现。

Java支持客户机/服务器计算模式,因此,它支持这两种分布性(数据分布和操作分布)。对于前者,Java提供了一个叫作URL的对象,利用这个对象,你可以打开并访问 具有相同URL地址上的对象,访问方式与访问本地文件系统相同。对于后者,Javaapplet小程序可以从服务器下载到客户端,即部分计算在客户端进行,提高系统执行效率。

多线程: Java提供了一个类Thread,由它负责启动运行,终止线程,并可检查线程状态。Java的线程还包括一组同步原语。这些原语负责对线程实行并发控制。利用Java的多线程编程接口,开发人员可以方便得写出支持多线程的应用程序,提高程序执行效率

Java可以写两种类型的程序:小程序(又叫Java Applet)和应用程序(Java Application)。小程序是嵌入在HTML文档中的Java程序;而Java应用程序是从命令行运行的程序。

2.编写JAVA程序时的注意事项:

1.Java区别大小写

2.文件名必须与Public class 后的类名相同(包括相同的大小写),并使用java作为扩展名。

3.类由类声明和类体组成,而类体又由成员变量和成员方法组成

4.类声明由四部分组成:类修饰符、类关键字class、声明父类、实现接口,其一般形式如下 [public][abstract|final] class 类名 [extends 父类名] [implements 接口列表]

A.类修饰符:

public:这个public关键字声明了类可以在其他类中使用。缺省时,该类只能被同一个包中的其他类使用

abstract:声明这个类为抽象类,即这个类不能被实例化。

final:声明该类不能被继承,即不能有子类。也就是说,不能用它通过扩展的办法来创建新类。

B.声明父类:

extends为声明该类的父类,这表明该类是其父类的子类。一个子类可以从它的父类继承变量和方法。extends只能实现单继承。

C.实现接口:

在类声明中使用关键字implements实现接口,当要实现有多个接口时,各接口名以逗号分隔,其形式为:implements 接口1,接口2···,···

接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。一个类可以实现多个接口,以某种程度实现多继承

3.JAVA连接数据库

JAVA使用JDBC连接数据库JDBC(Java DataBase Connectivity的缩写),意思是Java程序连接数据库的应用程序接口(API).JDBC由一群类和接口组成,通过调用这些类和接口所提供的成员方法,我们可以连接各种不同的数据库,进而使用标准的SQL命令对数据库进行查询、插入、删除、更新等操作。JDBC的基本结构由Java程序、JDBC管理器、驱动程序和数据库四部分组成.

Java应用程序根据JDBC方法实现对数据库的访问和操作。完成的主要任务有:请求与数据库建立连接;向数据库发送SQL请求;查询结果;处理错误;控制传输、提交及关闭连接等操作。

JDBC编程要点

(1)引用java.sql包:import java.sql.*;

       (2)使用Class.forName( )方法加载相应数据库的JDBC驱动程序:

class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

(3)定义JDBCURL对象String conURL="jdbc:odbc:TestDB";其中TestDB是我们设置的数据源。

(4) 连接数据库.Connection s=DriverManager.getConnection(conURL);

(5) 使用SQL语句对数据库进行操作。

(6) 解除Java与数据库的连接并关闭数据库.s.close( );

例子:

import java.sql.*;  //引入java.sql

public class c1{

  public static void main(String[ ] args) {

    String JDriver = "sun.jdbc.odbc.JdbcOdbcDriver";  //声明JDBC驱动程序对象

    String conURL="jdbc:odbc:TestDB";  //定义JDBCURL对象

    try {

      Class.forName(JDriver);  //加载JDBC-ODBC桥驱动程序

    }

   catch(java.lang.ClassNotFoundException e) {

      System.out.println("ForName :" + e.getMessage( ));

    }

    try {

      Connection con=DriverManager.getConnection(conURL);  //连接数据库URL

      Statement s=con.createStatement( );  //建立Statement类对象

      String query = "create table student ( "

                      + "id char(10),"

                      + "name char(15),"

                      + "score integer"

                      + ")";  //创建一个含有三个字段的学生表student

      s.executeUpdate(query);  //执行SQL命令

      s.close( );  //释放Statement所连接的数据库及JDBC资源

      con.close( );  //关闭与数据库的连线

    }

    catch(SQLException e){ System.out.println("SQLException: " +e.getMessage( ));  }

  }

}

4.JAVA网络知识:

Java,网络类都在 java.net 类库中

1.套接字

套接字是用于建立两个不同程序之间通过网络进行通信的信道。

建立套接字Socket的方法

  1. 在客户端使用socket类,指定服务器IP和端口号,以便连到服务器上:Socket(host_IP, prot);
  2. 在服务器端使用ServerSocket类,以等待客户端的连接:ServerSocket(port);
  3. 在客户端:建立socket连接后,还应该建立输入输出数据流。getInputStream( )获得输入流 getOutputStream( )获得输出流

D:在服务器端:ServerSocket类的accept( )方法使服务器处于阻塞状态,等待用户请求。

Socket主要方法:

2.实例:

客户机:

import java.io.*;

import java.net.*;

class C

{      public static void main(String[] args)

{              try{ Socket socket=new Socket("127.0.0.1",6565);

             DataOutputStream out=new DataOutputStream(socket.getOutputStream());

out.writeUTF("我是客户机");

DataInputStream in=new DataInputStream(socket.getInputStream());

           String s=in.readUTF();

System.out.println("客户机收到:"+s);

                    }catch(Exception e){}

       }

}

服务器:

import java.io.*;

import java.net.*;

class S

{      public static void main(String[] args)

{try{ServerSocket s_socket=new  ServerSocket(6565);

Socket socket=s_socket.accept();

DataInputStream in=new DataInputStream(socket.getInputStream());

String s=in.readUTF();

   System.out.println("服务器收到:"+s);

DataOutputStream out=new DataOutputStream(socket.getOutputStream());

out.writeUTF("我是服务器");

}catch(Exception e){}

}

}

3.多用户时的网络问题

将服务器写成多线程的,不同的线程为不同的客户服务.main()只负责循环等待.线程负责网络连接,接收客户输入的信息

5.JAVA与多线程:     

1.创建线程的方式

A.public class mythread  implements Runnable(通过Runnable接口)

B.Thread public class mythread extends Thread(.继承类)

C.上述两种方法中都可用类Thread产生线程的对象   Thread newthread;

D.创建并启动线程newthread=new Thread(this);newthread.start();

E. run方法是运行线程的主体,启动线程时,java直接调用 public void run()

F.sleep方法的作用,暂停线程的执行,让其它线程得到机会,sleep要丢出异常,必须抓住异常

Try{sleep(100)}catch(InterruptedException e){}

2.synchronized

synchronized 方法:通过在方法声明中加入 synchronized关键字来声明 synchronized 方法。如:public synchronized void accessVal(int newVal);synchronized 方法控制对类成员变量的访问:每个类实例对应一把锁,每个 synchronized 方法都必须获得调用该方法的类实例的锁方能执行,否则所属线程阻塞,方法一旦执行,就独占该锁,直到从该方法返回时才将锁释放,此后被阻塞的线程方能获得 该锁,重新进入可执行状态。这种机制确保了同一时刻对于每一个类实例,其所有声明为 synchronized 的成员函数中至多只有一个处于可执行状态(因为至多只有一个能够获得该类实例对应的锁),从而有效避免了类成员变量的访问冲突(只要所有可能访问类成员变 量的方法均被声明为 synchronized)。

3.总结:

1. 实现线程有两种方法:

实现Ruannable接口

继承Thread

2. 在小应用中通常在start中创建线程

3 .当新线程被启动时,java调用该线程的run方法,它是Thread的核心.

4. 线程由四个状态:新生,运行,暂停,死亡

5. 两个或多个线程竞争资源时,需要用同步的方法协调资源.

6. 多个线程执行时,要用到同步方法,即使用synchronized的关键字设定同步区

7. waitnotify起协调作用

8.守护线程是为其它线程提供服务的线程,是一个独立的线程,它的run()方法是一个无限循环.守护线程与其它线程的区别是,如果守护线程是唯一运行着的线程,程序会自动退出

6.JAVA事件处理

import java.awt.Event;

JAVA中在类Event,定义了所有的事件处理方法, 处理事件的核心是重写处理事件的方法

public void actionPerformed(ActionEvent evt)

设计处理事件的类时,就要实现这个接口。其一般形式如下:

class  ClassName  implements ActionListener

 {     btn.addActionListener(this);

       public abstract void actionPerformed(ActionEvent e){ }

 }

通过实现ActionListener接口,使得监视器能知道事件的发生。在Java 中,要求产生事件的组件向它的监视器注册,这样,事件源与监视器就建立了一个对应关系。建立对应关系的语句如下:对象名.addActionListener(ClassName);其中,对象是事件源,ClassName是监视器。

例如:btn.addActionListener(this);这条语句的意思是:按钮对象(事件源)btn向它的监视器(当前类)注册,也就是产生事件的事件源对象向监视器注册.

  1. 一个监听对象是一个实现了专门的监听器接口的类的事例。
  2. 一个事件源是一个能够注册监听器对象并向它们发送事件对象的对象。
  3. 事件发生时,事件源会把事件对象发送给所有的注册监听器。
  4. 监听器对象随后会使用事件对象中的信息来决定对事件的反映

AWT明确区分语义事件和地层事件.语义事件是用于表达用户动作(点击按钮”)的事件;因此,ActionEvent是语义事件.底层事件是使这些成为可能的事件.它包括鼠标按下、一系列鼠标移动弹起事件.类似地,调整滚动条是个语义事件;而拖动鼠标则是个底层事件.

事件处理程序的编写

事件处理程序的编写步骤:

1.首先:定义一个实现了相应事件监听接口的类,如:

  class KeyHandler implements KeyListener{ }

2.其次:为组件注册监听器对象,如:btn.addKeyListener(new KeyHandler())

3.使用类本身实现监听接口,例如使用类本身监听KeyEvent事件:

public class KeyTest implements KeyListener{

    public KeyTest(){

          Button btn = new Button(Rec) //init

          btn.addKeyListener(this);//add listener

    }

    //事件处理代码

}

4.定义专门的外部类实现监听接口

public class KeyTest{

    public KeyTest(){

          Button btn = new Button(Rec) ;//init

          btn.addKeyListener(new KeyHandler()); //add listener

    }

}

class KeyHandler implements KeyListener{//事件处理代码}

例如(.使用类本身实现监听接口):


import java.awt.*;

import java.awt.event.*;

class MyWindow extends Frame implements ActionListener

{ TextField text1,text2,text3;

  MyWindow()

   {  setLayout(new FlowLayout());

      add(text1);add(text2);add(text3);

      text1.addActionListener(this);

      text2.addActionListener(this);

      setBounds(100,100,150,150);

      setVisible(true);validate();

   } 

   public void actionPerformed(ActionEvent e) {  if(e.getSource()==text1)

      {  String word=text1.getText();

         if(word.equals("boy"))

           { text3.setText("男孩");

           }

         else if (word.equals("girl"))

           { text3.setText("女孩");

           }

         else if (word.equals("sun"))

          {  text3.setText("太阳");

          }

        else

          {  text3.setText("没有该单词");

          }

      }

    else if(e.getSource()==text2)

      {  String word=text2.getText();

         if(word.equals("男孩"))

         {  text3.setText("boy");

         }

         else if (word.equals("女孩"))

          { text3.setText("girl");

          }

        else if (word.equals("太阳"))

         {  text3.setText("sun");

         }

       else

        {   text3.setText("没有该单词");

        }

      }

   }}

public class Example7_3

{   public static void main(String args[])

    {  MyWindow win=new MyWindow();



7JAVA相关知识

1J2ME

主要是消费电子和嵌入式设备领域

CLDC包含了一个基本的 J2ME 运行环境,其中包括虚拟机和核心的 java 类库。CLDC 的核心是虚拟机和核心类库。虚拟机运行在设备的操作系统之上,对下层的硬件提供必要的兼容和支持;核心类库提供操作系统所需的最小的软件需求。 

J2ME体系结构――ConfigurationProfiles

Configuration的分类是根据计算能力的不同来划分的,同类设备的计算能力相近。Configuration 是一个规范,定义了这类设备的共同Java平台,定义与设备无关的Java虚拟机和核心库,是平台相容性的基础。Profile的分类是根据设备功能划分 的,同类功能的设备其他各种硬件条件和需求也相近。Profile是一组API,在某一Configuration的基础上扩展了针对设备特定功能的 API,使得标准能够完全适应特殊的设备,彻底发挥设备的功能。

针对这两大类设备的平台规范就是Configuration。第一类设备的Configuration称为 CLDCConnected, Limited Device Configuration),第二类称为CDCConnected Device Configuration)。

J2ME 体系的一般结构是:由Configuration定义的Java虚拟机运行于设备的宿主操作系统之上,构成整个平台的基础。Configuration提 供了基本的语言特性,Profile提供针对设备的特殊功能API和扩展类库。应用程序的运行环境需要一个Configuration和至少一个 Profile,多个Profile可以共存,也可以叠加。

我们用两个具体设备的实现作为例子说 明。在一个运行Palm OSPDA上,Configuration采用CLDC,虚拟机采用KVM(虚拟机和Configuration是紧密相连的,KVM只是CLDC定义 的一个参考实现(reference implementation),并不是唯一的选择),然后采用PDA ProfileProfile。在另一个运行Symbian的智能手机上,则可以采用KVMCLDCMIDP


阅读(2561) | 评论(1) | 转发(0) |
0

上一篇:计算机网络总结

下一篇:C++基本知识总结

给主人留下些什么吧!~~

chinaunix网友2010-01-11 17:25:07

xuexile