2006年11月30日
1.10 星期三
array 数组:数组是一个具有相同类型的数据值得索引集合.
数组申明:double[] rainfull; 推荐
或
double rainfull[];
引用数据类型:接口,对象,数组.
rainfull = new double[12];
创建一个长度为12的数组,把空间地址赋给rainfull.
数组索引是从0开始(没特殊要求情况下,索引一般都是从0开始)
动态数组--自动增长
数组.length (属性)
String.leng() (方法)
String[] m = {"a","b","c"...}
在申明初始化时,数组的大小设定.
int size;
int[] number;
size = Integer.parseInt(JOptionPane.showMessageLag(null,"size of .."));
number = new int[size]; (方法也不是很好.因为size不一样,对象也就不一样.)
可变型数组
对象数组
数组的类型不是基本数据类型;
Person[] person;
person = new Person[20];
对象数组每个元素都是一个对象,没初始化时是null.
Person[0] = new Person[]; 创建对象
1.11 星期四
JCF--java集合框架
Java Collection Framework
JCF是什么?
是java语言设计出来的针对底层算法和数据结构的一系列类.
在哪用JCF?
凡是提到数据结构和算法的都可以用JCF
为什么用JCF?
让程序员的重点放在业务上,而不是如何去写算法上.
接口 Collection
| |
| |
set---- ----list map
实现 HashSet ArrayList SoredMap
算法 Collections
以上构成JCF
list 列表 map 映射
list的重要特征是帮我们管理大量对象
ArrayList 数组列表
LinkedList (单双)链表 (不是连续的,通过指针连接)
ArrayList al = new ArrayList();
al.add(1);
al.add(4);
al.add(2); 增加
......
al.remove; 删除
System.out.println(al);
System.out.println(al.get(3));
排序
Collections.sort(al); 小到大
Collections.max(al);
Collections.min(al);
Collections.sort(al,Collection.reverseOrder); 大到小
Vector 跟 ArrayList 很相似
向量
如何便利集合
Iterator it = al.iterator(); 迭带器 挨个访问
while(it.hasNext())
{
System.out.println(al.next);
}
HashMap 不允许重复
TreeMap 自动排序
treeMap tr = new TreeMap();
tr.put(1,1); (key,value)
.......
Object[] o = tr.keySet().ToArray();
Object[] o = tr.value().ToArray();
System.out.println(tr);
for(int i = 0;i<o.leng;i++)
{
System.out.println(0[i]);
}
12.25!~12.27
GUI
1 容器,部件
2 事件处理
awt和swing的特点:
awt(抽象窗口工具集)是依赖操作系统的GUI.
能够显示出来的组件是不同操作系统的共有组件.(但是不太好看.)
swing(模拟GUI组件)速度比awt要慢的多.
swt(sun公司的,是swing和awt的综合体)如果swt产生的组件awt有就直接调用, 没有就模拟出来.这样既解决了跨平台的问题,也解决了速度慢的问题.
低层容器:容器是包含其他组件的组件.
JFrame,JApplet,JDialog.
布局管理器:
标准布局,自由布局.
GUI三个步骤:
1.选择容器
2.为容器设置布局方式
3.为容器填加组件
导入3个包
import javax.swing.*;
import java.awt.*;
import awt.event.*;
GUI底层容器的实现方式
第一种:
JFrame jf = new JFrame(); //拿一个容器
jf.setLayout(null);
JButton jb = new JButton();
jb.setBounds(0,0,20,20); //绝对布局
jf.add(jb);
this.setSize(200,200);
this.setVisible(true);
第二种:
类 extends JFrame //让自己的类变成容器
申明组件;
public 类
{
Container ct = this.getContentPane();
ct.add();
this.setSize();
this.setVisible();
}
this.setCursor(new Cursor(Cursor.HAND_CURSOR)); //变手
Image image = new ImageIcon("Sunset.jpg").getImage();
setIconImage(image);//改变图标
容器,根容器,部件看gui资料 E盘..
布局管理器
FlowLayout 面板(缺省管理器) 流布局管理器
在setLayout(null)下全是FlowLayout
BorderLayout JFrame(缺省布局管理器) 东 西 南 北 中
GridLayout 行列(像表格)
CardLayout 卡片布局管理器(没有页签)
GridBagLayout 格兰包布局管理器(标准管理器中最灵活的,不好把控)
FlowLayout 从上到下,从左到右放置.
1.当第一行没有排满时,会把第一行排满再排下一行.
2.不管布局管理器是否改变,组件大小都不会改变.
FlowLayout folw = new FlowLayout (FlowLayout.LEFT);
3.在缺省状态下从中部开始.
BorderLayout
当东西南北任何一个地区没放置任何组件时,中部区域会把周围的区域侵略掉.
setLayout(new BorderLayout());
组件会随着容器大小的变化而变化.
add("North",组件); 不好用
add(组件,BorderLayout.NORTH); 清晰
GridLayout
组件会随着容器大小的变化而变化.
setLayout(new GridLayout(3,2)); 行列
add(new Button("first",0));
根据序列依次填进去,只有列满了才去填行.
validate(); 让容器刷新
GardLayout
GardLayout card = new GardLayout();
setLayout(card);
add("1",new Button(""));
CardLayout cl = (CardLayout)cardLayout.getLayout;
cl.show(cardLayout,"card1");
事件
class 类 extends JFrame implements(实现) ActionListener(接口)
{ (受托事件处理)
不同的事件不同的部门处理
}
1 让类变成监听者
2 赋予多少职责就实现多少
3 建立部件与监听者的关系
jb.addActionListener(this);
CardLayout cl = (CardLayout)card.getLayout();
String s = e.getActionCommed();
if(s.equals("上一步"))
{
cl.show(card,"card2");
或者
cl.previous(card);
button.setEnabled(false);
}
else if(s.equals("下一步"))
{
cl.show(card,"card1");
或者
cl.previous(card);
button.setEnabled(false);
}
2.19 星期二
在方法里面申明的属性必须初始化.(局部变量)
在类里面申明的属性不用初始化.(全局变量)
如果一个方法有返回值,那么方法里必须加上return.返回类型没有void.
构造器就是类的构造方法.
构造方法的基本特点:
方法名和类名一致,方法名没有返回类型.
构造方法的特性:
1.每个类一定会有一个不带参数的默认构造方法.
2.如果一个类定义了一个带参数的构造方法,那么不带参数的构造方法就会被洗刷掉.
3.构造方法可以重载.(如一个带参数的和一个带参数的)
一个类的方法同名叫做方法重载.
4.构造方法是不能被继承的.
实例变量:在类里面任何一个方法外面的变量.每个对象都有属于自己实例变量的拷贝.
public private这个我们称之为"可见性修饰符".它来指定数据成员和方法的访问能力和访问级别.
如果这个方法的行为是改变对象的属性,设置对象属性的值,那么这个方法称之为"修改器".
public void setHeight(float h, float w)
{
height = h;
weight = w;
}
如果这个方法只是返回对象属性,那么我们称这个方法为"访问器".
public void abc()
{
return a;
}
12.20 星期三
static int i;是类变量
缺省修饰符:本包的都可以访问.
公共修饰符(public):任何地方都可以访问.
if()
语句1;
else
语句2;
? : if else的工程用法(三目运算符)
switch的条件语句只能是整数
equals方法是被重写过的.
equals跟==的区别:
equals比较的是内存空间的内容是否相同
== 比较的是两个对象的地址是否相同
12.21 星期四
properties
import java.io.*;
import java.util.Properties;
class P
{
Properties pro;
public P()
{
pro = new Properties();
}
public void load(String fileName)
{
try
{
pro.load(new FileInputStream(fileName));加载
}
catch(IOException e)
{
e.printStackTrace();
}
}
public void getP(String key)
{
System.out.println(pro.getProperty(key));读取
}
public void setP(String key,String value)
{
pro.setProperty(key,value);设置(在内存里)
}
public void storeP(String fileName,String Info)
{
try
{
pro.store(new FileOutputStream(fileName),Info);保存(在文件)
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
普通文件 后缀.peoperties
(柔性软件开发)目的:可以让程序变的灵活,配置变的轻巧。
循环语句
while循环:循环次数未知使用。
for 循环:已知循环次数使用。
do-while循环
java基础
static是静态。
静态方法不能访问非静态成员。
非静态方法可以访问静态成员。
int i = 3;
public static void main(String[] args)
{
System.out.println(i);
}
这个就会报错。因为静态方法不能访问非静态成员!!
static int i = 3;
public static void main(String[] args)
{
nbn n = new nbn();
n.abc();
}
public void abc()
{
System.out.println(i);
}
这个就不会报错。因为非静态方法可以访问静态成员。
public(訪問修飾符)static(訪問修飾符)void(返回類型) main(方法名)(String[] args)(參數表){}
import javax.swing.*;
import java.text.SimpleDateFormat;
class jframe
{
public static void main(String[] args)
{
JFrame jf = new JFrame();//窗口
SimpleDateFormat sf = new SimpleDateFormat("yyyy-mm-dd");//时间格式
java.util.Date da = new java.util.Date();//显示时间的对象申明
jf.setTitle("w.a.n");//设置标题
jf.setSize(300,300);//设置窗体大小
jf.setVisible(true);//显示
JOptionPane.showMessageDialog(jf(位置),"hello");//弹出窗口显示HELLO
String a = JOptionPane.showInputDialog(null,"can you see?");//输入窗口,窗口提示为can you see
JOptionPane.showMessageDialog跟JOptionPane.showInputDialog还有一种参数写法。
JOptionPane.showMessageDialog(null," "(显示信息)," "(标题信息),JOptionPane.INFORMATION_MESSAGE);
System.out.println(sf.format(da.getTime())); //输出年月日。用SimpleDateFormat
}
}
三种注释
/**
*文檔註釋,寫在開頭 ( 注明程序的功能,以及相關信息)
*功能:
*作者:
*版本:
*開發日期:
**/
/*
*多行註釋
*///單行註釋
import javax.swing.JOptionPane;
class Area
{
final private static double PI = 3.1415; //常量的申明:final
private String r;
private double rr;
private double s;
public static void main(String[] args)
{
Area a = new Area();
a.Input();
a.Areas();
}
public void Input()
{
r = JOptionPane.showInputDialog(null,"請輸入圓半徑");
}
public void Areas()
{
rr = Double.parseDouble(r);//类型转换
s = rr*rr*PI;
JOptionPane.showMessageDialog(null,"圓面積是:"+s);
}
}
类型转换
String转double
xx = Double.parseDouble(要转换的数据名字);
String转int
xx = Integer.parseInt(要转换的数据名字);
int转String
String s = String.valueOf(12);
或
String s = new Integer(10).toString();
注意!!
float f = 2.33 是错的。因为2.33默认类型是double.
改正:float f = 2.33 F;
还要注意
高内聚,松耦合。
函数分解。
这样代码看起来会很清爽。
import java.text.DecimalFormat;
class Dformat
{
public static void main(String[] args)
{
DecimalFormat df = new DecimalFormat("0");//格式0后面几个小数点表示保留几位小数
System.out.println(df.format(66.6666)+"%");//这样66.666就是67%
}
}
标准输出
System.out.print("");//加ln是换行
标准输入
System.out.println(System.in.read());//這個方法用來讀取阿科斯碼
System.out.println((char)System.in.read());//這個方法是強制轉換,只能讀取一個字符
import java.io.*;//用BufferedReader 要引用io包
class c
{
public static void main(String[] args)throws Exception //要抛异常
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
System.out.println(s);
}
}
要导入util包,util是工具包.
Scanner sc = new Scanner(System.in);
int s = sc.nextInt();
int s1 = sc.nextInt();
System.out.println(s*s1);//用Scanner可以省去判斷的步驟 在jdk1.5以下的版本不能用
GregorianCalendar calendar = new GregorianCalendar(year,month,day);
int d = calendar.get(Calendar.DAY_OF_WEEK);//今天是一周内的哪一天
将HTML和JS文件分离的好处.<script type="text/javascript" src="";
1.分离的话易于维护和管理.
2.可重用.
javascript的作用是:1实现客户端与网页的交互(人机交互)
2客户端验证
window的2个"儿子":document 和 history
window有3个主要的.alert(提示框),open(新开一个窗口),prompt(对话框)
还有window.location.href="";实现页面跳转
window.status="";(状态条下写字).
window.history.back();(返回)
window.history.forward();(前进)
window.history.go(2);(前进2步)
window.history.go(-2);(退后2步)
事件
onclick单击 ondblclick双击
onfocus 聚焦 onblur 失焦
onselect 选择事件
window.setTimeout("函数",时间) (定时器)
onmouseover 鼠标放上去
onmouseout 鼠标离开
下拉列表:onchange
onload 写在<body>里 登陆发生的事件
onunload 写在<body>里 离开发生的事件
获取表单对象
document.formTest(表单名);
document.forms[0];
document.forms["表单名"];
document.getElementById("formId");
<form name="formTest" action="#">
<input type="checkbox" id="w1" name="box" value="0" />男
<input type="checkbox" id="w2" name="box" value="0" />女
<input type="checkbox" id="w3" name="box" value="0" />外乡人</br>
<input type="button" value="ok" onclick="w1.checked='checked';w2.checked='checked';w3.checked='checked'"/>
简单的按一个键,所有的check都被选中.
下面的这个是关于表单验证的一个作业.需要分析:就是在一个TEXT聚焦的时候,就会在旁边显示一排字告诉你里面内容必须不为空,并且要大于或者等于8位.当你输入的内容符合要求的时候,该行字就自动小时.我算是基本实现了功能了,但是不完善.因为当我输入9个字的时候,字并不是自动小时的,而是需要我再一次的聚焦..如果那位达人能帮忙解决下,俺感激不尽..
代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- Created by TopStyle Pro Trial Version - www.bradsoft.com -->
<title></title>
<style>
div
{
color: red;
font-size: 13px;
}
</style>
<script>
function tixing()
{
var divObject = document.getElementById("div1");
var text= document.getElementById("t1");
if(text.value.length >=8)
{
divObject.innerHTML = "您输入的用户名必须在0-8位之间。";
divObject.style.display = "none";
}
else
{
divObject.innerHTML = "您输入的用户名必须在0-8位之间。";
divObject.style.display = "";
}
}
function tixing1()
{
var divObject1 = document.getElementById("div2");
var text2= document.getElementById("t2");
if(text2.value.length >=8)
{
divObject1.innerHTML = "您输入的用户名必须在0-8位之间。";
divObject1.style.display = "none";
}
else
{
divObject1.innerHTML = "您输入的用户名必须在0-8位之间。";
divObject1.style.display = "";
}
}
function validate()
{
var te1 = document.getElementById("t1")
var te2 = document.getElementById("t2")
var divObject = div1;
var divObject1 = div2;
if(te1.value.length < 8)
{
divObject.innerHTML = "您输入的用户名必须在0-8位之间。";
divObject.style.display = "";
}
if(te2.value.length < 8)
{
divObject1.innerHTML = "您输入的密码必须在0-8位之间"
divObject1.style.display = "";
}
if(te1.value.length < 8 && te2.value.length < 8)
{
divObject.innerHTML = "您输入的用户名必须在0-8位之间。";
divObject1.innerHTML = "您输入的密码必须在0-8位之间"
divObject.style.display = "";
divObject1.style.display = "";
}
}
</script>
</head>
<body>
<form id="formTest">
用户名
<input type="text" id="t1" onfocus="tixing();"/><br /><div id="div1" ></div>
密 码
<input type="password" id="t2" onfocus="tixing1()" /><br /><div id="div2"></div>
<input type="button" id="bt1" value="登录" onclick="validate()"/>
</form>
</body>
</html>
再下面的这个是今天的作业.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- Created by TopStyle Pro Trial Version - www.bradsoft.com -->
<title></title>
<style>
div
{
float: left;
}
</style>
<script>
function a()
{
var textId0 = document.getElementById("te1");
var text0 = textId0.value;
var areId = document.getElementById("text");
areId.value = areId.value+"1."+"用户名:"+text0+"\n";
}
function b()
{
var textId1 = document.getElementById("pa");
var text1 = textId1.value;
var areId = document.getElementById("text");
areId.value =areId.value+"3."+"密码:"+text1+"\n";
}
function c()
{
var radioId1 = document.getElementById("ra1");
var radio1 = radioId1.value;
var areId = document.getElementById("text");
areId.value =areId.value+"4."+"单选:"+radio1+"\n";
}
function d()
{
var radioId2 = document.getElementById("ra2");
var radio2 = radioId2.value;
var areId = document.getElementById("text");
areId.value =areId.value+"4."+"单选:"+radio2+"\n";
}
function ei()
{
var radioId3= document.getElementById("ra3");
var radio3 = radioId3.value;
var areId = document.getElementById("text");
areId.value =areId.value+"4."+"单选:"+radio3+"\n";
}
function f()
{
var checkId1= document.getElementById("che1");
var check1 = checkId1.value;
var areId = document.getElementById("text");
areId.value =areId.value+"5."+"多选:"+check1+"\n";
}
function g()
{
var checkId2= document.getElementById("che2");
var check2 = checkId2.value;
var areId = document.getElementById("text");
areId.value =areId.value+"5."+"多选:"+check2+"\n";
}
function h()
{
var checkId3= document.getElementById("che3");
var check3 = checkId3.value;
var areId = document.getElementById("text");
areId.value =areId.value+"5."+"多选:"+check3+"\n";
}
function select()
{
var a = document.getElementById("selectId");
var b = a.options[a.selectedIndex];
var c = b.value;
var areId = document.getElementById("text");
areId.value = areId.value+c;
}
</script>
</head>
<body>
<div>
用户名:<input type="text" id="te1" onblur="a()"/><br/>
密  码:<input type="password" id="pa" onblur="b();"/><br />
<a>
<input type="radio" value="吃饭" id="ra1" name="1" onblur="c();"/>吃饭
<input type="radio" value="睡觉" id="ra2" name="1" onblur="d();"/>睡觉
<input type="radio" value="上学" id="ra3" name="1" onblur="ei();"/>上学
</a><br />
<a>
<input type="checkbox" id="che1" value="巷巷" onblur="f()"/>巷巷
<input type="checkbox" id="che2" value="街道" onblur="g()"/>街道
<input type="checkbox" id="che3" value="边边" onblur="h()"/>边边
</a><br />
<textarea id="text" cols="20" rows="6"></textarea>
</div>
<form id="selectId0">
<select id="selectId" onblur="select()"; / >
<option value="东东">东东 </option>
<option value="南南">南南</option>
<option value="西西">西西 </option>
<option value="北北">北北 </option>
</select>
</form>
</body>
</html>
还是不完善..哎..
do while和 while 的区别.
do while 是先执行再判断
while 是先判断再执行
--i; 减之前的值
i--; 减之后的值 i的值会变
i = i - 1; i的值会变
i - 1; i没有变
var i;
/*for(i = 0;i<10;i++) //;分段 初始化;循环条件;步进
{
document.write(i+"<br />");
}*/
/*for(i = 0;i<20;i++)
{
if(i == 16)
{
break;
}
document.write(i+" ");
}*/
/*for(i = 0;i<20;i++)
{
if(i%2 == 1)
{
continue;
}
document.write(i+" ");
}*/
/*var i = 1;
var j = 1;
for(i = 1;i<10;i++)
{
for(j = 1;j<=i;j++)
{
document.write(i+"*"+j+"="+i*j);
document.write("    ")
}
document.write("<br />")
}*/
/*var i = 1;
var j = 1;
for(i = 1;i<10;i++)
{
for(j = 1;j<10;j++)
{
document.write(i+"*"+j+"="+i*j);
document.write("    ")
}
document.write("<br />")
}*/
/*
while(true) //死循环
{
alert("fdfd");
}
alert("end");*/
var i = 20;
while(i>5010)
{
document.write(i);
i=i-1;
}
//alert("end");
/*var i = 0;
while(i<100)
{
document.write(i+" ");
if(i%10 == 9)
{
document.write("<br /><br />");
}
i++;
}*/
<script>
var b = "hello";
</script>
<script>
alert (b);
</script>
这个hello能打出来吗?这是今天黄Sir上课问的问题.好多人没反映过来.我也算一个吧.
答案是能打出来.*因为写在不同块的变量可以相互引用..!!
逻辑运算符
&&与.就是数学上的且!
||或.
!非.
在与里面,只要有1个是false,那结果就是false.
在或里面,只要有个是true,那结果就是ture.
非.如果是true那么它的非就是false,反之亦是.
如果是数字,记住只有0是false.只要是非0就都是true.
switch(day = 1) //switch只能表示等或者不等的映射关系
{
case day = 1:
{
alert("monday");
}break; //如果不加break会继续往下执行,并且忽略后来的比对,直到遇到下一个break.
case day = 2:
{
alert("tuesday");
}break;
case day = 3:
{
alert("wednesday");
}break;
case day = 4:
{
alert("thursday");
}break;
case day = 5:
{
alert("friday");
}break;
case day = 6:
{
alert("saturday");
}break;
case day = 7:
{
alert("sunday");
}break;
default:
{
alert("error");
}break; //最后1个可加可不加,但是加上比较严谨。
}
var score = 99;
if(score>=90) //表示范围
{
alert("so cool");
}
else if(score>=80)
{
alert("good");
}
else if(score>=70)
{
alert("so-so")
}
else if(score>=60)
{
("pass");
}
else
{
alert("not pass");
}
(首先,今天是我的跟儿生日.跟跟,你的跟祝你生日快乐!~)
进入正题....
javascript是一种脚本语言.脚本语言的意思就是它生成的文件不能独立运行,必须依赖于一种平台.比如javascript就必须要用IE才能打开.而像java或者c语言,它们由代码生成文件就可以独立运行.
javascript是一种弱类型语言.它不像java,c这些强类型的语言.强类型和弱类型语言的区别就在于.在申明一个变量的时候,强类型语言必须把变量类型也指定好. int i =0;而且一旦指定好类型,就不能再改变.而javascript作为一种弱类型的语言,它在申明变量的时候就不需要指定变量类型.切数据类型是自动转换的.
如var a = 0;这个时候a这个变量的数据类型就是整形.a = "hello"这个时候a的变量类型就变成了字符型.
javascript可以使用<script>嵌入进html里,也可以通过添加事件,或者用伪URL javascript..
alert();可以在()内写函数,数字,或者字符串.字符串必须用""括起来.它的效果就是弹出一个窗口.
var f = true;
alert(typeof(f)); //返回数据类型
函数:function functionName() //定义,申明
{
alert("Welcome to Lovo");
}
functionName(); //调用,使用
function abc(o) //o是形式参数
{
alert(o);
}
// o = "hello";
abc("hello"); //"hello"是实际参数
function a(i,o)
{
alert(i+o)
}
a(5,9);
这个的结果是14.很简单,就是2个数字相加.
function a(i,o)
{
alert(i+o)
}
a("500",9);
这个呢?是5009.这个因为500打了"",所以它就变成了字符串相加.
function b(i,o)
{
var w;
w = i + o;
alert(w);
return w; //程序到return就自动跳出
}
b(1,3);
之前我犯了个错误,我把 alert(w);写在了 return w; 之后..我就奇怪为什么W的值打不出来...好白痴,因为函数return w;的时候就直接跳出了.就不会接续执行函数里面 return w; 后面的语句了.
function b(i,o)
{
var w;
w = i + o;
return w;
}
function c()
{
var result;
result = b(3,3);
alert(result);
}
c();
这个是函数c调用函数b,函数b里面有个返回值,它把需要的结果返回给它的调用者.