- 浏览: 12216 次
- 性别:
文章列表
就目前我们做的c/s的简单交互而言主要用到了三个类:客户端线程类ClientThread 、 服务端监听类ChatServer 、 服务端线程类ChatThread。
简单理解:通过socket建立客户端与服务器的连接,在客户端和服务器分别用输入输出流来获得和写出消息,通过消息的传递达到交互的目的。
(
不管在人生的路上走了多远,都应该时常回过头来看看自己留下的足迹,不是为了伤感时光易逝也不是为了追忆曾经的小小成就更不该是为了抱怨痛苦的磨难,而是为了从中总结出一些经验教训,从而可以让自己在接下来的旅途中走的更加沉稳坚定。
从二月份到现在三个多月了,就技术方面而言,我一直都觉得自己没有真正做出什么可以激励自己的东西来,刚开始听到要做项目总结,我就一直在想我们到底做了什么项目,我们所做的不过是将一些简单的程序整合到一起,然后给它冠上一个项目名称,如此而已。朋友说你看问题有些悲观了,毕竟才刚开始学难道还指望做出个什么实质的有实用性的项目?后来,我仔细想了想,的确是我急功近利了。学习 ...
关键字是事先定义的,有特别意义的标识符,有时又叫保留字。对于保留字,用户只能按照系统规定的方式使用,不能自行定义。
Java中的关键字按功能主要可以分为以下几类:
(1)与访问权限相关(√表示可以访问)
同一个
科赫曲线又被称为雪花曲线,是分形中的一种,画科特曲线的基本思路是先画一个给定边长和顶点坐标的正三角形,通过数学方法求出另外两个点的坐标,然后从界面获得要递归的次数(递归一次三角形的每一条边就被分为三等分以此类推),求出每一条边最终被分成了多长的小等分,最后从某一个顶点开始画最小等份的_/\_形状并逐层向上返回(另外两个端点也一样)。
要注意的地方:
1、 从界面输入的递归次数是String类型的,在用之前要将其转换为int类型的
//获取递归次数
String a = jta.getText();
//将String “a”转为int a
times = Integer.p ...
链表中的每个节点包括两个部分:数据域和指针域。顾名思义,数据域存储数据元素,指针域存储的是指向下一结点的指针。因而,链表的存储空间不一定是连续的,其数据元素的逻辑顺序是通过指针链接次序实现的,链表的查寻操作将没有数组那样简单,但插入与删除操作将比较方便。
下面是对单向链表进行增、删、改、查操作的代码:
package com20130324C;
/**
* 定义一个链表类
* @author Administrator
*
*/
public class LinkNode {
public LinkNode root;
public LinkNode next;
publ ...
之前关于队列的代码实在是有很多地方应该改善,在此再次对热心帮我指出缺点的朋友表示感谢,不过我感觉如果用数组实现队列扩容还是得每次new一个新的数组,所以那部分只是修改了将原数组中数据复制到新数组中的方法。下面是我修改后的代码。
package com20130323;
/**
* 定义一个队列类
* @author Administrator
*
*/
public class ModifyQueue {
//系统自定义初始长度为100,每次扩容5
private int len = 100;
private int increase = 10;
//count用来记 ...
用数组来存取数据的好处是数据是有序的,便于通过下标对其进行操作。但是数组一旦定义,其长度就是固定的。当用户不知道要存入的数据个数时,用数组就不方便了,因为如果定义长度太大会造成资源的浪费,可如果定义的长度太小又会不能将所有数据存入。因而,需要一个可以动态分配存储空间还可以有序的存放对象的数据结构,队列恰好可以满足上述条件。
队列的实现实际也是通过在实现类的内部使用数组保存入队的对象,每次增加新对象时,创建一个比原来数组长度大1的新数组,然后将要加入数据放在新数组的最后一位,再将原数组中的数据放入新数组中,最后让原数组指向新数组的内存地址。
具体代码如下:
/**
* 定 ...
在画图板上画出一些图形后,如果最小化窗体,然后再将其最大化时,之前的图形会消失,为了使得之前的图形不消失,我们需要重载父类JFrame中的paint()方法,通过数组保存之前图形的相关数据在内存里,等到调用子类中paint()方法时取出数据实现重绘。
代码:
package com20130320;
import java.awt.FlowLayout;
import java.awt.Graphics;
import javax.swing.JFrame;
//继承JFrame类
public class ReDraw extends JFrame{
// ...
数组的定义格式: 类型[ ] 数组变量名 = new 类型[长度];
数组一旦定义,它的长度就是固定的。
数组元素可以是基本数据类型和类类型
以下面的Manager和 Student为例实现类类型数组元素的存入和取出。
import java.util.Scanner;
public class Manager {
public static void main(String args[]){
//创建一个学生类型的数组
Student[] st = new Student[100];
Scanner input = new Scanner(System.in); ...
类可以分为三种:普通类、接口、抽象类。三者之间的主要区别在于,普通类中的方法必须都是普通方法,不能有抽象方法;接口中的方法只能是抽象方法,并且接口的访问权限必须都是public,属性必须都是常量;抽象类是介于普通类和抽象类之间的,故其既能有普通方法也能有抽象方法。
抽象方法就是指只有方法名而没有方法体去实现的方法。
接口的定义格式: public interface 文件名{} 作用:被普通类继承
普通类实现接口时所用的关键字:implements ,普通类实现接口时必须实现接口中所有的抽象方法。
抽象类的定义格式: public abstract ...
继承的关键字是extends,如果一个类A继承了另外一个类B,那么称A是B的子类,B是A的父类,并且A继承了B的所有属性和方法(除了构造方法),但在子类的构造方法中会默认的去调用父类的构造方法 super();。方法的重写是指在子类中定义一个与父类中的方法名、参数、返回值均相同的,但访问权限只能扩大不缩小,方法体不同的方法。对于方法的重写与重载的区分,重写是在继承的子类中,重载是在同一个类中,且重载的方法名相同,但参数必须不同。
自动转型的格式:父类名 对象名 = new 子类名(); 先是构造了一个子类的对象然后将其转型为父类类型,自动转型后,如果子类重写了父类中的方法,转型后的 ...
构造函数是一类方法名必须与类名相同,不写返回值但返回对象内存地址的函数,一般情况下,是系统默认存在的,不需要写出。方法的重载是指在同一个类中,多个方法名相同但参数的个数/类型/排列顺序不同的方法,方法的重载有利于实现做同一件事存在多种不同的形式。构造方法也是可以被重载的,重载构造方法可以便于在实例化对象时给其赋初值。传递分为值传递和引用传递,引用传递传的是对象的地址。
//定义一个Teacher类
public class Teacher {
//声明属性
String name;
//默认的构造函数
public Teacher (){
//无方法体
}
//重载一个构造函数
pu ...
类是具有相同特征(也就是属性)和行为的对象的集合,它只是一个模版一个抽象的概念,并不对应着某一个具体的事物,而对象则是类中的某一个实例,它具有该类所声明的所有属性和方法。如果想要对某一个类中的属性和方法进行操作,只能实例化对象,通过对象来操作。
//定义一个Course类
public class Course{
//声明学科名称的属性
String name;
//声明一个setName和getName 的方法
public void setName(String name){
this.name = name;
}
public void ...