[Java] 面向对象和面向过程
这要从main()函数说起,它是程序的起点,也是程序的终点。
① 在面向对象程序中main函数能做什么?
三个字:类测试!
在main函数中,通常会执行下面的几步操作:
(1)在测试类中main函数之前定义一个变量,它可能是实例化后对象的句柄。
(2)类的实例化,在这个过程中创建对象,以提供属性和方法访问的入口。
(3)访问类中定义的属性和方法。
(4)输出测试的结果。
因此可以看出,main函数主要是测试流程的控制和测试结果的输出。
具体的类的定义和声明放在另外一个java文件中。
比如,定义了一个类叫Dog,那么Dog的定义请写在Dog.java中。对Dog类的测试请写在DogTest.java中,DogTest.java文件中有main函数,那是程序的住入口地址。
这就是类和流程的相分离,是简单工厂模式的一种实现。
结论:main函数是测试流程的控制和测试结果的输出.能测试真正的类和启动你的java程序
② 在面向过程程序中main函数能做什么?
在面向过程设计中,main函数可谓是独揽大权,所有的变量,函数都得在其中定义和测试。
他控制了整个的流程和结果的输出,主要是关心的先做什么在做什么最后做什么,而不是像面向对象式的模块的组建和拼接。
下面,我举一个面向对象的例子:Java GUI demo
package swing1;
import java.awt.*;
import javax.swing.*;
public class Login1 extends JFrame{
//一个是用户名的,一个是密码的,一个是按钮的
JPanel jp1,jp2,jp3;
//两个文本标签
JLabel jlb1,jlb2;
//两个按钮
JButton jb1,jb2;
//一个文本输入域
JTextField jtf1;
//一个密码输入域
JPasswordField jpf1;
public static void main(String[] args) {
new Login1();
}
public Login1(){
//创建面板
jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();
//创建文字域
jlb1=new JLabel("usename");
jlb2=new JLabel("password");
//创建按钮
jb1=new JButton("Login");
jb2=new JButton("Cancel");
//创建输入域
jtf1=new JTextField(10);
jpf1=new JPasswordField(10);
//设置为流式布局,否则值显示最后一个Panel
this.setLayout(new GridLayout(3,1,10,10));
//将相应的组件加入相应的面板
jp1.add(jlb1);
jp1.add(jtf1);
jp2.add(jlb2);
jp2.add(jpf1);
jp3.add(jb1);
jp3.add(jb2);
//将面板加入窗体
this.add(jp1);
this.add(jp2);
this.add(jp3);
//设置窗体属性
this.setTitle("Login");
this.setSize(300,160);
this.setLocation(300,300);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
}
}
在这个例子中,我们定义了一个叫做Login1的类,这个类继承了JFrame类。
在调用函数前先定义了一些对象变量,这些变量提供了访问对象中属性和方法的句柄。
Login1类有两个函数:
主函数main只有一个语句:new Login1(); 这是一个匿名类。
构造函数中主要是实例化类和访问对象的方法设置窗体和按钮的属性。
JFrame JBUtton JLabel JPanel等都是Java API中所定义好的类。实例化之后就能直接使用。
我们还可以将main函数和Login类相分离,文件名分别叫:Login1.java 和 Login1Test.java,这样,程序更具灵活性和复用性。
That's all