重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1用debug模式启动服务
创新互联建站公司2013年成立,先为江口等服务建站,江口等地企业,进行企业商务咨询服务。为江口企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
2.在需要调试的代码处打上断点
3.发请求
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.util.Random;
import javax.swing.JFrame;
class RainCanvas extends Canvas implements Runnable{
private int width, height;
private Image offScreen; // 缓冲图片
private char[][] charset; // 随机字符集合
private int[] pos; // 列的起始位置
private Color[] colors = new Color[25]; // 列的渐变颜色
public RainCanvas(int width, int height) {
this.width = width;
this.height = height;
// 生成ASCII可见字符集合
//创建一个新的随机器
Random rand = new Random();
//width/10为字符雨屏幕的宽度 height/10为字符雨屏幕的长度
//随机字符数组
charset = new char[width / 10][height / 10];
for (int i = 0; i charset.length; i++) {
for (int j = 0; j charset[i].length; j++) {
//nextInt(int n) 返回一个伪随机数,它是从此随机数生成器的序列中取出的、在 0(包括)和指定值(不包括)之间均匀分布的 int值。
//48--144代表键盘上的字母 符号 数字
//为charset数组的每个元素取值
charset[i][j] = (char) (rand.nextInt(96) + 48); }
}
// 随机化列起始位置
pos = new int[charset.length];
for (int i = 0; i pos.length; i++) {
pos[i] = rand.nextInt(pos.length);
}
// 生成从黑色到绿色的渐变颜色,最后一个保持为白色
for (int i = 0; i colors.length - 1; i++) {
//颜色渐变
colors[i] = new Color(0, 255 / colors.length * (i + 1), 0); }
//设置最底下一个的字符的颜色 0 0 255 蓝色 255 0 0 红色 255 255 255 白色 0 255 0 绿色
colors[colors.length - 1] = new Color(0, 0, 255);
setBackground(Color.black);
setSize(width, height);
setVisible(true);
}
public void startRain() {
new Thread(this).start();
}
public void drawRain() {
if (offScreen == null) {
return;
}
// Random rand = new Random();
//getGraphice()创建供绘制闭屏图像使用的图形上下文
Graphics g = offScreen.getGraphics();
//通过使用当前绘图表面的背景色进行填充来清除指定的矩形。
g.clearRect(0, 0, width, height);
//将此图形上下文的字体设置为指定字体。使用此图形上下文的所有后续文本操作均使用此字体。
g.setFont(new Font("Arial", Font.PLAIN, 14));
//
for (int i = 0; i charset.length; i++) {
//int speed = rand.nextInt(3);
for (int j = 0; j colors.length; j++) {
//去掉j只显示蓝色的一个字符 去掉charset[i].length显示黑屏
int index = (pos[i] + j) % charset[i].length;
// 将此图形上下文的当前颜色设置为指定颜色。
g.setColor(colors[j]);
//使用此图形上下文的当前字体和颜色绘制由指定字符数组给定的文本
g.drawChars(charset[i], index, 1, i * 10, index * 10);
}
pos[i] = (pos[i]+2 ) % charset[i].length;
}
}
@Override
public void update(Graphics g) {
paint(g);
}
public void run() {
while (true) {
drawRain();
repaint();
try {
Thread.sleep(50); // 可改变睡眠时间以调节速度
}
catch (InterruptedException e) {
System.out.println(e);
}
}
}
@Override
public void paint(Graphics g) {
// 当组件显示时检测是否要创建缓冲图片,在组件还不可见时调用createImage将返回null
if (offScreen == null) {
offScreen = createImage(width, height);
}
g.drawImage(offScreen, 0, 0, this);
}
}
public class ZFYTest extends JFrame{
private RainCanvas canvas = new RainCanvas(1366, 768);
public ZFYTest() {
super("ZFY");
setUndecorated(true);
setExtendedState(JFrame.MAXIMIZED_BOTH);
setVisible(true);
canvas = new RainCanvas(this.getWidth(), this.getHeight()); //canvas = new RainCanvas(800,600);
getContentPane().add(canvas);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
ZFYTest test = new ZFYTest();
test.canvas.startRain();
}
}
Connection conn;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:taian", "hr", "hr"); //连接Oracle
conn.setAutoCommit(false);
Statement myStat = conn.createStatement();
String sqlTxt = "update BankAccount set account=account-" + this.amount.getText() + " where accId=" + this.payOut.getText();
System.out.println("第一步 执行:" + sqlTxt);
//
try {
int affectedRow = myStat.executeUpdate(sqlTxt);
System.out.println("从汇出方扣减" + this.amount.getText() + "元,修改了" + affectedRow + "行数据.");
sqlTxt = "update BankAccount set account=account+" + this.amount.getText() + " where accId=" + this.saveIn.getText();
System.out.println("第二步 执行:" + sqlTxt);
affectedRow = myStat.executeUpdate(sqlTxt);
System.out.println("从汇入方增加" + this.amount.getText() + "元,修改了" + affectedRow + "行数据.");
// 事务成功结束, 提交
conn.commit();
} catch (SQLException sqlEx) {
System.out.println
sqlEx.printStackTrace();
// 事务中断,整体回滚到事务开始前状态
conn.rollback();
}
myStat.close();
conn.close();
} catch (Exception ex) {
System.out.println("反正是出错了.");
}
}//
代码重构(英语:Code refactoring)重构就是在不改变软件系统外部行为的前提下,改善它的内部结构。
软件重构需要借助工具完成,重构工具能够修改代码同时修改所有引用该代码的地方。在极限编程的方法学中,重构需要单元测试来支持。
java重构:指程序员对已有程序在尽量不改变接口的前提下,进行重新编写代码的工作,一般有以下几方面:
1、去除已知bug。
2、提高程序运行效率。
3、增加新的功能。
重构举例:(简化代码、提升效率)
重构前:
if(list != null list.size() 0){
for(int i = 0; i list.size(); i++){
//skip...
}
}
重构后
if(list != null){
for(int i = 0, len = list.size(); i len; i++){
//skip...
}
}
何时着手重构(Refactoring)
新官上任三把火,开始一个全新??、脚不停蹄、加班加点,一支声势浩大的千军万"码"夹裹着程序员激情和扣击键盘的鸣金奋力前行,势如破竹,攻城掠地,直指"黄龙府"。
开发经理是这支浩浩汤汤代码队伍的统帅,他负责这支队伍的命运,当齐桓公站在山顶上看到管仲训练的队伍整齐划一地前进时,他感叹说"我有这样一支军队哪里还怕没有胜利呢?"。但很遗憾,你手中的这支队伍原本只是散兵游勇,在前进中招兵买马,不断壮大,所以队伍变形在所难免。当开发经理发觉队伍变形时,也许就是克制住攻克前方山头的诱惑,停下脚步整顿队伍的时候了。
Kent Beck提出了"代码坏味道"的说法,和我们所提出的"队伍变形"是同样的意思,队伍变形的信号是什么呢?以下列述的代码症状就是"队伍变形"的强烈信号:
·代码中存在重复的代码
中国有118 家整车生产企业,数量几乎等于美、日、欧所有汽车厂家数之和,但是全国的年产量却不及一个外国大汽车公司的产量。重复建设只会导致效率的低效和资源的浪费。
程序代码更是不能搞重复建设,如果同一个类中有相同的代码块,请把它提炼成类的一个独立方法,如果不同类中具有相同的代码,请把它提炼成一个新类,永远不要重复代码。
·过大的类和过长的方法
过大的类往往是类抽象不合理的结果,类抽象不合理将降低了代码的复用率。方法是类王国中的诸侯国,诸侯国太大势必动摇中央集权。过长的方法由于包含的逻辑过于复杂,错误机率将直线上升,而可读性则直线下降,类的健壮性很容易被打破。当看到一个过长的方法时,需要想办法将其划分为多个小方法,以便于分而治之。
·牵一毛而需要动全身的修改
当你发现修改一个小功能,或增加一个小功能时,就引发一次代码地震,也许是你的设计抽象度不够理想,功能代码太过分散所引起的。
·类之间需要过多的通讯
A类需要调用B类的过多方法访问B的内部数据,在关系上这两个类显得有点狎昵,可能这两个类本应该在一起,而不应该分家。
·过度耦合的信息链
"计算机是这样一门科学,它相信可以通过添加一个中间层解决任何问题",所以往往中间层会被过多地追加到程序中。如果你在代码中看到需要获取一个信息,需要一个类的方法调用另一个类的方法,层层挂接,就象输油管一样节节相连。这往往是因为衔接层太多造成的,需要查看就否有可移除的中间层,或是否可以提供更直接的调用方法。
·各立山头干革命
如果你发现有两个类或两个方法虽然命名不同但却拥有相似或相同的功能,你会发现往往是因为开发团队协调不够造成的。笔者曾经写了一个颇好用的字符串处理类,但因为没有及时通告团队其他人员,后来发现项目中居然有三个字符串处理类。革命资源是珍贵的,我们不应各立山头干革命。
·不完美的设计
在笔者刚完成的一个比对报警项目中,曾安排阿朱开发报警模块,即通过Socket向指定的短信平台、语音平台及客户端报警器插件发送报警报文信息,阿朱出色地完成了这项任务。后来用户又提出了实时比对的需求,即要求第三方系统以报文形式向比对报警系统发送请求,比对报警系统接收并响应这个请求。这又需要用到Socket报文通讯,由于原来的设计没有将报文通讯模块独立出来,所以无法复用阿朱开发的代码。后来我及时调整了这个设计,新增了一个报文收发模块,使系统所有的对外通讯都复用这个模块,系统的整体设计也显得更加合理。
每个系统都或多或少存在不完美的设计,刚开始可能注意不到,到后来才会慢慢凸显出来,此时唯有勇于更改才是最好的出路。
·缺少必要的注释
虽然许多软件工程的书籍常提醒程序员需要防止过多注释,但这个担心好象并没有什么必要。往往程序员更感兴趣的是功能实现而非代码注释,因为前者更能带来成就感,所以代码注释往往不是过多而是过少,过于简单。人的记忆曲线下降的坡度是陡得吓人的,当过了一段时间后再回头补注释时,很容易发生"提笔忘字,愈言且止"的情形。
曾在网上看到过微软的代码注释,其详尽程度让人叹为观止,也从中体悟到了微软成功的一个经验。
代码太乱,这种生声明的Button不好更改属性,最好自己使用JButton button_1=new JButton()声明一个对象,使用button_1对象来调用各种设置属性的方法
如果还想设置好看,还需要给该frame设置一中合适的布局(Layout)