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方法中,而且必须用public、static、void限定。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;具有public、final、static属性,final表示这是一个常量。
在接口中,只提供方法的声明,不提供方法的实现,具有public、abstract属性
如果子接口中定义了与父接口同名的常量或者方法,父接口的常量被隐藏,方法被重写。
在类声明中用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.Error和java.lang.Exception两个子类。
Error异常包括虚拟机错误等,而Exception子类异常是java程序要处理的。
Throws
Try
Catch
容器
主要有三种容器:Frame、Panel、Applet
Frame:Java.lang.object
-> java.awt.component
-> java.awt.Container
->java.awt.window
->java.awt.Frame
Frame是Window的子类,是窗口的一种,Frame的构造方法Frame(String title),该方法将生成一个不可见的Frame对象;又由于是Component的子类,可以通过setSize()设置Frame的大小,若没设置,则初始化大小为(0,0),不可见状态。
Panel:java.lang.object
->java.awt.Component
->java.awt.Container
->java.awt.Panel
创建一个Panel对象后,需要将该对象放入Window和Frame中,这样才能使得Panel中内容可见。
布局管理器
FlowLayout 是Panel、Applet的缺省布局管理器 在这种管理器中,组件按照一排一排的依次放置,当容器被重新设置大小后,组件布局也会相应改变,各组件大小不变,相对位置变。
FlowLayout();居中放置,组件间水平和垂直间距都为5
FlowLayout(int align);左对齐、右对齐
FlowLayout(int align,int hgap,int vgap);
FrameObj. setLayout(FlowLayout layoutObj);
BoderLayout 是Window、Dialog和Frame的缺省布局管理器 包括5个区域:东西南北中,拉伸使用容器布局时,各个组件相对位置不变,中间部分组件会发生变化,East和West位置的组件宽度不变,高度改变;而North和South位置则相反。
GridLayout 按网格状布局,与Flowlayout相反,当容器大小改变时,组件的相对位置不变,而组件的大小随之改变。
事件处理
事件源 监听器接口
ActionEvent ------->>> ActionListener 要实现接口的所有方法
为了将事件源上产生的事件传递给监听器处理,需要对监听器进行注册和注销,addActionListener(ActionListener ListenerObj) 和 removeActionListener(ActionListener ListenerObj)
实现监听器接口(一般有三种方式)——>注册监听器——>实现重载接口的需要的方法
适配器:当程序所在的类需要使用事件处理机制时,只需要让该事件继承所对应的Adapter类,然后只重写需要的方法就可以了,而不需要实现接口的所有方法。但是适配器只是一个类,由于java语言的单一继承机制,当需要多种监听器或者当前类已有父类时,就不能使用适配器类了。
多线程
Java的线程是通过java.lang软件包中的Thread类来实现的,当生成一个Thread类的对象后,新线程产生。
线程的生命周期:
创建状态Thread thObj = New Thread()
——>可运行状态 start ( )
<——>不可运行状态(发生线程阻塞、调用wait()方法等候一个条件变量、sleep()
——>死亡态,run()结束
多线程两种构造:Thread(Runnable target) Thread(String name);
多线程的互斥
关键字synchronized
通过Wait(), notify(),notifyAll()来同步线程
三种方法必须在已经持有锁的情况下执行,因此它们只能出现在synchronized作用范围内。
Wait()方法作用是释放已持有的锁,进入wait队列
Notify()方法作用是唤醒wait队列中的第一个线程,并将该线程移入互斥锁申请队列。
Notifyall()方法作用是唤醒wait队列中的所有线程,并将这些线程移入互斥锁的申请队列。
Java程序设计流程******************************************
在java语言中,所有的程序都是类,因此在进行一个java程序设计时,首先需要分析清楚程序的目的是什么,然后构造程序的框架结构,包括需要创建哪些类,各个类之间如何进行交互,比如通过事件激发另外的类进行不同的功能处理;在同一个类中,如何通过线程实现程序流的控制。
Java可以处理的图像格式为GIF和JPEG,封装在Image类中
图像的加载
Application:需要使用Toolkit.getImage();该方法定义有两种:
Image getImage(URL url);
Image getImage(String filename);
要得到Toolkit对象有两种方法,一种通过类Toolkit的静态方法getDefaultToolkit(),另一种调用某个组件对象的实例方法getToolkit
如:
Image imageObj = Toolkit.getDefaultToolkit.getImage("file.jpg");
Image imageObj = getToolkit.getImage("file.jpg");
Applet:类Applet提供了getImage(),可以直接载入图像
Image getImage(URL url);
Image getImage(URL url,String name);
图像处理
Java.awt.image提供了图像过滤器对图像进行处理,包括ImageFilter和它两个子类CropImageFilter和RGBImageFilter。ImageFilter类不对图像数据进行处理,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() 方法来得到对应的输入流和输出流,这两个方法分别返回InputStream和OutputStream类对象,在程序中可以通过这两个对象按照一定的协议进行读写操作。
读写操作完毕后,在关闭socket之前,应将于socket相关的所有输入流和输出流全部关闭,必须注意关闭顺序,应该先将输入输出流关闭,再关闭socket。
数据报通信
UDP 面向非连接
Java.net中提供DatagramSocket和DatagramPacket两个类进行数据报通信,DatagramSocket用于建立程序间的数据包传送通信连接,DatagramPacket用于表示一个数据报。
接收数据报:DatagramPacket packet = new DatagramPacket(buf,256);
socket.receive(packet);
发送数据报:DatagramPacket packet = new DatagramPacket(buf,buf.length,address,port)
socket.send (packet);