一.java基础:java开发环境配置,jdk的安装以及环境变量的设置,还有java的基本数据类型。数据类型有值类型和应用类型,值类型有:int、byte、float、double、long、boolen。
二.类与对象。掌握什么是类以及类的实例化。最初写的是很简单的类,从练习中慢慢熟悉了定义类的格式。如:写一个学生类
public class student{
//定义私有的姓名属性
private string name;
//定义私有的年龄属性
private int age;
//写一个公共的给姓名属性赋值的方法
public void setname(name){
this.name = name;
}
//写一个公共的给年龄属性赋值的方法
public void setage(int age){
this.age = age;
}
//一个获取姓名的方法
public string getname(){
return name;
}
//一个获取年龄值的方法
public int getage(){
return age;
}
}
重新再写一个manager类,其中含有主函数main,这是程序运行的入口。
public class manager{
//主函数
public static void main(string[] args){
//用student类实例化对象st
student st = new student();//student()也就是构造器的调用
//对象st调用setname()方法给对象的名字属性赋值
st.setname("张三");
//对象st调用setage()方法给对象的年龄属性赋值
st.setage(20);
//对象st调用getname()方法返回名字属性的值
st.getname();
//象st调用getage()方法返回年龄属性的值
st.getage();
}
}
三.登陆界面开发。了解构造器、方法的重载、this关键字以及值传递与应用传递。一个简单的界面程序:
(1)构造器的格式:构造方法的名字与类名完全相同并且没有返回值。
如果重写了一个有参数的构造器,那么默认的无参构造器就不能被调用,除非在类定义中显示申明。
public class student{
//定义私有的姓名属性
private string name;
//定义私有的年龄属性
//定义一个无参数构造函数
public student(){}
//定义一个带一个参数的构造器
public student(string name){
this.name = name;
}
//写一个公共的给姓名属性赋值的方法
public void setname(name){
this.name = name;
}
//一个获取姓名的方法
public string getname(){
return name;
}
}
(2)方法的重载格式:两个方法的名字相同,但是它们的参数个数或者参数类型不同。
例如:
public void play(){
system.out.println(name+"正在玩!");
}
public void play(int i){
system.out.println(name+"是第"+i+"次玩了!");
}
以上就是方法的重载,它们的参数个数不同。调用play方法时根据传的参数值的类型选择符合的方法实现。
(3)this关键字有两个重要作用:
1.代表本对象,如this.name表示本对象的name属性
2.this可以调用类中其他的构造器,如:
public class student{
//定义一个无参构造函数
public student(){
this("张三");//调用参数匹配的构造器实例化对象,此代码必须在第一行
}
public student(string name){
this.name = name;
}
private string name;
}
(4)值传递传递的是参数的具体值,引用传递传递的是引用地址。
八种基本类型以及string型的都是值传递,类实例化的对象传递是引用传递。
(5)尝试做窗口界面程序。
知道了jframe是属于容器类组件,它可以使用add(component comp)添加一些元素组件,如jbutton、jlabel等。一下是一段简单的窗体程序:
public class jframetest{
public static void main(string[] args){
//实例化对象
jframetest jt = new jframetest();
//调用showui方法
jt.showui();
}
public void showui(){
//创建一个窗体
javax.swing.jframe jf = new javax.swing.jframe();
//设置窗体的标题
jf.settitle("登陆界面");
//设置窗体的大小
jf.setsize(250,200);
//设置窗体不可改变大小
jf.setresizable(false);
//创建流式布局对象
java.awt.flowlayout fl = new java.awt.flowlayout();
//设置窗体的布局为流式布局
jf.setlayout(fl);
//创建一个文本框
javax.swing.jtextfield txt = new javax.swing.jtextfield(20);
//把文本框对象添加到窗体中
jf.add(btn);
//创建一个按钮
javax.swing.jbutton btn = new javax.swing.jbutton("登陆");
//把按钮对象添加到窗体中
jf.add(btn);
//设置关闭窗体的时候退出程序
jf.setdefaultcloseoperation(3);
//设置窗体可见
jf.setvisible(true);
}
}
四.类的继承。
内容有:
1.类继承的实现和作用
前面已经学了类的语法格式,现在学了类的继承。类的继承是用extends关键字。
示例:
public class unstudent extends student{
//方法和属性
}
类的继承作用:子类继承父类后,子类会继承父类的属性和方法,根据需要子类可以重写父类的方法。
注意点:除了private修饰的属性和方法不能被继承,public,protected以及不加修饰符的方法以及属性都能被子类继承。
//父类student
public class student {
private string name;//子类不能继承使用该属性
protected int age;
public void setname(string name) {
this.name = name;
}
void setage(int age) {
this.age = age;
}
//子类不能调用该方法,如过要调用,那么在子类中必须重写这个方法
private string getname(){
return this.name;
}
int getage(){
return age;
}
}
2.接口
接口定义的关键字是interface;
public interface 接口名{
//接口中定义的方法
//方法没有方法体,也就是方法不能有具体的实现
//方法示例
public void study();
//每一个方法都没有{},{}指的是有具体的方法实现。
}
不论方法的修饰符有没有public,接口都默认它是public。
类实现这个接口后,子类必须重写接口中的方法。这也是接口的特性,它的作用也在此得到体现 ,这一特性可以防止我们漏写接口中的方法。
接口中只有常量,一般定义格式是:
public static final string name;
static 表示这是静态的,该属性可以直接用类名调用而不需要类的实例化对象;
final 表示的是name是不能再被赋值,不能改变的。
接口不能用来创建对象。
3.抽象类
抽象类是介于类和接口之间的。因为接口被子类实现后,子类必须重写接口中所有的方法,而有些时候我们并不需要使用到接口中所有的方法,所以就加入了抽象类,它可以让我们对接口中的方法选择性的重写和使用。
抽象类定义格式:
pubic abstract class 类名{
//定义属性和方法
}
//不能使用abstract去定义属性,
如:abstract protected string time;这是错误的。
子类继承抽象类用extends关键字,子类继承抽象类后,如果抽象类中的方法用abstract修饰的,那么子类必须重写这些方法。
抽象类也不能创建对象,因为抽象类中可能有abstract修饰的方法,这种方法是没有具体实现的。可以这么理解,因为接口和抽象类中含有没有具体实现的方法,所以是不能创建对象的。
abstract和private关键字不能同时使用,如:
abstract private void play();这是不对的。abstract可以和public、protected连用,abstract后也可不接修饰符,它会默认是public。
抽象类常用作“适配器”,因为无论一个接口中定义了多少方法,子类都必须实现。
import java.awt.event.mouseevent;
import java.awt.event.mouselistener;
public class mouse implements mouselistener {
@override
public void mouseclicked(mouseevent e) {
// todo auto-generated method stub
}
@override
public void mouseentered(mouseevent e) {
// todo auto-generated method stub
}
@override
public void mouseexited(mouseevent e) {
// todo auto-generated method stub
}
@override
public void mousepressed(mouseevent e) {
// todo auto-generated method stub
}
@override
public void mousereleased(mouseevent e) {
// todo auto-generated method stub
}
}
以上是用在类mouse实现(继承)接口mouselistener(java.awt.event.mouselistener),在子类mouse中必须重写以上所有方法。为此,java的设计者提供了一个抽象类:java.awt.event.adapter,这个类实现了所有鼠标监听器接口(mouselistener,mousewheellistener,mousemotionlistener),只是这个类定义为抽象类(abstract)。如下是java的设计者已经写好的:
public abstract class mouseadapter implements mouselistener, mousewheellistener, mousemotionlistener {
/**
* {@inheritdoc}
*/
public void mouseclicked(mouseevent e) {}
/**
* {@inheritdoc}
*/
public void mousepressed(mouseevent e) {}
/**
* {@inheritdoc}
*/
public void mousereleased(mouseevent e) {}
/**
* {@inheritdoc}
*/
public void mouseentered(mouseevent e) {}
/**
* {@inheritdoc}
*/
public void mouseexited(mouseevent e) {}
/**
* {@inheritdoc}
* @since 1.6
*/
public void mousewheelmoved(mousewheelevent e){}
/**
* {@inheritdoc}
* @since 1.6
*/
public void mousedragged(mouseevent e){}
/**
* {@inheritdoc}
* @since 1.6
*/
public void mousemoved(mouseevent e){}
}
这样我们就可以根据自己的需要,选择性地重写java.awt.event.mouseadapter这个抽象类中的方法。
swing组件用容器类组件和元素组件。
container(容器)组件:用于管理其他界面组件的组件,例如:jframe(窗体组件),jpanel等。
元素组件:用于构成各种用户界面的组件,例如:jlabel(标签),jtextfield(文本框),jbutton(按 钮)等。
任何元素组件都有一个.addactionlistener(java.awt.actionlistener listener)方法,这个方法实现了接收一个实现了java.awt.actionlistener接口的对象,将这个对象加为某个对象(事件源)的事件处理器,当一般的动作事件(如按键、鼠标单击)发生时,组件(事件源)就会自动调用所加入的实现了ava.awt.actionlistener接口的对象的事件处理方法。
下面是简单示例:
1.先编写一个实现了ava.awt.actionlistener接口的类mybuttonlistener
/**
* 一个简单的动作时间监听器:当时间发生时, 在命令行输出按钮上的标签文字
*/
import java.awt.event.actionevent;
public class mybuttonlistener implements java.awt.event.actionlistener {
@override
// 必须重写的接口中的方法:当时间发生时,这个方法被调用
public void actionperformed(actionevent e) {
// 得到事件源对象
object sour = e.getsource();
// 如果事件是一个按钮:
if (sour instanceof javax.swing.jbutton) {
javax.swing.jbutton bu = (javax.swing.jbutton) sour;
// string lab = bu.getactioncommand();
string lab = bu.gettext();
// 在这里bu.gettext()与bu.getactioncommand()的效果一样
// 都是将事件源上的标签赋值给string类型的lab
system.out.println("您按下了\"" + lab+"\"按钮");
} else {
system.out.println("其他组件发出的事件!");
}
}
}
2.在编写程序入口的类
import javax.swing.jbutton;
import javax.swing.jframe;
public class manager extends jframe{
/**
* 主函数,程序入口
*/
public static void main(string[] args) {
//实例化对象
manager mana = new manager();
//调用显示窗体的方法
mana.showui();
}
学了事件处理后,我学习了做一个简单的画板程序,该画板简单到只能选择颜色,画直线、矩形、圆形和填充圆。这个程序中我用到了接口,抽象类,使用内部类简化事件处理方式。
1.类实现接口必须重写接口中所有的方法
2.在内部类中可以new 接口名
如:
btncolor.addactionlistener(new actionlistener() {
public void actionperformed(actionevent e) {
color = javax.swing.jcolorchooser.showdialog(null, "颜色选择器",
color);
}
});
3.对于鼠标的事件监听,使用java.awt.event.mouseadapter抽象类比鼠标事件监听器接口要好,继承这个抽象类的子类只需要重写我们所需要的方法,避免代码的冗余。
4. java.awt.graphics不能实例化对象,javax.swing.jframe类提供了一个getgraphics()方法可以得到java.awt.graphics对象,graphics可以理解为"画布"对象,通过调用graphics对象不同的draw方法并传入鼠标的坐标参数,就可以在jframe界面上画出相应的图形。
注意:用jframe对象取得画布对象一定要在界面setvisible(设置可见性)后取得。
以下是只可以画直线的简单程序:
import java.awt.graphics;
import java.awt.event.mouseevent;
import java.awt.event.mouselistener;
import java.awt.event.mousemotionlistener;
import java.awt.event.mousewheellistener;
public class sampledraw {
private int x1,y1,x2,y2;//记录鼠标两次点击的坐标
private java.awt.graphics g;//从界面对象上得到的画布对象
public static void main(string[] args){
sampledraw sd = new sampledraw();
sd.showui();
}
//显示主界面
public void showui(){
javax.swing.jframe jf = new javax.swing.jframe();
jf.settitle("画板");
jf.setsize(500,300);
jf.setresizable(false);
//加上自定义的鼠标事件监听器:鼠标释放是调用方法
jf.addmouselistener(new java.awt.event.mouseadapter(){
//只需要重写需要的方法即可,因为父类不是接口
//鼠标按下时点的坐标
public void mousepressed(mouseevent e){
//记录第一次点击的x,y,通过事件对象e得到
x1 = e.getx();
y1 = e.gety();
}
public void mousereleased(mouseevent e){
//记录第二次点击的x,y
x2 = e.getx();
y2 = e.gety();
//现在,两次点的坐标都得到了,在画布上画线,调用画布对象的方法
g.drawline(x1,y1,x2,y2);
}
});
jf.setdefaultcloseoperation(3);//关闭时退出程序
jf.setvisible(true);
//用jframe对象取得画布对象时,一定要在界面setvisible(设置可见性)后取得。
g = jf.getgraphics();
}
}
//显示窗体的方法
void showui(){
//设置窗体的标题
this.settitle("第一个界面程序");
//设置窗体的大小
this.setsize(340,280);
//设置窗体的流式布局
this.setlayout(new java.awt.flowlayout());
//创建文本框
javax.swing.jtextfield txt = new javax.swing.jtextfield(20);
//创建按钮
jbutton btn = new jbutton("登陆");
this.add(txt);//把文本框添加到窗体中
this.add(btn);//把按钮添加到窗体中
//创建一个实现了addactionlistener接口的对象
mybuttonlistener mb = new mybuttonlistener();
//给按钮添加动作事件监听器,并绑定事件处理器
btn.addactionlistener(mb);
//设置窗体居中
this.setlocationrelativeto(null);
//设置窗体关闭时退出程序
this.setdefaultcloseoperation(3);
//设置窗体可见性
this.setvisible(true);
}
}
小结:
每一个事件监听器都是一个接口,当子类实现某一个监听器接口时,子类必须重写接口中所有的方法。而有些方法是我们不需要的,所以我们可以用抽象类来作为接口和类的“适配器”,我们就可以根据自己的需要重写抽象类中的方法。
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/