学到了(面向对象技术概述怎么写的)面向对象技术概述怎么写好,Java基础——面向对象技术的应用,java技术应用基础,
一、静态内部类的简单应用
静态内部类可以访问外部类的静态成员,不能访问外部类的普通成员。静态内部类看做外部类的一个静态成员。本例是用来求出一个数组的最大值与最小值:
先创建一个MaxMin类:
package cn.pxy.test;public class MaxMin {public static class Result{private double max;private double min;public Result(double max,double min) {this.max=max;this.min=min;}public double getMax() {return max;}public double getMin() {return min;}}public static Result getResult(double[] array) {double min=Double.MAX_VALUE;double max=Double.MIN_VALUE;for(double i:array) {if(i>max) {max=i;}if(i<min) {min=i;}}return new Result(max,min);}}再编写test类进行测试:
package cn.pxy.test;public class Test {public static void main(String[] args) {double[] array=new double[5];for(int i=0;i<array.length;i++) {array[i]=100*Math.random();}System.out.println("源数据:");for(int i=0;i<array.length;i++) {System.out.println(array[i]);}System.out.println("最大值:"+MaxMin.getResult(array).getMax());System.out.println("最小值:"+MaxMin.getResult(array).getMin());}}运行结果:
二、匿名内部类的简单应用
匿名内部类没有访问修饰符。匿名内部类没有构造方法。因为它连名字都没有那又何来构造方法呢。匿名内部类适合那种只需要使用一次的类。比如:键盘监听操作等等。在安卓开发、awt、swing开发中常见。
利用匿名内部类编写一个简单的图片查看器:
package cn.pxy.test;import java.awt.BorderLayout;import java.awt.EventQueue;importjavax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;import javax.swing.UIManager;importjavax.swing.JButton;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JLabel;import javax.swing.SwingConstants;import java.awt.GridLayout;public class ImageViewer extends JFrame {private static final long serialVersionUID = 1311689308422117198L;private JPanel contentPane;private JLabel label;public static void main(String[] args) {try {UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");} catch(Throwable e) {e.printStackTrace();}EventQueue.invokeLater(new Runnable() {public void run() {try {ImageViewer frame = newImageViewer();frame.setVisible(true);} catch (Exception e) {e.printStackTrace();}}});}/*** Create the frame.*/public ImageViewer() {setTitle("图片浏览器");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 300, 240);contentPane = newJPanel();contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));contentPane.setLayout(new BorderLayout(0, 0));setContentPane(contentPane);JPanel panel =new JPanel();contentPane.add(panel, BorderLayout.CENTER);panel.setLayout(new BorderLayout(0, 0));JPanel buttonPanel = newJPanel();panel.add(buttonPanel, BorderLayout.NORTH);JButton button1 =new JButton("图片1");//匿名内部类button1.setFont(new Font("微软雅黑", Font.PLAIN, 16));button1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {label.setIcon(new ImageIcon("src/images/1.png"));}});buttonPanel.setLayout(new GridLayout(2, 3, 5, 5));buttonPanel.add(button1);JButton button2 = new JButton("图片2");button2.setFont(new Font("微软雅黑", Font.PLAIN, 16));button2.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {label.setIcon(new ImageIcon("src/images/2.png"));}});buttonPanel.add(button2);JButton button3 = new JButton("图片3");button3.setFont(new Font("微软雅黑", Font.PLAIN, 16));button3.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {label.setIcon(new ImageIcon("src/images/3.png"));}});buttonPanel.add(button3);JButton button4 = new JButton("图片4");button4.setFont(newFont("微软雅黑", Font.PLAIN, 16));button4.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {label.setIcon(newImageIcon("src/images/4.png"));}});buttonPanel.add(button4);JButton button5 = new JButton("图片5");button5.setFont(new Font("微软雅黑", Font.PLAIN,16));button5.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {label.setIcon(newImageIcon("src/images/5.png"));}});buttonPanel.add(button5);JButton button6 = new JButton("图片6");button6.setFont(new Font("微软雅黑", Font.PLAIN,16));button6.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {label.setIcon(new ImageIcon("src/images/6.png"));}});buttonPanel.add(button6);label = new JLabel("");label.setHorizontalAlignment(SwingConstants.CENTER);panel.add(label, BorderLayout.CENTER);}}运行测试,分别点击图片1、图片5:
点击图片1
点击图片5
三、局部内部类的简单应用
定义在方法内部的,作用域只限于本方法,称为局部内部类。局部内部类的的使用主要是用来解决比较复杂的问题,想创建一个类来辅助我们的解决方案,到那时又不希望这个类是公共可用的,所以就产生了局部内部类。局部内部类和成员内部类一样被编译,只是它的作用域发生了改变,它只能在该方法中被使用,出了该方法就会失效。局部内部类在实际开发中应用很少。
本示例将实现一个简单闹钟的功能,运行程序,控制台会不断输出当前时间,并且每隔一秒会发出提示音,用户可以单击确定按钮来退出:
1.编写AlarmClock类,在该类中定义两个域:delay表示延迟的时间,flag表示是否需要发出提示音,在start()方法中,使用Timer类来安排动作发出事件:
package cn.pxy.test;import java.awt.Toolkit;importjava.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.text.SimpleDateFormat;import java.util.Date;import javax.swing.Timer;public class AlarmClock {private int delay;private boolean flag;public AlarmClock(int delay,boolean flag) {this.delay=delay;this.flag=flag;}public void start() {//定义内部类实现动作接听接口class Printer implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {//定义时间格式SimpleDateFormat format=new SimpleDateFormat("k:m:s");//获取当前时间String result=format.format(new Date());System.out.println("当前时间是:"+result);//根据flag决定是否发出声音if(flag) {Toolkit.getDefaultToolkit().beep();}}}//创建Timer对象并启动new Timer(delay,new Printer()).start();}}2.编写测试类:
package cn.pxy.test;import javax.swing.JOptionPane;public class Test1 {public static void main(String[] args) {AlarmClock clock=new AlarmClock(1000,true);clock.start();JOptionPane.showMessageDialog(null, "是否退出?");System.exit(0);}}3.运行结果:
四、温度单位转换工具
将输入的摄氏度转换为华氏度。
package cn.pxy.test;import java.util.Scanner;public class TemperatureConverter {public double toFahrenheit(double centigrade) {double fahrenheit=1.8*centigrade+32;//计算华氏温度return fahrenheit;//返回华氏温度}public static void main(String[] args) {System.out.println("请输入要转换的温度(单位:摄氏度):");Scanner in=new Scanner(System.in);double centigrade=in.nextDouble();TemperatureConverter tc=new TemperatureConverter();double fahrenheit=tc.toFahrenheit(centigrade);System.out.println("转换完的温度(单位:华氏度):"+fahrenheit);}}运行结果:
版权申明
本文系作者 @河马 原创发布在河马博客站点。未经许可,禁止转载。
暂无评论数据