b2c信息网

您现在的位置是:首页 > 热点事件 > 正文

热点事件

java源码手写教程(java手写代码)

hacker2022-06-28 05:11:28热点事件108
本文目录一览:1、马士兵_JAVA视频教程第01章_JAVA简介_源代码2、

本文目录一览:

马士兵_JAVA视频教程第01章_JAVA简介_源代码

现在学习Java的平台有很多,B站或者是腾讯课堂都是可以的,我们在B站分享了很多经典的视频教程,都是开源的,你可以去看看。

怎么用Java制作手写板,如果能提供代码更好

做什么事都要学会GOOGLE。

搜索JAVA记事本。

你新建一个类叫TEST。

import java.awt.Color;

import java.awt.FileDialog;

import java.awt.Font;

import java.awt.Menu;

import java.awt.MenuBar;

import java.awt.MenuItem;

import java.awt.TextArea;

import java.awt.Toolkit;

import java.awt.datatransfer.Clipboard;

import java.awt.datatransfer.DataFlavor;

import java.awt.datatransfer.StringSelection;

import java.awt.datatransfer.Transferable;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;

import javax.swing.JFrame;

public class Test extends JFrame implements ActionListener {

/**

* Method main

*

*

* @param args

*

*/

MenuBar menuBar = new MenuBar();

Menu file = new Menu("File"), edit = new Menu("Edit"), help = new Menu(

"Help");

MenuItem[] menuItem = { new MenuItem("New"), new MenuItem("Open"),

new MenuItem("Save"), new MenuItem("Exit"),

new MenuItem("Select All"), new MenuItem("Copy"),

new MenuItem("Cut"), new MenuItem("Paste"), new MenuItem("Help") };

TextArea textArea = new TextArea();

String fileName = "NoName";

Toolkit toolKit = Toolkit.getDefaultToolkit();

Clipboard clipboard = toolKit.getSystemClipboard();

// opne and close message dialogs

private FileDialog openFileDialog = new FileDialog(this, "Open File",

FileDialog.LOAD);

private FileDialog saveFileDialog = new FileDialog(this, "Save File",

FileDialog.SAVE);

public static void main(String[] args) {

// TODO: Add your code here

Test MyEdit = new Test();

MyEdit.show();

}

/**

* Method MiniEdit

*

*

*/

public Test() {

// TODO: Add your code here

setTitle("MiniEdit");

setFont(new Font("Times New Roman", Font.PLAIN, 15));

setBackground(Color.white);

setSize(500, 500);

setMenuBar(menuBar);

menuBar.add(file);

menuBar.add(edit);

menuBar.add(help);

for (int i = 0; i 4; i++) {

file.add(menuItem[i]);

edit.add(menuItem[i + 4]);

}

help.add(menuItem[8]);

add(textArea);

addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

e.getWindow().dispose();

System.exit(0);

}

});

// add actionListener

for (int i = 0; i menuItem.length; i++) {

menuItem[i].addActionListener(this);

}

}

/**

* Method actionPerformed

*

*

* @param e

*

*/

public void actionPerformed(ActionEvent e) {

// TODO: Add your code here

Object eventSource = e.getSource();

if (eventSource == menuItem[0])// newItem

{

textArea.setText("");

}

else if (eventSource == menuItem[1])// OpenItem

{

openFileDialog.show();

fileName = openFileDialog.getDirectory() + openFileDialog.getFile();

if (fileName != null) {

openFile(fileName);

}

}

else if (eventSource == menuItem[2])// SaveItem

{

saveFileDialog.show();

fileName = saveFileDialog.getDirectory() + saveFileDialog.getFile();

if (fileName != null) {

writeFile(fileName);

}

}

else if (eventSource == menuItem[3])// exitItem

{

System.exit(0);

}

else if (eventSource == menuItem[4])// Select All

{

textArea.selectAll();

} else if (eventSource == menuItem[5])// copy

{

String text = textArea.getSelectedText();

StringSelection selection = new StringSelection(text);

clipboard.setContents(selection, null);

}

else if (eventSource == menuItem[6])// cut

{

String text = textArea.getSelectedText();

StringSelection selection = new StringSelection(text);

clipboard.setContents(selection, null);

textArea.replaceText("", textArea.getSelectionStart(), textArea

.getSelectionEnd());

}

else if (eventSource == menuItem[7])// Paste

{

Transferable contents = clipboard.getContents(this);

if (contents == null)

return;

String text;

text = "";

try {

text = (String) contents

.getTransferData(DataFlavor.stringFlavor);

} catch (Exception ex) {

}

textArea.replaceText(text, textArea.getSelectionStart(), textArea

.getSelectionEnd());

} else if (eventSource == menuItem[8]) {

// JOptionPane.showMessageDialog(null,"This is a MiniEdit.");

}

}

// Read file

public void openFile(String fileName) {

try {

File file = new File(fileName);

FileReader readIn = new FileReader(file);

int size = (int) file.length();

int charsRead = 0;

char[] content = new char[size];

while (readIn.ready())

charsRead += readIn.read(content, charsRead, size - charsRead);

readIn.close();

textArea.setText(new String(content, 0, charsRead));

} catch (Exception e) {

System.out.println("Error opening file!");

}

}

// write file

public void writeFile(String fileName) {

try {

File file = new File(fileName);

FileWriter write = new FileWriter(file);

write.write(textArea.getText());

write.close();

} catch (Exception e) {

System.out.println("Error closing file!");

}

}

}

求高手写个java代码!!!

代码如下:

import java.util.Arrays;

class Circle {

private int radius;

public Circle(int radius) {

this.radius = radius;

}

public int getRadius() {

return radius;

}

public void setRadius(int radius) {

this.radius = radius;

}

@Override

public String toString() {

return "Circle [radius=" + radius + "]";

}

}

public class App {

public static void main(String[] args) throws CloneNotSupportedException {

// 创建一个包含5个元素的数组

Circle[] circles = { new Circle(2), new Circle(10), new Circle(8), new Circle(4), new Circle(12) }; 

System.out.println(Arrays.toString(circles));

// 排序

Arrays.sort(circles, (x, y) - Integer.compare(x.getRadius(), y.getRadius()));

System.out.println(Arrays.toString(circles));

// 查找半径为 9 的圆

int index = Arrays.binarySearch(circles, 9, (x, y) - ((Circle)x).getRadius() - (int)y);

System.out.println(index =0 ? circles[index] : "没有找到半径为 9 的圆。");

// 查找半径为 10 的圆

index = Arrays.binarySearch(circles, 10, (x, y) - ((Circle)x).getRadius() - (int)y);

System.out.println(index =0 ? circles[index] : "没有找到半径为 10 的圆。");

// 拷贝数组

Circle[] circles2 = Arrays.copyOf(circles, circles.length);

System.out.println(Arrays.toString(circles2));

}

}

求编写一个超级简单的Java的程序源代码

import java.awt.FlowLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPasswordField;

import javax.swing.JTextField;

public class Login {

public static void main(String args[]) {

LoginFrm frame = new LoginFrm();

}

}

class LoginFrm extends JFrame implements ActionListener{

JLabel nameLabel=new JLabel("用户名:");

JLabel pwdLabel=new JLabel("密码:");

JTextField name=new JTextField(10);

JPasswordField password=new JPasswordField(10);

JButton butnSure=new JButton("确定");

JButton butnCancel=new JButton("取消");

public LoginFrm() {

super("登陆");

setBounds(500, 200, 280, 220);

setVisible(true);

setLayout(null);

nameLabel.setBounds(45, 20, 100, 25);

add(nameLabel);

add(name);

name.setBounds(105, 20, 110, 25);

add(pwdLabel);

pwdLabel.setBounds(45, 60, 100, 25);

add(password);

password.setBounds(105, 60, 110, 25);

add(butnSure);

butnSure.setBounds(45, 100, 80, 25);

add(butnCancel);

butnCancel.setBounds(135, 100, 80, 25);

butnSure.addActionListener(this);

butnCancel.addActionListener(this);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

validate();//刷新

}

public void actionPerformed(ActionEvent e) {

if (e.getSource() ==butnSure){

System.out.println("用户名:"+name.getText());

System.out.println("密码:"+name.getText());

if("admin".equals(name.getText().trim())"123".equals(password.getText().trim())){

this.dispose();

new MainFrm("用户界面",name.getText().trim(),password.getText().trim());

}else {

JOptionPane.showMessageDialog(this, "用户不存在");

}

}else if(e.getSource()==butnCancel){

System.exit(1);

}

}

class MainFrm extends JFrame{

private JLabel info;

public MainFrm(String s,String name,String password) {

super(s);

setBounds(400, 200, 500, 400);

setLayout(new FlowLayout());

info=new JLabel("登陆成功,用户名:"+name+",密码:"+password);

add(info);

setVisible(true);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

validate();

}

}

}

求JAVA新手教程

Java新手入门的30个基本概念

在我们学习Java的过程中,掌握其中的基本概念对我们的学习无论是J2SE,J2EE,J2ME都是很重要的,J2SE是Java的基础,所以有必要对其中的基本概念做以归纳,以便大家在以后的学习过程中更好的理解java的精髓,在此我总结了30条基本的概念。

Java概述:

目前Java主要应用于中间件的开发(middleware)---处理客户机于服务器之间的通信技术,早期的实践证明,Java不适合pc应用程序的开发,其发展逐渐变成在开发手持设备,互联网信息站,及车载计算机的开发.Java于其他语言所不同的是程序运行时提供了平台的独立性,称许可以在windows,solaris,linux其他操作系统上使用完全相同的代码.Java的语法与C++语法类似,C++/C程序员很容易掌握,而且Java是完全的彻底的面向对象的,其中提出了很好的GC(Garbage Collector)垃圾处理机制,防止内存溢出。

Java的白皮书为我们提出了Java语言的11个关键特性。

(1)Easy:Java的语法比C++的相对简单,另一个方面就是Java能使软件在很小的机器上运行,基础解释其和类库的支持的大小约为40kb,增加基本的标准库和线程支持的内存需要增加125kb。

(2)分布式:Java带有很强大的TCP/IP协议族的例程库,Java应用程序能够通过URL来穿过网络来访问远程对象,由于servlet机制的出现,使Java编程非常的高效,现在许多的大的web server都支持servlet。

(3)OO:面向对象设计是把重点放在对象及对象的接口上的一个编程技术.其面向对象和C++有很多不同,在与多重继承的处理及Java的原类模型。

(4)健壮特性:Java采取了一个安全指针模型,能减小重写内存和数据崩溃的可能型。

(5)安全:Java用来设计网路和分布系统,这带来了新的安全问题,Java可以用来构建防病毒和防攻击的System.事实证明Java在防毒这一方面做的比较好。

(6)中立体系结构:Java编译其生成体系结构中立的目标文件格式可以在很多处理器上执行,编译器产生的指令字节码(Javabytecode)实现此特性,此字节码可以在任何机器上解释执行。

(7)可移植性:Java中对基本数据结构类型的大小和算法都有严格的规定所以可移植性很好。

(8)多线程:Java处理多线程的过程很简单,Java把多线程实现交给底下操作系统或线程程序完成.所以多线程是Java作为服务器端开发语言的流行原因之一。

(9)Applet和servlet:能够在网页上执行的程序叫Applet,需要支持Java的浏览器很多,而applet支持动态的网页,这是很多其他语言所不能做到的。

基本概念:

1.OOP中唯一关系的是对象的接口是什么,就像计算机的销售商她不管电源内部结构是怎样的,他只关系能否给你提供电就行了,也就是只要知道can or not而不是how and why.所有的程序是由一定的属性和行为对象组成的,不同的对象的访问通过函数调用来完成,对象间所有的交流都是通过方法调用,通过对封装对象数据,很大限度上提高复用率。

2.OOP中最重要的思想是类,类是模板是蓝图,从类中构造一个对象,即创建了这个类的一个实例(instance)。

3.封装:就是把数据和行为结合起在一个包中)并对对象使用者隐藏数据的实现过程,一个对象中的数据叫他的实例字段(instance field)。

4.通过扩展一个类来获得一个新类叫继承(inheritance),而所有的类都是由Object根超类扩展而得,根超类下文会做介绍。

5.对象的3个主要特性

behavior---说明这个对象能做什么.

state---当对象施加方法时对象的反映.

identity---与其他相似行为对象的区分标志.

每个对象有唯一的indentity 而这3者之间相互影响.

6.类之间的关系:

use-a :依赖关系

has-a :聚合关系

is-a :继承关系--例:A类继承了B类,此时A类不仅有了B类的方法,还有其自己的方法.(个性存在于共性中)

7.构造对象使用构造器:构造器的提出,构造器是一种特殊的方法,构造对象并对其初始化。

例:Data类的构造器叫Data

new Data()---构造一个新对象,且初始化当前时间.

Data happyday=new Data()---把一个对象赋值给一个变量happyday,从而使该对象能够多次使用,此处要声明的使变量与对象变量二者是不同的.new返回的值是一个引用。

构造器特点:构造器可以有0个,一个或多个参数

构造器和类有相同的名字

一个类可以有多个构造器

构造器没有返回值

构造器总是和new运算符一起使用.

8.重载:当多个方法具有相同的名字而含有不同的参数时,便发生重载.编译器必须挑选出调用哪个方法。

9.包(package)Java允许把一个或多个类收集在一起成为一组,称作包,以便于组织任务,标准Java库分为许多包.java.lang java.util java,net等,包是分层次的所有的java包都在java和javax包层次内。

10.继承思想:允许在已经存在的类的基础上构建新的类,当你继承一个已经存在的类时,那么你就复用了这个类的方法和字段,同时你可以在新类中添加新的方法和字段。

11.扩展类:扩展类充分体现了is-a的继承关系. 形式为:class (子类) extends (基类)。

12.多态:在java中,对象变量是多态的.而java中不支持多重继承。

13.动态绑定:调用对象方法的机制。

(1)编译器检查对象声明的类型和方法名。

(2)编译器检查方法调用的参数类型。

(3)静态绑定:若方法类型为priavte static final 编译器会准确知道该调用哪个方法。

(4)当程序运行并且使用动态绑定来调用一个方法时,那么虚拟机必须调用x所指向的对象的实际类型相匹配的方法版本。

(5)动态绑定:是很重要的特性,它能使程序变得可扩展而不需要重编译已存代码。

14.final类:为防止他人从你的类上派生新类,此类是不可扩展的。

15.动态调用比静态调用花费的时间要长。

16.抽象类:规定一个或多个抽象方法的类本身必须定义为abstract。

例: public abstract string getDescripition

17.Java中的每一个类都是从Object类扩展而来的。

18.object类中的equal和toString方法。

equal用于测试一个对象是否同另一个对象相等。

toString返回一个代表该对象的字符串,几乎每一个类都会重载该方法,以便返回当前状态的正确表示.

(toString 方法是一个很重要的方法)

19.通用编程:任何类类型的所有值都可以同object类性的变量来代替。

20.数组列表:ArrayList动态数组列表,是一个类库,定义在java.uitl包中,可自动调节数组的大小。

21.class类 object类中的getclass方法返回ckass类型的一个实例,程序启动时包含在main方法的类会被加载,虚拟机要加载他需要的所有类,每一个加载的类都要加载它需要的类。

22.class类为编写可动态操纵java代码的程序提供了强大的功能反射,这项功能为JavaBeans特别有用,使用反射Java能支持VB程序员习惯使用的工具。

能够分析类能力的程序叫反射器,Java中提供此功能的包叫Java.lang.reflect反射机制十分强大.

1.在运行时分析类的能力。

2.在运行时探察类的对象。

3.实现通用数组操纵代码。

4.提供方法对象。

而此机制主要针对是工具者而不是应用及程序。

反射机制中的最重要的部分是允许你检查类的结构.用到的API有:

java.lang.reflect.Field 返回字段.

java.reflect.Method 返回方法.

java.lang.reflect.Constructor 返回参数.

方法指针:java没有方法指针,把一个方法的地址传给另一个方法,可以在后面调用它,而接口是更好的解决方案。

23.接口(Interface)说明类该做什么而不指定如何去做,一个类可以实现一个或多个interface。

24.接口不是一个类,而是对符合接口要求的类的一套规范。

若实现一个接口需要2个步骤:

1.声明类需要实现的指定接口。

2.提供接口中的所有方法的定义。

声明一个类实现一个接口需要使用implements 关键字

class actionB implements Comparable 其actionb需要提供CompareTo方法,接口不是类,不能用new实例化一个接口.

25.一个类只有一个超类,但一个类能实现多个接口。Java中的一个重要接口:Cloneable

26.接口和回调.编程一个常用的模式是回调模式,在这种模式中你可以指定当一个特定时间发 生时回调对象上的方法。

例:ActionListener 接口监听.

类似的API有:java.swing.JOptionPane

java.swing.Timer

java.awt.Tookit

27.对象clone:clone方法是object一个保护方法,这意味着你的代码不能简单的调用它。

28.内部类:一个内部类的定义是定义在另一个内部的类。

原因是:

1.一个内部类的对象能够访问创建它的对象的实现,包括私有数据。

2.对于同一个包中的其他类来说,内部类能够隐藏起来。

3.匿名内部类可以很方便的定义回调。

4.使用内部类可以非常方便的编写事件驱动程序。

29.代理类(proxy):

1.指定接口要求所有代码

2.object类定义的所有的方法(toString equals)

30.数据类型:Java是强调类型的语言,每个变量都必须先申明它都类型,java中总共有8个基本类型.4种是整型,2种是浮点型,一种是字符型,被用于Unicode编码中的字符,布尔型。

一、入门

《Java 2从入门到精通》- 推荐

《Thinking in Java》- 强烈推荐*

O’reilly的Java编程基础系列 - 参考*

二、进阶

《Java Cook Book》- 非常推荐* (包含了Java编程的Tips,适合当做手册来查阅)

《O’reilly-Java IO》- 推荐* (包含Java IO编程的各个方面)

《O’reilly-Database Programming with JDBC》- 推荐* (JDBC编程)

《O’reilly-Java Programming with Oracle JDBC》- 参考*

三、Java Web编程

《O’reilly-Java Server Pages》- 强烈推荐*

《O’reilly-Java Servlet Programming》- 非常推荐*

《O’reilly-Jakarta Struts》- 推荐* (Java Web编程的一个MVC实现框架Struts的书)

四、EJB编程

《J2EE应用与BEA Weblogic Server》- 强烈推荐

《Mastering EJB 2.0》- 非常推荐*

《Enterprise Java Bean》- 推荐*

五、Java XML编程

《O’reilly-Java and XML》- 推荐*

《O’reilly-Java and SOAP》- 参考* (Java的SOAP编程)

六、设计模式

《Core J2EE Patterns》- 强烈推荐* (J2EE设计模式,设计企业应用软件必备参考书)

《EJB Design Patterns》- 推荐*

页面功能 【加入收藏】 【推荐给朋友】 【字体:大 中 小】 【关闭】

java编程规范-

作者:佚名 来自:未知

命名规范

定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性)

Package 的命名

Package 的名字应该都是由一个小写单词组成。

Class 的命名

Class 的名字必须由大写字母开头而其他字母都小写的单词组成

Class 变量的命名

变量的名字必须用一个小写字母开头。后面的单词用大写字母开头。

Static Final 变量的命名

Static Final 变量的名字应该都大写,并且指出完整含义。

参数的命名

参数的名字必须和变量的命名规范一致。

数组的命名

数组应该总是用下面的方式来命名:

byte[] buffer;

而不是:

byte buffer[];

方法的参数

使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字:

SetCounter(int size){

this.size = size;

}

Java 文件样式

所有的 Java(*.java) 文件都必须遵守如下的样式规则

版权信息

版权信息必须在 java 文件的开头,比如:

/**

* Copyright ? 2000 Shanghai XXX Co. Ltd.

* All right reserved.

*/

其他不需要出现在 javadoc 的信息也可以包含在这里。

Package/Imports

package 行要在 import 行之前,import 中标准的包名要在本地的包名之前,而且按照字母顺序排列。如果 import 行中包含了同一个包中的不同子目录,则应该用 * 来处理。

package hotlava.net.stats;

import java.io.*;

import java.util.Observable;

import hotlava.util.Application;

这里 java.io.* 使用来代替InputStream and OutputStream 的。

Class

接下来的是类的注释,一般是用来解释类的。

/**

* A class representing a set of packet and byte counters

* It is observable to allow it to be watched, but only

* reports changes when the current set is complete

*/

接下来是类定义,包含了在不同的行的 extends 和 implements

public class CounterSet

extends Observable

implements Cloneable

Class Fields

接下来是类的成员变量:

/**

* Packet counters

*/

protected int[] packets;

public 的成员变量必须生成文档(JavaDoc)。Proceted、private和 package 定义的成员变量如果名字含义明确的话,可以没有注释。

存取方法

接下来是类变量的存取的方法。它只是简单的用来将类的变量赋值获取值的话,可以简单的写在一行上。

/**

* Get the counters

* @return an array containing the statistical data. This array has been

* freshly allocated and can be modified by the caller.

*/

public int[] getPackets() { return copyArray(packets, offset); }

public int[] getBytes() { return copyArray(bytes, offset); }

public int[] getPackets() { return packets; }

public void setPackets(int[] packets) { this.packets = packets; }

其它的方法不要写在一行上

构造函数

接下来是构造函数,它应该用递增的方式写(比如:参数多的写在后面)。

访问类型 ('public', 'private' 等.) 和 任何 'static', 'final' 或 'synchronized' 应该在一行中,并且方法和参数另写一行,这样可以使方法和参数更易读。

public

CounterSet(int size){

this.size = size;

}

克隆方法

如果这个类是可以被克隆的,那么下一步就是 clone 方法:

public

Object clone() {

try {

CounterSet obj = (CounterSet)super.clone();

obj.packets = (int[])packets.clone();

obj.size = size;

return obj;

}catch(CloneNotSupportedException e) {

throw new InternalError('Unexpected CloneNotSUpportedException: ' + e.getMessage());

}

}

类方法

下面开始写类的方法:

/**

* Set the packet counters

* (such as when restoring from a database)

*/

protected final

void setArray(int[] r1, int[] r2, int[] r3, int[] r4)

throws IllegalArgumentException

{

//

// Ensure the arrays are of equal size

//

if (r1.length != r2.length || r1.length != r3.length || r1.length != r4.length)

throw new IllegalArgumentException('Arrays must be of the same size');

System.arraycopy(r1, 0, r3, 0, r1.length);

System.arraycopy(r2, 0, r4, 0, r1.length);

}

toString 方法

无论如何,每一个类都应该定义 toString 方法:

public

String toString() {

String retval = 'CounterSet: ';

for (int I = 0; I data.length(); i++) {

retval += data.bytes.toString();

retval += data.packets.toString();

}

return retval;

}

}

main 方法

如果main(String[]) 方法已经定义了, 那么它应该写在类的底部.

代码编写格式

代码样式

代码应该用 unix 的格式,而不是 windows 的(比如:回车变成回车+换行)

文档化

必须用 javadoc 来为类生成文档。不仅因为它是标准,这也是被各种 java 编译器都认可的方法。使用 @author 标记是不被推荐的,因为代码不应该是被个人拥有的。

缩进

缩进应该是每行2个空格. 不要在源文件中保存Tab字符. 在使用不同的源代码管理工具时Tab字符将因为用户设置的不同而扩展为不同的宽度.

如果你使用 UltrEdit 作为你的 Java 源代码编辑器的话,你可以通过如下操作来禁止保存Tab字符, 方法是通过 UltrEdit中先设定 Tab 使用的长度室2个空格,然后用 Format|Tabs to Spaces 菜单将 Tab 转换为空格。

页宽

页宽应该设置为80字符. 源代码一般不会超过这个宽度, 并导致无法完整显示, 但这一设置也可以灵活调整. 在任何情况下, 超长的语句应该在一个逗号或者一个操作符后折行. 一条语句折行后, 应该比原来的语句再缩进2个字符.

{} 对

{} 中的语句应该单独作为一行. 例如, 下面的第1行是错误的, 第2行是正确的:

if (i0) { I ++ }; // 错误, { 和 } 在同一行

if (i0) {

I ++

}; // 正确, { 单独作为一行

} 语句永远单独作为一行.

如果 } 语句应该缩进到与其相对应的 { 那一行相对齐的位置。

括号

左括号和后一个字符之间不应该出现空格, 同样, 右括号和前一个字符之间也不应该出现空格. 下面的例子说明括号和空格的错误及正确使用:

CallProc( Aparameter ); // 错误

CallProc(Aparameter); // 正确

不要在语句中使用无意义的括号. 括号只应该为达到某种目的而出现在源代码中。下面的例子说明错误和正确的用法:

if ((I) = 42) { // 错误 - 括号毫无意义

if (I == 42) or (J == 42) then // 正确 - 的确需要括号

程序编写规范

exit()

exit 除了在 main 中可以被调用外,其他的地方不应该调用。因为这样做不给任何代码代码机会来截获退出。一个类似后台服务地程序不应该因为某一个库模块决定了要退出就退出。

异常

申明的错误应该抛出一个RuntimeException或者派生的异常。

顶层的main()函数应该截获所有的异常,并且打印(或者记录在日志中)在屏幕上。

垃圾收集

JAVA使用成熟的后台垃圾收集技术来代替引用计数。但是这样会导致一个问题:你必须在使用完对象的实例以后进行清场工作。比如一个prel的程序员可能这么写:

{

FileOutputStream fos = new FileOutputStream(projectFile);

project.save(fos, 'IDE Project File');

}

除非输出流一出作用域就关闭,非引用计数的程序语言,比如JAVA,是不能自动完成变量的清场工作的。必须象下面一样写:

FileOutputStream fos = new FileOutputStream(projectFile);

project.save(fos, 'IDE Project File');

fos.close();

Clone

下面是一种有用的方法:

implements Cloneable

public

Object clone()

{

try {

ThisClass obj = (ThisClass)super.clone();

obj.field1 = (int[])field1.clone();

obj.field2 = field2;

return obj;

} catch(CloneNotSupportedException e) {

throw new InternalError('Unexpected CloneNotSUpportedException: ' + e.getMessage());

}

}

final 类

绝对不要因为性能的原因将类定义为 final 的(除非程序的框架要求)

如果一个类还没有准备好被继承,最好在类文档中注明,而不要将她定义为 final 的。这是因为没有人可以保证会不会由于什么原因需要继承她。

访问类的成员变量

大部分的类成员变量应该定义为 protected 的来防止继承类使用他们。

注意,要用'int[] packets',而不是'int packets[]',后一种永远也不要用。

public void setPackets(int[] packets) { this.packets = packets; }

CounterSet(int size)

{

this.size = size;

}

编程技巧

byte 数组转换到 characters

为了将 byte 数组转换到 characters,你可以这么做:

'Hello world!'.getBytes();

Utility 类

Utility 类(仅仅提供方法的类)应该被申明为抽象的来防止被继承或被初始化。

初始化

下面的代码是一种很好的初始化数组的方法:

objectArguments = new Object[] { arguments };

枚举类型

JAVA 对枚举的支持不好,但是下面的代码是一种很有用的模板:

class Colour {

public static final Colour BLACK = new Colour(0, 0, 0);

public static final Colour RED = new Colour(0xFF, 0, 0);

public static final Colour GREEN = new Colour(0, 0xFF, 0);

public static final Colour BLUE = new Colour(0, 0, 0xFF);

public static final Colour WHITE = new Colour(0xFF, 0xFF, 0xFF);

}

这种技术实现了RED, GREEN, BLUE 等可以象其他语言的枚举类型一样使用的常量。 他们可以用 == 操作符来比较。

但是这样使用有一个缺陷:如果一个用户用这样的方法来创建颜色 BLACK

new Colour(0,0,0)

那么这就是另外一个对象,==操作符就会产生错误。她的 equal() 方法仍然有效。由于这个原因,这个技术的缺陷最好注明在文档中,或者只在自己的包中使用。

Swing

避免使用 AWT 组件

混合使用 AWT 和 Swing 组件

如果要将 AWT 组件和 Swing 组件混合起来使用的话,请小心使用。实际上,尽量不要将他们混合起来使用。

滚动的 AWT 组件

AWT 组件绝对不要用 JscrollPane 类来实现滚动。滚动 AWT 组件的时候一定要用 AWT ScrollPane 组件来实现。

避免在 InternalFrame 组件中使用 AWT 组件

尽量不要这么做,要不然会出现不可预料的后果。

Z-Order 问题

AWT 组件总是显示在 Swing 组件之上。当使用包含 AWT 组件的 POP-UP 菜单的时候要小心,尽量不要这样使用。

调试

调试在软件开发中是一个很重要的部分,存在软件生命周期的各个部分中。调试能够用配置开、关是最基本的。

很常用的一种调试方法就是用一个 PrintStream 类成员,在没有定义调试流的时候就为 null,类要定义一个 debug 方法来设置调试用的流。

性能

在写代码的时候,从头至尾都应该考虑性能问题。这不是说时间都应该浪费在优化代码上,而是我们时刻应该提醒自己要注意代码的效率。比如:如果没有时间来实现一个高效的算法,那么我们应该在文档中记录下来,以便在以后有空的时候再来实现她。

不是所有的人都同意在写代码的时候应该优化性能这个观点的,他们认为性能优化的问题应该在项目的后期再去考虑,也就是在程序的轮廓已经实现了以后。

不必要的对象构造

不要在循环中构造和释放对象

java初学者,如何学习java?

学习Java之前,先别急,静下心来好好想想:自己对学习Java是否有兴趣?自己是否能静下心来坚持不懈地学习?这是个容易但又绝对不应该忽略的问题,必须确信自己对Java感兴趣、而且又有吃苦的准备,那才可能学好Java。

首先找一个Java的基础教程去学习,不管是视频还是书籍都可以。学习Java基础的时候,最重要的就是代码量。一定要多敲,不要眼高手低。往往敲代码的时候才可以发现问题。应该尽量多动手,很多时候,想当然的事情,等写出来运行一下,就会发现不是这么回事儿,Java学习贵在坚持,如果你的耐力和野心不相匹配,那么你最多也就是一个笑话。学完基础教程的内容以后,应该对Java有一个基本的了解了,可以用Java语言写出一些简单的程序,并且用的是最简单的编辑器,比如记事本。这时你往往会比较迷茫,因为你写的东西似乎看起来毫无用处,比如实现一个简单的计算器,读取一个文件等。不要急于进入下一部分,留下几天好好写一些程序,尽可能熟悉这些基础内容。

如果基础内容都掌握熟练了你就应该去学着写一些让你觉得有意思的东西了,所以你应该学习更多的知识。去找一些深入学习的书籍与视频,一步一步去练习,相信经过长期的实践与学习你一定可以学好Java。

其实自始至终,实践是学习Java技术历程中极其重要的一环。脱离了实践,是学不好技术的!

发表评论

评论列表

  • 余安浊厌(2022-06-28 14:56:20)回复取消回复

    B站或者是腾讯课堂都是可以的,我们在B站分享了很多经典的视频教程,都是开源的,你可以去看看。怎么用Java制作手写板,如果能提供代码更好做什么事都要学会GOOGLE。搜索JAVA记事本。你新建一个

  • 莣萳绾痞(2022-06-28 15:10:28)回复取消回复

    rd = toolKit.getSystemClipboard(); // opne and close message dialogs private FileDialog openFileDia

  • 泪灼酒颂(2022-06-28 12:59:45)回复取消回复

    tStream 类成员,在没有定义调试流的时候就为 null,类要定义一个 debug 方法来设置调试用的流。 性能 在写代码的时候,从头至尾都应该考虑性能问题。这不是说时间都应该浪费在优化代码上,而是我们时刻应该提醒自己要注意