随笔 - 24  文章 - 0  trackbacks - 0
<2010年12月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用链接

留言簿

随笔分类

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

public class Test {

 /**
  * @param args
  * @throws java.text.ParseException
  */

 public static void main(String[] args) throws java.text.ParseException {
  // Date dateNow = new Date();
  //
  // String dateNowStr = dateFormat.format(dateNow);
  // System.out.println(dateNowStr);

  final String dayNames[] = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五",
    "星期六" };
  SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");

  Calendar calendar = Calendar.getInstance();
  Date date = new Date();
  String datarq = dateFormat.format(date); //日期
  
  calendar.setTime(date);
  int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
  if (dayOfWeek < 0)
   dayOfWeek = 0;

  System.out.println(datarq + "  " + dayNames[dayOfWeek]);

 }

}

posted @ 2011-12-22 15:07 冯占科 阅读(135) | 评论 (0)编辑 收藏

开始–运行–cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的PID 之后在任务管理器中找到这个PID所对应的程序如果任务管理器中没有PID这一项,可以在任务管理器中选”查看”-”选择列”

经常,我们在启动应用的时候发现系统需要的端口被别的程序占用,如何知道谁占有了我们需要的端口,很多人都比较头疼,下面就介绍一种非常简单的方法,希望对大家有用。

我们需要确定谁占用了我们的80端口

在windows命令行窗口下执行:
C:\>netstat -aon|findstr “80″
 TCP    0.0.0.0:19780             0.0.0.0:0                    LISTENING         2044
 TCP    10.72.224.5:2558       96.17.109.8:80          ESTABLISHED     2044
 TCP    10.72.224.5:2757       60.210.176.209:80    TIME_WAIT         0
 TCP    10.72.224.5:3956       125.46.1.234:80        ESTABLISHED     2044
 TCP    10.72.224.5:3959       125.46.1.234:80        ESTABLISHED     2044
 UDP    0.0.0.0:2280               *:*                                                       3700

看到了吗,端口被进程号为2044的进程占用,继续执行下面命令:
C:\>tasklist|findstr “2044″
avp.exe                     2044 Console                 0     37,680 K
很清楚吧,avp 卡巴监听80端口,调整卡巴网络监听设置。
当然,如果你的80端口被其他程序占用,kill掉或者调整端口。


posted @ 2011-01-17 16:20 冯占科 阅读(472) | 评论 (0)编辑 收藏

package l6;
/**
 * 实现栈的数据结构
 */
import java.util.LinkedList;

public class MyStack {
 LinkedList mylist = new LinkedList();

 public void push(Object o) {
  mylist.addFirst(o);
 }

 public Object pop() {
  return mylist.removeFirst();
 }

 public Object peek() {
  return mylist.getFirst();
 }

 public boolean empty() {
  return mylist.isEmpty();
 }
 
 
 public static void main(String[] args) {
  MyStack  ms = new MyStack();
  ms.push("1");
  ms.push("2");
  ms.push("3");
  ms.push("4");
  
  System.out.println(ms.pop());
  System.out.println(ms.pop());
  System.out.println(ms.peek());
  System.out.println(ms.empty());
 }
}




package l6;

import java.util.LinkedList;

/**
 * 实现队列的数据结构
 *
 */
public class MyQueue {

 private LinkedList ll = new LinkedList();

 public void put(Object o) {
  ll.addLast(o);
 }

 public Object get() {
  return ll.removeFirst();
 }

 public Object peek() {
  return ll.getFirst();
 }

 public boolean empty() {
  return ll.isEmpty();
 }

 /**
  * @param args
  */
 public static void main(String[] args) {

  MyQueue mq = new MyQueue();
  mq.put("1");
  mq.put("2");
  mq.put("3");
  mq.put("4");
  mq.put("5");
  mq.put("6");

  System.out.println(mq.get());
  System.out.println(mq.get());
  System.out.println(mq.get());
  System.out.println(mq.get());
  System.out.println(mq.peek());
  System.out.println(mq.empty());
 }

}

posted @ 2011-01-13 22:48 冯占科 阅读(237) | 评论 (0)编辑 收藏

//学生类
package l6;

import java.util.Comparator;

public class Student implements Comparable {

 public int num;
 public String name;
 

 public Student(int num, String name) {
  this.num = num;
  this.name = name;
 }

 public int compareTo(Object o) {
  Student s = (Student) o;
  if (num > s.num) {
   return 1;
  } else if (num == s.num) {
   return 0;
  } else {
   return -1;
  }
 }

 public String toString() {
  return "num:" + num + " name:" + name;
 }

 public int compare(Object o1, Object o2) {
  // TODO Auto-generated method stub
  return 0;
 }
}

//学生比较器

package l6;

import java.util.Comparator;

public  class StudentComparator implements Comparator {

 public int compare(Object o1, Object o2) {
  Student s1 = (Student) o1;
  Student s2 = (Student) o2;
  if (s1.num > s2.num) {
   return 1;
  } else if (s1.num < s2.num) {
   return -1;
  } else {
   return s1.name.compareTo(s2.name);
  }
 }
}


//测试类
package l6;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;

public class ArrayListTest {

 /**
  * @param args
  */

 public static void main(String[] args) {

  ArrayList<Student> slist = new ArrayList<Student>();
  Student s1 = new Student(1, "z1");
  slist.add(s1);
  Student s3 = new Student(2, "z3");
  slist.add(s3);
  Student s2 = new Student(2, "z2");
  slist.add(s2);
  Student s5 = new Student(2, "z5");
  slist.add(s5);
  Student s4 = new Student(4, "z4");
  slist.add(s4);

   // Collections.sort(slist); //未使用比较器
    Collections.sort(slist, new StudentComparator());//未使用比较器
  PaintE(slist);

 }

 public static void PaintE(Collection c) {
  Iterator it = c.iterator();
  while(it.hasNext()){
   System.out.println(it.next().toString());
  }
  

 }

}


 

 

posted @ 2011-01-12 23:01 冯占科 阅读(206) | 评论 (0)编辑 收藏


//All the divs on the page:
$$('div');

//All the divs and paragraphs
//note: this returns an array with all the divs first,then all the paragraphs:
$$('div', 'p');

//All the divs with the css class 'myClass':
$$('div.myClass')

/All the paragraphs that are inside divs:
$$('div p');

//All the bold tags in paragraphs with Class 'foo' in divs with class 'myClass':
$$('div.myClass p.foo b');

posted @ 2011-01-11 22:50 冯占科 阅读(202) | 评论 (0)编辑 收藏


<1>hasClass 应用
Examples:
HTML
<div id="myElement" class="testClass"></div>
JavaScript
$('myElement').hasClass('testClass'); // returns true

<2>addClass 应用

Examples:
HTML
<div id="myElement" class="testClass"></div>
JavaScript
$('myElement').addClass('newClass');

<3>removeClass 应用
Examples:
HTML
<div id="myElement" class="testClass newClass"></div>
JavaScript
$('myElement').removeClass('newClass');
Resulting HTML
<div id="myElement" class="testClass"></div>

<4>toggleClass 应用
Adds or removes the passed in class name to the Element, depending on whether or not it's already present.
Examples:
HTML
<div id="myElement" class="myClass"></div>
JavaScript
$('myElement').toggleClass('myClass');
Resulting HTML
<div id="myElement" class=""></div>

JavaScript
$('myElement').toggleClass('myClass');
Resulting HTML
<div id="myElement" class="myClass"></div>

 

posted @ 2011-01-11 22:21 冯占科 阅读(1282) | 评论 (0)编辑 收藏
        打印集合类的对象,将调用所有元素的toString()方法,如果是自己写的类,则要实现toString()方法;
posted @ 2011-01-05 22:40 冯占科 阅读(129) | 评论 (0)编辑 收藏
 

Java关键字finalstatic使用总结

Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。

final类不能被继承,没有子类,final类中的方法默认是final的。

final方法不能被子类的方法覆盖,但可以被继承。

final成员变量表示常量,只能被赋值一次,赋值后值不再改变。

final不能用于修饰构造方法。

注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。

1final

 final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类。

2final方法

如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。

使用final方法的原因有二:

第一、把方法锁定,防止任何继承类修改它的意义和实现。

第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。

3final变量(常量)

 用final修饰的成员变量表示常量,值一旦给定就无法改变!

 final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。

4final参数

当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值。

二、static

 static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。

 static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。

 public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象市,不生成static变量的副本,而是类的所有实例共享同一个static变量。

 static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用--废话),但是不能在其他类中通过类名来直接引用,这一点很重要。实际上你需要搞明白,private是访问权限限定,static表示不要实例化就可以使用,这样就容易理解多了。static前面加上其它访问权限关键字的效果也以此类推。

 static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,可以直接通过类名来访问,访问语法为:

类名.静态方法名(参数列表...)

类名.静态变量名

 用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块(用处非常大,呵呵)。

1static变量

 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是:

 对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。

 对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。

2、静态方法

 静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用thissuper关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为实例成员与特定的对象关联!这个需要去理解,想明白其中的道理,不是记忆!!!

 因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract

3static代码块

 static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。

 利用静态代码块可以对一些static变量进行赋值,最后再看一眼这些例子,都一个staticmain方法,这样JVM在运行main方法的时候可以直接调用而不用创建实例。

4staticfinal一块用表示什么

static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!

对于变量,表示一旦给值就不可修改,并且通过类名可以访问。

对于方法,表示不可覆盖,并且可以通过类名直接访问。

posted @ 2011-01-05 21:51 冯占科 阅读(203) | 评论 (0)编辑 收藏

  

为了获取对象的一份拷贝,我们可以利用Object类的clone()方法。
在派生类中覆盖基类的clone()方法,并声明为public。
在派生类的clone()方法中,调用super.clone()。
在派生类中实现Cloneable接口。

为什么我们在派生类中覆盖Object的clone()方法时,一定要调用super.clone()呢?在运行时刻,Object中的clone()识别出你要复制的是哪一个对象,然后为此对象分配空间,并进行对象的复制,将原始对象的内容一一复制到新对象的存储空间中。


  Student s1 = new Student("gaoer", 14);
  System.out.println("s1name=" + s1.getName());
  
  Student s2 = s1; // 未使用clone,他俩使用一个地址,
  s2.setAge(12);
  s2.setName("zhangsan");
  System.out.println("s1name=" + s1.getName());

  Student s3 = (Student) s1.clone();
  s3.setAge(12);
  s3.setName("lisi");
  System.out.println("s1name=" + s1.getName());


package l4;
/**
 *
 * @author Administrator
 * 当没有引用类型的变量时,为浅层次的拷贝
 *
 */
public class Student implements Cloneable {
 private String name;
 private int age;

 public Student(String name, int age) {

  this.name = name;
  this.age = age;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public int getAge() {
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }

 protected Object clone() throws CloneNotSupportedException {

  Object o = null;
  o = super.clone();
  return o;
 }

}







package l4;
/**
 *
 * @author Administrator
 * 当没有引用类型的变量时,为浅层次的克隆
 * 当有引用类型的变量时,为深层次的克隆
 */
public class Student implements Cloneable {
 private String name;
 private int age;
 Point pt;

 public Student(String name, int age) {

  this.name = name;
  this.age = age;
 }
 public Student(String name, int age,Point pt) {

  this.name = name;
  this.age = age;
  this.pt = pt;
 }


 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public int getAge() {
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }

 protected Object clone() throws CloneNotSupportedException {

  Student o = null;
  o = (Student)super.clone();
  o.pt = (Point)pt.clone();
  return o;
 }

}




package l4;

public class Point implements Cloneable {
 public int x;
 public int y;

 @Override
 public String toString() {
  return "x=" + x + "y=" + y;
 }

 protected Object clone() throws CloneNotSupportedException {
  Object o = null;
  o = super.clone();
  return o;
 }
}


posted @ 2011-01-04 22:16 冯占科 阅读(156) | 评论 (0)编辑 收藏
java 函数参数传递都是传值
对于基本数据类型,传递的是数据的拷贝;
对于引用类型,传递的是引用的拷贝; 

  int x = 3;
  int y = 4;
  change(x, y);
  System.out.println("x=" + x + "y=" + y);
  //不可交换

  int[] num1 = new int[]{3,4};
  change(num1);
  System.out.println("num x=" + num1[0] + "num y=" + num1[1]);
  //可交换

  Point pt = new Point();
  pt.x = 3;
  pt.y = 4;
  change(pt);
  System.out.println("pt.x=" + pt.x + "pt.y=" + pt.y);
//可交换

public static void change(int x, int y) {
  x = x + y;
  y = x - y;
  x = x - y;
 }

 public static void change(int[] num) {
  num[0] = num[0] + num[1];
  num[1] = num[0] - num[1];
  num[0] = num[0] - num[1];
 }

 public static void change(Point pt) {
  pt.x = pt.x + pt.y;
  pt.y = pt.x - pt.y;
  pt.x = pt.x - pt.y;
 }


posted @ 2011-01-04 21:14 冯占科 阅读(169) | 评论 (0)编辑 收藏

Eclipse快捷键大全
Ctrl+1 快速修复(最经典的快捷键,就不用多说了)
Ctrl+D: 删除当前行
Ctrl+Alt+↓ 复制当前行到下一行(复制增加)
Ctrl+Alt+↑ 复制当前行到上一行(复制增加)
Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)
Alt+↑ 当前行和上面一行交互位置(同上)
Alt+← 前一个编辑的页面
Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)
Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性
Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)
Shift+Ctrl+Enter 在当前行插入空行(原理同上条)
Ctrl+Q 定位到最后编辑的地方
Ctrl+L 定位在某行 (对于程序超过100的人就有福音了)
Ctrl+M 最大化当前的Edit或View (再按则反之)
Ctrl+/ 注释当前行,再按则取消注释
Ctrl+O 快速显示 OutLine
Ctrl+T 快速显示当前类的继承结构
Ctrl+W 关闭当前Editer
Ctrl+K 参照选中的Word快速定位到下一个
Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)
Ctrl+/(小键盘) 折叠当前类中的所有代码
Ctrl+×(小键盘) 展开当前类中的所有代码
Ctrl+Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替)
Ctrl+Shift+E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)
Ctrl+J 正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)
Ctrl+Shift+J 反向增量查找(和上条相同,只不过是从后往前查)
Ctrl+Shift+F4 关闭所有打开的Editer
Ctrl+Shift+X 把当前选中的文本全部变味小写
Ctrl+Shift+Y 把当前选中的文本全部变为小写
Ctrl+Shift+F 格式化当前代码
Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)

下面的快捷键是重构里面常用的,本人就自己喜欢且常用的整理一下(注:一般重构的快捷键都是Alt+Shift开头的了)
Alt+Shift+R 重命名 (是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力)
Alt+Shift+M 抽取方法 (这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)
Alt+Shift+C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)
Alt+Shift+L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)
Alt+Shift+F 把Class中的local变量变为field变量 (比较实用的功能)
Alt+Shift+I 合并变量(可能这样说有点不妥Inline)
Alt+Shift+V 移动函数和变量(不怎么常用)
Alt+Shift+Z 重构的后悔药(Undo)

编辑
作用域 功能 快捷键
全局 查找并替换 Ctrl+F
文本编辑器 查找上一个 Ctrl+Shift+K
文本编辑器 查找下一个 Ctrl+K
全局 撤销 Ctrl+Z
全局 复制 Ctrl+C
全局 恢复上一个选择 Alt+Shift+↓
全局 剪切 Ctrl+X
全局 快速修正 Ctrl1+1
全局 内容辅助 Alt+/
全局 全部选中 Ctrl+A
全局 删除 Delete
全局 上下文信息 Alt+?
Alt+Shift+?
Ctrl+Shift+Space
Java编辑器 显示工具提示描述 F2
Java编辑器 选择封装元素 Alt+Shift+↑
Java编辑器 选择上一个元素 Alt+Shift+←
Java编辑器 选择下一个元素 Alt+Shift+→
文本编辑器 增量查找 Ctrl+J
文本编辑器 增量逆向查找 Ctrl+Shift+J
全局 粘贴 Ctrl+V
全局 重做 Ctrl+Y

 
查看
作用域 功能 快捷键
全局 放大 Ctrl+=
全局 缩小 Ctrl+-

 
窗口
作用域 功能 快捷键
全局 激活编辑器 F12
全局 切换编辑器 Ctrl+Shift+W
全局 上一个编辑器 Ctrl+Shift+F6
全局 上一个视图 Ctrl+Shift+F7
全局 上一个透视图 Ctrl+Shift+F8
全局 下一个编辑器 Ctrl+F6
全局 下一个视图 Ctrl+F7
全局 下一个透视图 Ctrl+F8
文本编辑器 显示标尺上下文菜单 Ctrl+W
全局 显示视图菜单 Ctrl+F10
全局 显示系统菜单 Alt+-

 
导航
作用域 功能 快捷键
Java编辑器 打开结构 Ctrl+F3
全局 打开类型 Ctrl+Shift+T
全局 打开类型层次结构 F4
全局 打开声明 F3
全局 打开外部javadoc Shift+F2
全局 打开资源 Ctrl+Shift+R
全局 后退历史记录 Alt+←
全局 前进历史记录 Alt+→
全局 上一个 Ctrl+,
全局 下一个 Ctrl+.
Java编辑器 显示大纲 Ctrl+O
全局 在层次结构中打开类型 Ctrl+Shift+H
全局 转至匹配的括号 Ctrl+Shift+P
全局 转至上一个编辑位置 Ctrl+Q
Java编辑器 转至上一个成员 Ctrl+Shift+↑
Java编辑器 转至下一个成员 Ctrl+Shift+↓
文本编辑器 转至行 Ctrl+L

 
搜索
作用域 功能 快捷键
全局 出现在文件中 Ctrl+Shift+U
全局 打开搜索对话框 Ctrl+H
全局 工作区中的声明 Ctrl+G
全局 工作区中的引用 Ctrl+Shift+G

 
文本编辑
作用域 功能 快捷键
文本编辑器 改写切换 Insert
文本编辑器 上滚行 Ctrl+↑
文本编辑器 下滚行 Ctrl+↓

 
文件
作用域 功能 快捷键
全局 保存 Ctrl+X
Ctrl+S
全局 打印 Ctrl+P
全局 关闭 Ctrl+F4
全局 全部保存 Ctrl+Shift+S
全局 全部关闭 Ctrl+Shift+F4
全局 属性 Alt+Enter
全局 新建 Ctrl+N

 
项目
作用域 功能 快捷键
全局 全部构建 Ctrl+B

 
源代码
作用域 功能 快捷键
Java编辑器 格式化 Ctrl+Shift+F
Java编辑器 取消注释 Ctrl+\
Java编辑器 注释 Ctrl+/
Java编辑器 添加导入 Ctrl+Shift+M
Java编辑器 组织导入 Ctrl+Shift+O
Java编辑器 使用try/catch块来包围 未设置,太常用了,所以在这里列出,建议自己设置。
也可以使用Ctrl+1自动修正。

 
运行
作用域 功能 快捷键
全局 单步返回 F7
全局 单步跳过 F6
全局 单步跳入 F5
全局 单步跳入选择 Ctrl+F5
全局 调试上次启动 F11
全局 继续 F8
全局 使用过滤器单步执行 Shift+F5
全局 添加/去除断点 Ctrl+Shift+B
全局 显示 Ctrl+D
全局 运行上次启动 Ctrl+F11
全局 运行至行 Ctrl+R
全局 执行 Ctrl+U

 
重构
作用域 功能 快捷键
全局 撤销重构 Alt+Shift+Z
全局 抽取方法 Alt+Shift+M
全局 抽取局部变量 Alt+Shift+L
全局 内联 Alt+Shift+I
全局 移动 Alt+Shift+V
全局 重命名 Alt+Shift+R
全局 重做 Alt+Shift+Y

posted @ 2011-01-03 19:56 冯占科 阅读(73) | 评论 (0)编辑 收藏

<数据类型>[] 变量名 = new <数据类型>[数组长度]
int[] a = new int[5]
int a[1]=1;
int a[2]=2;
int a[3]=3;
int a[4]=4;
int a[5]=5;

int[] a = {1,2,3,4,5,6}

posted @ 2010-12-30 22:09 冯占科 阅读(99) | 评论 (0)编辑 收藏
 

抽象类:

absstract定义的类为抽象类,抽象类可以包含抽象方法也可以包含具体的方法;

没有方法体的方法为抽象方法;

抽象的类不能创建对象,只能通过继承使用这个类;

只用覆盖了父类中的方法后,才能实例化,才能使用;

模板方法,用来定义规则;

接口:

接口就是特殊的类;

接口内没有具体的方法,只能包含抽象的方法;

接口内默认就是抽象方法,不用加abstract;

接口内的方法默认是公用的,不用加public

接口不能实例化;

接口可以被继承,产生子接口,子接口也不能创建对象;

通过implements实现接口;

接口可以出现变量,但都是常量,用final定义,在声明的时候就赋值,默认是finalstatic

final最终的,不允许修改;

父类能适用的地方,子类也能适用;

posted @ 2010-12-23 22:30 冯占科 阅读(84) | 评论 (0)编辑 收藏

Linux下可以超过3G,Windows下最大也就1.6G左右(x86)。

一般32位的机器做大只能用到2G内存,4G内存可以跑2个tomcat,通过Apache做cluster.

posted @ 2010-12-22 14:43 冯占科 阅读(2794) | 评论 (0)编辑 收藏
 

一些新手朋友对选择器一知半解,不知道在什么情况下运用什么样的选择器,这是一个比较头疼的问题,针对新手朋友,对CSS选择器作一些简单的说明,希望能对大家的学习工作有一定的帮助,更多的CSS知识请参考Webjx.com的其他文章。

  准确而简洁的运用CSS选择器会达到非常好的效果。我们不必通篇给每一个元素定义类(class)或ID,通过合适的组织,可以用最简单的方法实现同样的效果。在实际工作中,最常用的选择器有以下五类:

一、标签选择器:

  顾名思议,标签选择器是直接将HTML标签作为选择器,可以是ph1dlstrongHTML标签。如:

p { font:12px;}

em { color:blue;}

dl { float:left; margin-top:10px;}

二、id选择器:

  我们通常给页面元素定义id。例如定义一个层 <div id="menubar"></div> 然后在样式表里这样定义:

#menubar {

margin:0 auto;

background:#ccc;

color:#c00;

}

  其中"menubar"是你自己定义的id名称。注意在前面加"#"号。

id选择器也同样支持后代选择器,例如: #menubar p { text-align:center; line-height:20px;; } 这个方法主要用来定义层和那些比较复杂,有多个“唯一后代”的元素。

三、类(class)选择器:

  在CSS里用一个点开头表示类别选择器定义,例如:

.da1 {

color:#f60;

font-size:14px ;

}

  在页面中,用class="类别名"的方法调用: <span class="da1">14px大小的字体</span> 这个方法比较简单灵活,可以随时根据页面需要新建和删除。但需要避免多class综合症。

四、群组选择器:

  当几个元素样式属性一样时,可以共同调用一个声明,元素之间用逗号分隔。如:

p, td, li {

line-height:20px;

color:#c00;

}

#main p, #sider span {

color:#000;

line-height:26px;

}

.www_52css_com,#main p span {

color:#f60;

}

.text1 h1,#sider h3,.art_title h2 {

font-weight:100;

}

  使用组群选择器,将会大大的减化CSS代码,将具有多个相同属性的元素,合并群组进行选择,定义同样的CSS属性,这大大的提高了编码效率与CSS文件体积。

五、后代选择器:

  后代选择器也叫派生选择器。可以使用后代选择器给一个元素里的子元素定义样式,例如这样:

li strong {

font-style:italic;

font-weight:800;

color:#f00;

}

#main p {

color:#000;

line-height:26px;

}

#sider .con span {

color:#000;

line-height:26px;

}

.www_52css_com p span {

color:#f60;

}

#sider ul li.subnav1 {

margin-top:5px;

}  第一段,就是给li下面的子元素strong定义一个斜体加粗而且套红的样式。其他以此类推。

  后代选择器的使用是非常有益的,如果父元素内包括的HTML元素具有唯一性,则不必给内部元素再指定classid,直接应用此选择器即可,例如下面的h3ul就不必指定classid

<div id="sider">

<h3></h3>

<ul>

<li>...</li>

<li>...</li>

<li>...</li>

</ul>

</div>

  在这里CSS就可以及样写:

#sider h3 {...}

#sider ul {...}

#sider ul li {...}

  结合使用上面的四种CSS选择器,基本满足了CSS布局的需要,主要在于灵活的使用,特别是后代选择器的使用能大大的简化HTML文档,使HTML做到结构化明确,最小的代码实现同样的效果。

  CSS中用四个伪类来定义链接的样式,分别是:a:linka:visiteda:hovera : active

  例如:

a:link{font-weight : bold ;text-decoration : none ;color : #c00 ;}

a:visited {font-weight : bold ;text-decoration : none ;color : #c30 ;}

a:hover {font-weight : bold ;text-decoration : underline ;color : #f60 ;}

a:active {font-weight : bold ;text-decoration : none ;color : #F90 ;}

     以上语句分别定义了"链接、已访问过的链接、鼠标停在上方时、点下鼠标时"的样式。注意,必须按以上顺序写,否则显示可能和你预期的不一致。记住它们的顺序是“LVHA”。

posted @ 2010-12-21 09:31 冯占科 阅读(90) | 评论 (0)编辑 收藏
 

Transactions(用户事务分析)

用户事务分析是站在用户角度进行的基础性能分析。

1、Transation Sunmmary(事务综述)

对事务进行综合分析是性能分析的第一步,通过分析测试时间内用户事务的成功与失败情况,可以直接判断出系统是否运行正常。

2、Average Transaciton Response Time(事务平均响应时间)

事务平均响应时间”显示的是测试场景运行期间的每一秒内事务执行所用的平均时间,通过它可以分析测试场景运行期间应用系统的性能走向。

例:随着测试时间的变化,系统处理事务的速度开始逐渐变慢,这说明应用系统随着投产时间的变化,整体性能将会有下降的趋势。

3、Transactions per Second(每秒通过事务数/TPS)

每秒通过事务数/TPS”显示在场景运行的每一秒钟,每个事务通过、失败以及停止的数量,使考查系统性能的一个重要参数。通过它可以确定系统在任何给定时刻的时间事务负载。分析TPS主要是看曲线的性能走向。

将它与平均事务响应时间进行对比,可以分析事务数目对执行时间的影响。

例:当压力加大时,点击率/TPS曲线如果变化缓慢或者有平坦的趋势,很有可能是服务器开始出现瓶颈。

4、Total Transactions per Second(每秒通过事务总数)

每秒通过事务总数”显示在场景运行时,在每一秒内通过的事务总数、失败的事务总署以及停止的事务总数。

5、Transaction Performance Sunmmary(事务性能摘要)

事务性能摘要”显示方案中所有事务的最小、最大和平均执行时间,可以直接判断响应时间是否符合用户的要求。

重点关注事务的平均和最大执行时间,如果其范围不在用户可以接受的时间范围内,需要进行原因分析。

6、Transaction Response Time Under Load(事务响应时间与负载)

事务响应时间与负载”是“正在运行的虚拟用户”图和“平均响应事务时间”图的组合,通过它可以看出在任一时间点事务响应时间与用户数目的关系,从而掌握系统在用户并发方面的性能数据,为扩展用户系统提供参考。此图可以查看虚拟用户负载对执行时间的总体影响,对分析具有渐变负载的测试场景比较有用。

7、Transaction Response Time(Percentile)(事务响应时间(百分比))

事务响应时间(百分比)”是根据测试结果进行分析而得到的综合分析图,也就是工具通过一些统计分析方法间接得到的图表。通过它可以分析在给定事务响应时间范围内能执行的事务百分比。

8、Transaction Response Time(Distribution)(事务响应时间(分布))

事务响应时间(分布)”显示在场景运行过程中,事务执行所用时间的分布,通过它可以了解测试过程中不同响应时间的事务数量。如果系统预先定义了相关事务可以接受的最小和最大事务响应时间,则可以使用此图确定服务器性能是否在可以接受的范围内。

Web Resources(Web资源分析)

Web资源分析是从服务器入手对Web服务器的性能分析。

1、Hits per Second(每秒点击次数)

每秒点击次数”,即使运行场景过程中虚拟用户每秒向Web服务器提交的HTTP请求数。

通过它可以评估虚拟用户产生的负载量,如将其和“平均事务响应时间”图比较,可以查看点击次数对事务性能产生的影响。通过对查看“每秒点击次数”,可以判断系统是否稳定。系统点击率下降通常表明服务器的响应速度在变慢,需进一步分析,发现系统瓶颈所在。

2、Throughput(吞吐率)

吞吐率”显示的是场景运行过程中服务器的每秒的吞吐量。其度量单位是字节,表示虚拟用在任何给定的每一秒从服务器获得的数据量。

可以依据服务器的吞吐量来评估虚拟用户产生的负载量,以及看出服务器在流量方面的处理能力以及是否存在瓶颈。

吞吐率”图和“点击率”图的区别:

吞吐率”图,是每秒服务器处理的HTTP申请数。

点击率”图,是客户端每秒从服务器获得的总数据量。

3、HTTP Status Code Summary(HTTP状态代码概要)

“HTTP状态代码概要”显示场景或会话步骤过程中从Web服务器返回的HTTP状态代码数,该图按照代码分组。HTTP状态代码表示HTTP请求的状态。

4、HTTP Responses per Second(每秒HTTP响应数)

每秒HTTP响应数”是显示运行场景过程中每秒从Web服务器返回的不同HTTP状态代码的数量,还能返回其它各类状态码的信息,通过分析状态码,可以判断服务器在压力下的运行情况,也可以通过对图中显示的结果进行分组,进而定位生成错误的代码脚本。

5、Pages Downloader per Second(每秒下载页面数)

每秒下载页面数”显示场景或会话步骤运行的每一秒内从服务器下载的网页数。使用此图可依据下载的页数来计算Vuser生成的负载量。

和吞吐量图一样,每秒下载页面数图标是Vuser在给定的任一秒内从服务器接收到的数据量。但是吞吐量考虑的各个资源极其大小(例,每个GIF文件的大小、每个网页的大小)。而每秒下载页面数只考虑页面数。

注:要查看每秒下载页数图,必须在R-T-S那里设置“每秒页面数(仅HTML模式)”。

6、Retries per Second(每秒重试次数)

每秒重试次数”显示场景或会话步骤运行的每一秒内服务器尝试的连接次数。

在下列情况将重试服务器连接:

A、初始连接未经授权

B、要求代理服务器身份验证

C、服务器关闭了初始连接

D、初始连接无法连接到服务器

E、服务器最初无法解析负载生成器的IP地址

7、Retries Summary(重试次数概要)

重试次数概要”显示场景或会话步骤运行过程中服务器尝试的连接次数,它按照重试原因分组。将此图与每秒重试次数图一起使用可以确定场景或会话步骤运行过程中服务器在哪个时间点进行了重试。

8、Connections(连接数)

连接数”显示场景或会话步骤运行过程中每个时间点打开的TCP/IP连接数。

借助此图,可以知道何时需要添加其他连接。

例:当连接数到达稳定状态而事务响应时间迅速增大时,添加连接可以使性能得到极大提高(事务响应时间将降低)。

9、Connections Per Second(每秒连接数)

每秒连接数”显示方案在运行过程中每秒建立的TCP/IP连接数。

理想情况下,很多HTTP请求都应该使用同一连接,而不是每个请求都新打开一个连接。通过每秒连接数图可以看出服务器的处理情况,就表明服务器的性能在逐渐下降。

10、SSLs Per Second(每秒SSL连接数)

每秒SSL连接数”显示场景或会话步骤运行的每一秒内打开的新的以及重新使用的SSL连接数。当对安全服务器打开TCP/IP连接后,浏览器将打开SSL连接。

Web Page Breakdown(网页元素细分)

网页元素细分”主要用来评估页面内容是否影响事务的响应时间,通过它可以深入地分析网站上那些下载很慢的图形或中断的连接等有问题的

元素。

1、Web Page Breakdown(页面分解总图)

页面分解”显示某一具体事务在测试过程的响应情况,进而分析相关的事务运行是否正常。

页面分解”图可以按下面四种方式进行进一步细分:

1)、Download Time Breaddown(下载时间细分)

下载时间细分”图显示网页中不同元素的下载时间,同时还可按照下载过程把时间进行分解,用不同的颜色来显示DNS解析时间、建立连接时间、第一次缓冲时间等各自所占比例。

2)、Component Breakdown(Over Time)(组件细分(随时间变化))

组件细分”图显示选定网页的页面组件随时间变化的细分图。通过该图可以很容易的看出哪些元素在测试过程中下载时间不稳定。该图特别适用于需要在客户端下载控件较多的页面,通过分析控件的响应时间,很容易就能发现那些控件不稳定或者比较耗时。

3)、Download Time Breakdown(Over Time)(下载时间细分(随时间变化))

下载时间细分(随时间变化)” 图显示选定网页的页面元素下载时间细分(随时间变化)情况,它非常清晰地显示了页面各个元素在压力测试过程中的下载情况。

下载时间细分”图显示的是整个测试过程页面元素响应的时间统计分析结果,“下载时间细分(随时间变化)”显示的事场景运行过程中每一秒内页面元素响应时间的统计结果,两者分别从宏观和微观角度来分析页面元素的下载时间。

4)、Time to First Buffer Breakdown(Over Time)(第一次缓冲时间细分(随时间变化))

第一次缓冲时间细分(随时间变化)”图显示成功收到从Web服务器返回的第一次缓冲之前的这段时间,场景或会话步骤运行的每一秒中每个网页组件的服务器时间和网络时间(以秒为单位)。可以使用该图确定场景或会话步骤运行期间服务器或网络出现问题的时间。

First Buffer Time:是指客户端与服务器端建立连接后,从服务器发送第一个数据包开始计时,数据经过网络传送到客户端,到浏览器接收到第一个缓冲所用的时间。

2、Page Component Breakdown(页面组件细分)

页面组件细分”图显示每个网页及其组件的平均下载时间(以秒为单位)。可以根据下载组件所用的平均秒数对图列进行排序,通过它有助于隔离有问题的组件。

3、Page Component Breakdown(Over Time)(页面组件分解(随时间变化))

页面组件分解(随时间变化)”图显示在方案运行期间的每一秒内每个网页及其组件的平均响应时间(以秒为单位)。

4、Page Download Time Breakdown(页面下载时间细分)

页面下载时间细分”图显示每个页面组件下载时间的细分,可以根据它确定在网页下载期间事务响应时间缓慢是由网络错误引起还是由服务器错误引起。

页面下载时间细分”图根据DNS解析时间、连接时间、第一次缓冲时间、SSL握手时间、接收时间、FTP验证时间、客户端时间和错误时间来对每个组件的下载过程进行细分。

5、Page Download Time Breakdown(Over Time)(页面下载时间细分(随时间变化))

页面下载时间细分(随时间变化)”图显示方案运行期间,每一秒内每个页面组件下载时间的细分。使用此图可以确定网络或服务器在方案执行期间哪一时间点发生了问题。

页面组件细分(随时间变化)”图和“页面下载时间细分(随时间变化)”图通常结合起来进行分析:首先确定有问题的组件,然后分析它们的下载过程,进而定位原因在哪里。

6、Time to First Buffer Breakdown(第一次缓冲时间细分)

第一次缓冲时间细分”图显示成功收到从Web服务器返回的第一次缓冲之前的这一段时间内的每个页面组件的相关服务器/网路时间。如果组件的下载时间很长,则可以使用此图确定产生的问题与服务器有关还是与网络有关。

网络时间:定义为第一个HTTP请求那一刻开始,直到确认为止所经过的平均时间。

服务器时间:定义为从收到初始HTTP请求确认开始,直到成功收到来自Web服务器的一次缓冲为止所经过的平均时间。

7、Time to First Buffer Breakdown(Over Time)(第一次缓冲时间细分(随时间变化))

第一次缓冲时间细分(随时间变化)”图显示成功收到从Web服务器返回的第一个缓冲之前的这段时间内,场景运行的每一秒中每个网页组件的服务器时间和网络时间。可以使用此图确定场景运行期间服务器或网络出现问题的时间点。

8、Downloader Component Size(KB)(已下载组件大小)

已下载组件大小”图显示每个已经下载的网页组建的大小。通过它可以直接看出哪些组件比较大并需要进一步进行优化以提高性能。

posted @ 2010-12-20 15:45 冯占科 阅读(174) | 评论 (0)编辑 收藏