|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
《Core Java2 Volume I: Fundamentals》(原书第5版) 机械工业出版社 以前看过的关于Java的东西都很零碎,感觉有必要重新学习一下Java的一些基础知识,特记。 第1章 Java 简介 1、我们认为Java的种种优势在它应用于新型设备或新应用领域中才能体现,而不是用它来重写那些已存在的应用程序。 ///所谓各领风骚十来年,大致就是这个意思;同时,泛泛地比较语言之间的优劣是没有意义的 2、简朴的说,面向对象的程序设计是把重点放在数据(等于对象)以及对象接口上的一个编程技术。以木匠为例,一个 “面向对象”的木匠首先会关心他要制造的椅子,然后才是制造这椅子的工具;而一个“非面向对象”的木匠会首先考虑他的工具。 ///只有思想提上去,才可以改善做事的方法。可怕的是:往往在使用着面向对象的工具,却使用着面向过程的思想 第2章 Java 编程环境 1、一个简朴而有趣的界面程序,显示.gif 图像 ///ImageViewer.java import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.io.*; import javax.swing.*; public class ImageViewer{ public static void main(String[] args){ JFrame frame = new ImageViewerFrame(); frame.setTitle("ImageViewer"); int w = 320, h =400 ; Dimension ScreenSize = Toolkit.getDefaultToolkit().getScreenSize(); frame.setBounds((int)((ScreenSize.width-w)/2),(int)((ScreenSize.height-h)/2),w,h); frame.setSize(w,h); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.show(); } } class ImageViewerFrame extends JFrame{ public ImageViewerFrame(){ //set menu JMenuBar menuBar =new JMenuBar(); setJMenuBar(menuBar); JMenu menu = new JMenu("File"); menuBar.add(menu); JMenuItem openItem = new JMenuItem("Open"); menu.add(openItem); openItem.addActionListener(new FileOpenListener()); JMenuItem exitItem = new JMenuItem("Exit"); menu.add(exitItem); exitItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent event){System.exit(0);} }); //use a label to display the iamges label = new JLabel(); Container contentPane = getContentPane(); contentPane.add(label,"Center"); } private class FileOpenListener implements ActionListener{ public void actionPerformed(ActionEvent evt){ //set up file chooser JFileChooser chooser = new JFileChooser(); chooser.setCurrentDirectory(new File(".")) ; //accept all files ending with .gif chooser.setFileFilter(new javax.swing.filechooser.FileFilter(){ public boolean accept(File f){ return f.getName().toLowerCase().endsWith(".gif") || f.isDirectory(); } public String getDescription(){ return "GIF Images"; } }); //show file chooser dialog int r = chooser.showOpenDialog(ImageViewerFrame.this); //if image file accepted,set it as icon of the label //只有到此时,才要实现我们的目的:显示图片,前面全是一些预备工作! if(r== JFileChooser.APPROVE_OPTION){ String name = chooser.getSelectedFile().getPath(); label.setIcon(new ImageIcon(name)); } } } private JLabel label; } 第3章 Java 基本编程结构 ///略 第4章 对象和类 1、OOP中的对象有三个主要特性: A)对象的行为 B)对象的状态 C)对象的标识符 ///比较好理解 2、类之间的关系 A)依靠 USES-A B)聚合 HAS-A C)继续 IS-A 3、注重:我们采用的风格是类的方式在前,字段在后,这样做可能会在某种程度上鼓励首先关心类的接口,儿不是关心其 实现。 ///一直比较纳闷为什么字段定义在后,原来如此! 4、静态字段和方式 ///此处的字段是指类内部的属性 A)假如把一个字段定义为 static ,那么,一个类中只有一个这类字段。 ///我的理解:假如用static 定义一个类的字段,那么这个字段属于类,而不是属于对象。所有的对象将操作一个地址。 B)静态变量很少见,静态常量却是很普遍的 如:public class Math{ //... public static final double PI = 3.14159265358979323846; //... } public class System{ //... public static final PrintStream out = ...; } C)静态方式 我们可以把静态方式看作是没有this参数的方式 我们可以在以下两种情况下使用静态方式: (1)当一个方式不需要访问对象状态时; (2)当一个方式只需要访问类中的静态方式时 静态方式还有另一种常见的用途: 如: NumberFormat.getNumberInstance() 这种方式被称作工厂方式 factory method 5、java程序设计语言总是使用传值调用。这意味着方式得到是所有参数值的一个拷贝。尤其是,方式不能修改传递给它的 任何参数变量内容。 ///第一次主要到这点,但是,随后,作者确实这样写的: 一个方式不可能改变基本类型的参数,而对于对象参数来说则不同。我们可以很轻易地――实际上是异常普遍――实现改变一个 对象参数状态的方式。原因很简朴。方式得到对对象引用的一个拷贝,而原对象变量和此拷贝都指向同一个对象。 ///Employee.java public class Employee { String name ; double salary ; public Employee(String name){ this.name = name ; this.salary = 1000.0; } public double getSalary(){ return salary; } public static void triple(Employee emp){ emp.salary *= 3; } public static void main(String[] args) { Employee feng = new Employee("Feng"); Employee yu = new Employee("Yu"); triple(feng); // work correctly! System.out.println("Feng\\\'s salary:"+feng.getSalary()); System.out.println("Yu\\\'s salary:"+yu.getSalary()); } } ///但是,随后作者又说: 有些程序员声称Java程序设计语言对对象使用引用调用。然而这种理解是错误的。通过一个例子来说明: ///注重:例子中的那个 swap() 并没有如预期的那样起作用 public class Employee { String name ; public Employee(String name){ this.name = name ; } public String getName(){ return name; } public static void swap(Employee x,Employee y){ Employee t = x; x = y; y = t; } public static void main(String[] args) { Employee feng = new Employee("Feng"); Employee yu = new Employee("Yu"); swap(feng,yu); //cannot work System.out.println(feng.getName()); System.out.println(yu.getName()); } } ///对于方式参数,作者归纳如下: A)方式不能修改基本类型的参数 B)方式可以改变对象参数的状态 C)方式不能使一个对象参数指向一个新的对象 6、构造函数 当类被第一次加载的时候,进行静态初始化。静态字段被初始化为0,false 或 null ,除非显式的赋值。所有静态 字段初始化语句或初始化块按照在类声明中出现的次序依次被执行。 下面是一个没有使用 main 方式的程序 ///Hello.java public class Hello { static { System.out.println("Hello World!"); System.exit(0); } } 7、文档注释 注释以/** 开头,*/结束,包含标签(@author, @param, @see 等)和自由文本(可包含HTML标记) 类注释:一般放到放到import语句之后,在类定义之前 8、类设计的技巧 1)永远保持数据的私有 ///这需要从实用出发,而不是从实现方法出发 2)永远初始化数据 ///不要依赖默认值 3)不要在一个类中使用太多基本类型 ///比较好理解,用Address 类来代替 Employee 类中的下面字段: private String province ; private String city ; private String street ; private int zip ; 4)不是所有的字段都需要自己的字段访问器和调节器SetP() GetP() 5) 用标准形式对类定义:public ,protected, private ;每一部分: 实例方式,静态方式,实例字段,静态字段 6)把有太多职责的类分解 7)使类和方式的名字反映它们的职责 第5章 继续 1、写了一个继续实例: EMPLOYEE的薪水只是基本工资;MANAGER的薪水为基本工资+奖金 //ManagerT.java class Employee{ public Employee(String name){ this.name = name ; } public double getSalary(){ return basicSalary ; } public void showInfo(){ System.out.println("name:" + name ); System.out.println("salary:" + getSalary() ); } private String name = ""; private double basicSalary = 1000.0; } class Manager extends Employee{ public Manager(String name){ super(name);//使用super可以调用父类 } public void setBonus(double b){ bonus = b ; } public double getSalary(){ setBonus(126.0); return super.getSalary() + bonus ; } private double bonus ; } public class ManagerT { public static void main(String[] args) { Employee emp = new Employee("feng"); emp.showInfo(); Manager man1 = new Manager("wu"); man1.showInfo(); Employee man2 = new Manager("song"); man2.showInfo(); } } 2、 final 一个类:不可继续; final 一个方式:该方式不可被重载 设置为final 有两个原因:A)效率。动态绑定比静态绑定开销要大。B)安全。 3、抽象类,abstract 定义 为了更明确,规定具有一个或多个抽象方式的类本身必须定义为abstract 在JAVA语言中,抽象方式是异常重要的概念,在“接口”里,会大量的碰到。 ///JAVA访问的控制符号小结: private:只对本类可见; public :对一切可见; protected:对本包和子类可见; [缺省]:对本包可见 ///个人感觉最好不要用缺省 TO BE CONTINUED 返回类别: 教程 上一教程: 在JAVA中连接Oracle数据库(例子) 下一教程: 在JAVA中连接Sybase数据库(例子) 您可以阅读与"Java核心编程:卷I??学习小记"相关的教程: · [学习小记]Java的反射机制 · struts-helloapp 学习小记 · JAVA进阶学习:网络服务器编程 · Java 网络编程---I/O部分学习笔记整理1 · Java网络编程的学习笔记(二) |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |