代码改变世界

java 初学笔记

2011-03-12 10:27  shy.ang  阅读(929)  评论(0编辑  收藏  举报

数据类型:布尔类型 boolean 变量名 = true | false

          字符型   char

  整型     三种形式:八进制、十进制、十六进制

                   byte  short  int  long

      实型     即浮点型 十进制 科学计数法 479E8

 

Switch后面的expression的返回值类型必须是 int byte char short     case子句中的值value必须是常量。

 

/** …*/java特有的doc注释,主要是为支持JDK工具javadoc而采用的。Javadoc能识别注释中用标记@标识的一些特殊变量,并把doc注释加入它所生成的HTML文件中。

 

编程规范

命名规则:包的名字由小写字母序列组成

  类名由大写字母开头而其他字母都小写

  类实例名由小写字母开头,后面的单词用大写字母开头

  常量名都大写,并指出完整含义

  参数名无规定

  数组名用“类型[ ] 数组名”的形式

 

Java程序结构:

应用程序类   java程序名必须和该应用程序类名相同;应用程序类必须封装在一个main方法中,而且必须用publicstaticvoid限定。Public指明本程序所有类可以使用这个方法,static指明这是一个类方法,可以通过类名直接调用,void指明本方法不返回任何值。

Java程序至多有一个public类,当有一个时,该程序文件名必须和类名相同。

Abstract类:该类必须被继承

Final类:不能被继承

。。。。。。。。。。。。。。。。。。。。。。。。。

成员变量的限定词:

Transient:暂时性变量

Final:声明常量,程序中不能改变它的值,通常常量名用大写

Volatile:声明共享变量,多线程操作

    成员方法的限定词:

        Abstract:抽象方法,必须被重写,抽象类中不一定包含抽象方法,

                但有抽象方法的类一定是抽象类

Final:不能被重写

Native:将java代码和其他语言代码集成

Synchronized:控制多个并发线程对共享数据的访问

 

 

 

 

 

类成员或类方法:static限定,属于一个类,被所有实例共有,可以通过类和实例访问。

类方法只能对类变量进行操作,不能访问实例变量,即没有static限定的变量

 

Java只有构造函数,有自动搜集和清理垃圾的能力,一般不需要析构函数。

每个类都有构造方法来初始化类的实例,必须是public

Book classObj = new Book();

 

方法重载,参数个数不同,或者参数类型不同,不能只是方法的返回类型不同。

 

 

Java中,所有的类都继承java.lang.Object,通过继承,可以实现代码的复用,继承得到的类称为子类,通过在类的声明中加入extends子句来创建一个类的子类

子类对象用父类构造方法实例化是不可以的(有多余的方法和变量需要构造),但反过来可以。

 

Java多态性

静态多态:编译时多态,方法重载,具体调用哪个被重载的方法,是编译器在编译阶段静态决定的。

动态多态:在程序中,所有要求使用父类对象的地方,都可以用子类对象代替。对于重写的方法,java运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法。对于子类实例,如果重写了父类方法,运行时系统调用子类的重写方法,否则还是调用父类方法。

 

Java中,操作符instanceof用来判断对象是否属于某个类的实例

 

接口是方法定义和常量值的集合,java通过接口使得处于不同层次甚至互不相关的类可以拥有相同的行为。

 

接口是一种特殊的抽象类,只包含常量和方法的定义,没有变量和方法的实现。

限定词:interface

Public接口: 表示任意类都可以使用该接口,否则就只有该接口定义在同一个包中的类才可以访问该接口。

Extends表明父接口,一个类只能有一个父类,但一个接口可以有多个父接口,用逗号隔开,从而实现了“多重继承”。

接口常量定义:type NAME = value;具有publicfinalstatic属性,final表示这是一个常量。

在接口中,只提供方法的声明,不提供方法的实现,具有publicabstract属性

如果子接口中定义了与父接口同名的常量或者方法,父接口的常量被隐藏,方法被重写。

在类声明中用implemnts子句表示使用某个接口,在类体中可以使用接口中的常量,必须实现接口中定义的所有方法

 

抽象类:abstract xxx;表示他不应该被实例化为一个对象,abstract类必须被继承,abstract方法必须被重写。

抽象类中可以(但不一定必须要)包含抽象方法,对抽象方法只需声明,不需要实现。抽象方法的主要目的是为所有子类定义一个统一的接口,抽象方法必须被重写。

一个类包含了抽象方法就必须声明为抽象类

 

Java Applet和java application 都有类的定义,程序本身就是一个类,不同在于java Applet必须是Applet类的子类,而且没有main()方法。Applet类实现了许多方法,构造了一个窗口程序的主要框架,用户只需重写所需的方法就行,系统会自动调用。

 

生成字符串:String substr = new String"good");

String类表示不变字符串,对字符串进行修改操作时,不能直接对原有字符串的内容进行修改,而是通过生成String类的拷贝进行;

StringBuffer表示可变字符串,可以直接对字符串进行修改操作,操作后字符串发生了变化。

 

数组定义时并不为数组元素分配内存,故不用给出数组的长度 String[] str 

 

异常:异常对象对应Throwable类以及该类的子类,有java.lang.Errorjava.lang.Exception两个子类。

Error异常包括虚拟机错误等,而Exception子类异常是java程序要处理的。

 

Throws

Try

Catch

 

 

 

容器

主要有三种容器:FramePanelApplet

Frame:Java.lang.object 

-> java.awt.component 

-> java.awt.Container

  ->java.awt.window

->java.awt.Frame

FrameWindow的子类,是窗口的一种,Frame的构造方法FrameString title),该方法将生成一个不可见的Frame对象;又由于是Component的子类,可以通过setSize()设置Frame的大小,若没设置,则初始化大小为(0,0),不可见状态。

 

Panel:java.lang.object

->java.awt.Component

->java.awt.Container

->java.awt.Panel

创建一个Panel对象后,需要将该对象放入WindowFrame中,这样才能使得Panel中内容可见

布局管理器

FlowLayout  是PanelApplet的缺省布局管理器 在这种管理器中,组件按照一排一排的依次放置,当容器被重新设置大小后,组件布局也会相应改变,各组件大小不变,相对位置变。

FlowLayout();居中放置,组件间水平和垂直间距都为5

FlowLayoutint align);左对齐、右对齐

FlowLayoutint alignint hgapint vgap);

 

FrameObj. setLayout(FlowLayout layoutObj);

 

BoderLayout WindowDialogFrame的缺省布局管理器 包括5个区域:东西南北中,拉伸使用容器布局时,各个组件相对位置不变,中间部分组件会发生变化,EastWest位置的组件宽度不变,高度改变;而NorthSouth位置则相反。

 

GridLayout 按网格状布局,与Flowlayout相反,当容器大小改变时,组件的相对位置不变,而组件的大小随之改变。

 

 

事件处理

事件源                    监听器接口

ActionEvent    ------->>>   ActionListener       要实现接口的所有方法

 

为了将事件源上产生的事件传递给监听器处理,需要对监听器进行注册和注销,addActionListenerActionListener ListenerObj) 和  removeActionListenerActionListener ListenerObj

 

实现监听器接口(一般有三种方式)——>注册监听器——>实现重载接口的需要的方法

 

适配器:当程序所在的类需要使用事件处理机制时,只需要让该事件继承所对应的Adapter类,然后只重写需要的方法就可以了,而不需要实现接口的所有方法。但是适配器只是一个类,由于java语言的单一继承机制,当需要多种监听器或者当前类已有父类时,就不能使用适配器类了。

 

多线程

Java的线程是通过java.lang软件包中的Thread类来实现的,当生成一个Thread类的对象后,新线程产生。

线程的生命周期:

创建状态Thread thObj = New Thread()

——>可运行状态 start ( )

<——>不可运行状态(发生线程阻塞、调用wait()方法等候一个条件变量、sleep()

——>死亡态,run()结束

多线程两种构造:ThreadRunnable target)   ThreadString name

多线程的互斥

关键字synchronized

通过Wait(), notify(),notifyAll()来同步线程

三种方法必须在已经持有锁的情况下执行,因此它们只能出现在synchronized作用范围内。

Wait()方法作用是释放已持有的锁,进入wait队列

Notify()方法作用是唤醒wait队列中的第一个线程,并将该线程移入互斥锁申请队列。

Notifyall()方法作用是唤醒wait队列中的所有线程,并将这些线程移入互斥锁的申请队列。

 

 

 

Java程序设计流程******************************************

java语言中,所有的程序都是类,因此在进行一个java程序设计时,首先需要分析清楚程序的目的是什么,然后构造程序的框架结构,包括需要创建哪些类,各个类之间如何进行交互,比如通过事件激发另外的类进行不同的功能处理;在同一个类中,如何通过线程实现程序流的控制。

 

 

 

 

Java可以处理的图像格式为GIFJPEG,封装在Image类中

图像的加载

Application:需要使用Toolkit.getImage();该方法定义有两种:

Image getImage(URL url)

Image getImageString filename);

 

要得到Toolkit对象有两种方法,一种通过类Toolkit的静态方法getDefaultToolkit(),另一种调用某个组件对象的实例方法getToolkit

   如:

Image imageObj = Toolkit.getDefaultToolkit.getImage("file.jpg");

Image imageObj = getToolkit.getImage("file.jpg");

 

AppletApplet提供了getImage(),可以直接载入图像

Image getImageURL url);

Image getImageURL urlString name);

 

图像处理

Java.awt.image提供了图像过滤器对图像进行处理,包括ImageFilter和它两个子类CropImageFilterRGBImageFilterImageFilter类不对图像数据进行处理,CropImageFilter用于提取图像中指定矩形区域的图像,而RGBImageFilter用于对图像的色彩进行处理,该类是抽象类。

步骤:得到原始图像和其数据源——>生成图像过滤器——>然后通过FilterdImageSource类建立新图像所需的数据,并通过CreateImage()方法生成新图像

ImageFilter filter = new CropImageFilter(x,y,w,h);

ImageProducer producer = new FilteredImageSource(img.getSource(),filter);

Image img = createImage(producer);

 

 

网络编程

socket提供了getInputStream() 和 getOutputStream() 方法来得到对应的输入流和输出流,这两个方法分别返回InputStreamOutputStream类对象,在程序中可以通过这两个对象按照一定的协议进行读写操作。

读写操作完毕后,在关闭socket之前,应将于socket相关的所有输入流和输出流全部关闭,必须注意关闭顺序,应该先将输入输出流关闭,再关闭socket

 

数据报通信

UDP  面向非连接

Java.net中提供DatagramSocketDatagramPacket两个类进行数据报通信,DatagramSocket用于建立程序间的数据包传送通信连接,DatagramPacket用于表示一个数据报。

接收数据报:DatagramPacket packet = new DatagramPacket(buf256)

socket.receivepacket);

发送数据报:DatagramPacket packet = new DatagramPacket(bufbuf.lengthaddressport)

socket.send (packet);