一名java培训生的学习笔记(基础部分2).docx

上传人:牧羊曲112 文档编号:1877730 上传时间:2022-12-23 格式:DOCX 页数:75 大小:2MB
返回 下载 相关 举报
一名java培训生的学习笔记(基础部分2).docx_第1页
第1页 / 共75页
一名java培训生的学习笔记(基础部分2).docx_第2页
第2页 / 共75页
一名java培训生的学习笔记(基础部分2).docx_第3页
第3页 / 共75页
一名java培训生的学习笔记(基础部分2).docx_第4页
第4页 / 共75页
一名java培训生的学习笔记(基础部分2).docx_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《一名java培训生的学习笔记(基础部分2).docx》由会员分享,可在线阅读,更多相关《一名java培训生的学习笔记(基础部分2).docx(75页珍藏版)》请在三一办公上搜索。

1、第十三章 2007年6月17日 星期日授课教师:学生: 第一节 HashMap类常见的方法及其用法public class Test public static void main(String args) /创建5个Bean的对象b1-b5并对它们进行初始化Bean b1=new Bean();b1.setAge(23);b1.setName(Bob);Bean b2=new Bean();b2.setAge(23);b2.setName(Bob);Bean b3=new Bean();Bean b4=new Bean();b4.setAge(30);b4.setName(Jack);Bea

2、n b5=new Bean();b5.setAge(29);b5.setName(wang);HashMap h=new HashMap();/创建HashMap类型对象h;/并调用put方法,将它们取个key名(外号),加入到Map中h.put(1,b1);h.put(2,b2);h.put(3,b3);h.put(4,b4);h.put(5,b5);h.remove(3);/调用remove()方法,将key值为3的元素移除HashMapSystem.out.println(h.size();/输出Map中的元素数Bean temp=(Bean)h.get(5);/将key值为5的元素取出

3、来,并恢复其Bean身份,并其引用返回给tempSystem.out.println(temp.getAge();System.out.println(temp.getName();/输出key值为5的属性值第二节 equals方法和hashCode方法的重写在处理两个对象之间关系时,有时会需要判断两个对象是否相等,如果他们的引用指向的是同一个对象,那么它们是相等的。如Object中的equals方法。如果它们指向的是同一类型的不同对象,但是他们的属性值是相等的,也就是说它们的内容是相等的,那么我们就需要重写equals方法,例如:String中的equals方法就是Object中的equal

4、s方法的重写。如果我们自己定义一个类,需要将自己写的类型的两个对象equals。那么我们就需要在该类中重写Object中的equals方法。重写完equals方法后还需要重写hashCode方法。因为当我们用Hash容器(如HashMap、HashSet)装载这些对象时,例如,将一个对象用add方法加入Set时,会产生一个HashCode,当我们又创建一个同类型内容相同的对象时,又变成另外一个HashCode了,它们在容器中的HashCode是随机的生成的,那么你就无法取得该对象了。如果我们要判断容器中是否装进了某种类型的对象,那么就需要重写hashCode方法,因为equals方法返回tru

5、e的对象,它们的hashCode是相同的,重写hashCode方法就是让计算机在同一HashCode中寻找,否则计算机出于Hash容器的高效性考虑,不会去在已经存放该对象的hashCode中寻找,当然也就找不到了。重写equals方法和hashCodepublic class Money /创建名叫Money这个类public int value = 0;/定义int型数据成员value,并初始化为0。public Money()/创建无参数的构造方法public Money(int i)/带有参数的构造方法value = i;public boolean equals(Object obj)

6、/重写时需要注意重写的方法定义的要求if (obj=null)/判断形参的是否为空。如果是,返回false return false;if(this=obj)/判断形参对象与调用该方法的当前对象是否指向同一对象,如果是返回true.return true;if(!(obj instanceof Money)/判断形参对象是否是Money的实例,如果不是,返回false.return false;Money mo=(Money)obj;/将形参引用恢复成该对象的身份。if(mo.value!=this.value)/如果他们的内容不相等,返回false return false;return t

7、ure;如果都不是上面的情况返回truepublic int hashcode()/重写hashcode方法,使它们的hashcode保持一致return value;我们在eclipse中测试一下:如果我们不重写hashCode方法。那么输出的将会是flase如果我们将每个对象都存放在同一hashCode中,那样查找的效率就会很低,但是我们还可以利用String中的hashCode的算法,去重新写hashCode方法。public int hashCode()String str=String.valueOf(value);/将整型的value转化为String型的strreturn str

8、.hashCode();/用String中的hashCode的算法,返回hashCode第十四章 2007年6月18日 星期一授课教师:学生: 第一节 如何创建一个文件对象有三种方式:1、File myfile=new File(“d:/java/a.txt”);2、File myfile1=new File(“d:/java”, a.txt”);3、File myfile2=new File(“myfile1”, b.txt”);File类中常见的方法举例说明:import java.io.File;import java.io.IOException;/导入java.io包中的File和

9、IOException两个类public class FileName public static void main(String args)File f1=new File(d:/java111);/创建一个文件对象f1f1.mkdir();/创建该文件对象的目录File f=new File(d:/whjhg.txt);/创建一个文件对象fFile ff=new File(f1,www.txt);/创建一个文件对象ff,利用File中的构造方法,将其目录设置为f1所指向的路径/将文件名设置为www.txt。try /处理创建文件时可能出现的异常/如果两个文件不存在则创建这2个文件ff.c

10、reateNewFile();f.createNewFile(); catch (IOException e) /捕获异常e.printStackTrace();System.out.println(ff.canRead();/ff所指向的这个文件是否可读?System.out.println(ff.canWrite();/ ff所指向的这个文件是否可写入?System.out.println(ff.exists();/ ff所指向的这个文件是否存在?System.out.println(ff.getPath();/输出ff对象的路径名System.out.println(ff.isHidde

11、n();/ff所指向的文件是否为隐藏文件?System.out.println(ff.isFile();/ff这个对象是一个文件吗?System.out.println(f1.mkdir();/f1这个对象路径创建成功了吗?System.out.println(ff.isDirectory();/ff这个对象是目录吗?System.out.println(ff.lastModified();/ff所指向的这个文件的最后修改时间System.out.println(ff.length();/ff所指向的这个文件的大小是多少System.out.println(ff.delete();/删除ff所

12、指向的文件是否成功System.out.println(f.renameTo(f1);/是否成功的将f所指向的文件重命名为f1System.out.println(f.toString();/以字符串的形式将f对象返回在eclipse中测试一下结果:第二节 怎么样将一个创建好的文件写入一些内容import java.io.FileOutputStream;import java.io.IOException;import java.io.PrintStream;/导入java.io包中的FileOutputStream 、IOException 、PrintStreampublic class

13、 Output /创建名叫Output的类public void write(String filename)/创建一个带有参数的无返回值的方法write/目的是将形参中所代表的路径名文件写入一些内容FileOutputStream fs=null;PrintStream ps=null;/分别创建两个FileOutputStream、 PrintStream对象fs 和ps。/将它们初始化为nulltry /处理在写入文件时可能出现的异常fs=new FileOutputStream(filename);/将fs的引用指向用该方法形参作为构造方法参数的FileOutputStream对象ps

14、=new PrintStream(fs);/将ps的引用指向用fs作为构造方法参数的PrintStream对象ps.println(1234567890123);/调用ps对象中的println方法,将字符串1234567890123写入到文件中System.out.println(文件写入成功);/如果没有出现异常,输出 文件写入成功。 catch (Exception e) /捕获异常e.printStackTrace();finally/无论是否写入成功,都应该将fs和ps所指向的文件关闭try if(ps!=null)ps.close(); catch (Exception e1) e

15、1.printStackTrace();try if(fs!=null)fs.close(); catch (IOException e1) e1.printStackTrace();在eclipse中测试一下第三节 怎么样读取一个文件的内容import java.io.File;import java.io.FileInputStream;import java.io.IOException;/导入java.io包中的File、FileInputStream 、IOExceptionpublic class In /创建名叫In的类public String fun(String a)/创建

16、带有参数的,返回值类型为String的方法fun/其中形参a是字符串形式的文件路径/该方法返回的是形参路径所指向的文件内容File ff=new File(a);/创建用形参作为构造方法参数的File类型的对象ffFileInputStream fs=null;/创建FileInputStream对象fs,并初始化为nullbyte bb=new byte2;/创建byte型的数组bb,并指定长度为2,指定了每次读取的字符数String con=;/创建一个String类型的变量con,用来储存读取文件的内容int n=0;/定义一个局部变量。初始化为0try/处理在读取文件中可能存在的异常f

17、s=new FileInputStream(ff);/将fs的引用指向用该方法形参作为构造方法参数的FileInputStream对象while(n!=-1)/以是否读到文件尾为判断条件,进行while循环if(n!=0)/如果n不等于0,将读取bb数组中的n个字符/并将其内容放入到temp临时字符串中String temp=new String(bb,0,n);/将内容累加到con中con+=temp;n=fs.read(bb);/用fs对象调用read方法将读取出的字符个数赋给ncatch(Exception e)/捕获异常e.printStackTrace();finally/无论是否出

18、现异常都应该将文件关闭try /处理关闭文件时产生的异常 fs.close(); catch (IOException e1) /捕获IOException异常e1.printStackTrace();return con;/返回调用该方法所读取的文件内容我们在eclipse中测试一下,测试码如图:第四节 利用前两个程序中的方法拷贝一个文件import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;/导入java.io包中的File、F

19、ileInputStream、FileOutputStream、IOException类 public class CopyFile /创建CopyFile类public void copy(String srcName, String desName) /创建copy方法,其形式参数分别为源文件和目的文件 File src = new File(srcName); File des = new File(desName);/分别由两个形参作为File构造方法的参数,创建两个File对象src和des FileInputStream fis = null; FileOutputStream f

20、os = null;/分别声明FileInputStream、FileOutputStream的对象fis和fos,并将其初始化为null try /处理在文件copy的时候所产生的异常 des.createNewFile();/创建形参des所指的目的文件 fis = new FileInputStream(src); fos = new FileOutputStream(des);/分别创建FileInputStream、FileOutputStream的对象fis和fos int n=0;/定义整形变量n,初始化为0 byte buf = new byte2;/创建byte型的数组bb,

21、并指定长度为2,指定了每次读取的字符数 while(n = fis.read(buf) != -1) /调用fis的read方法读取源文件,并将其读取的字符数量赋给n/定义循环条件为n!=-1(未读到文件尾) fos.write(buf,0,n);/将每次读取的内容写入到目的文件中 catch(Exception e) /捕获异常 e.printStackTrace(); finally /为了安全起见,分别处理在文件关闭时的异常 try if(fos!=null)fos.flush(); catch (IOException e1) e1.printStackTrace(); try if(

22、fos!=null)fos.close(); catch (IOException e2) e2.printStackTrace(); try if(fis!=null)fis.close(); catch (IOException e3) e3.printStackTrace(); System.out.println(文件copy成功); 在eclipse中测试,测试码如下图:第十五章 2007年6月20日 星期三授课教师:学生: 第一节 与文件操作相关的一些程序实例一、实现FilenameFilter接口来过滤符合某些条件的文件或目录。import java.io.File;import

23、 java.io.FilenameFilter;/导入java.io包中的File类和FilenameFilter接口public class JavaFilter implements FilenameFilter/创建JavaFilter类实现FilenameFilter接口public boolean accept(File dir,String name)/重写接口中的accept方法,以实现FilenameFilter接口return name.endsWith(.java);/返回一以.java结尾字符串在eclipse中测试:二、读取properties类型文件的内容:prope

24、rties类型文件叫属性文件,其中的内容不要写中文,否则会读出乱码,它的作用是实现程序和程序之间、程序和服务器之间的信息交换。由于properties类型文件通常存放的是一些服务器的IP地址,或者存放程序实现所必须的目录或文件,所以可以利用文件返回的字符串来使维护程序更加方便。下面举一个读取properties类型文件的内容的程序。我们首先在硬盘上创建一个test. properties.用记事本打开写入内容如下图其中url和name叫做标记,后面的部分叫内容import java.io.File;import java.io.FileInputStream;import java.util.

25、Properties;/导入java.io包中的File和FileInputStream类/导入java.util中的Properties类public class ReadPro /创建ReadPro类 public String url = ; public String name = ; /定义.properties类型文件中的内容标记url和 name作为数据成员,初始化它们为public ReadPro() /在构造方法中完成读取.propertie文件的操作/使其创建该类对象时就已经将.propertie文件的内容赋给该类的成员变量 try /处理在读取文件中可能出现的异常 Pro

26、perties props = new Properties(); /创建Properties类的对象 File f = new File(d:/Test/test. properties); /用.propertie文件路径作为参数的构造方法创建File类对象f FileInputStream in = new FileInputStream(f);/将f作为FileInputStream构造方法的参数创建其对象in props.load(in);/将in作为参数用对象props调用Properties中的方法load/将文件读取出来 in.close(); /关闭该文件 url = pro

27、ps.getProperty(url); name=props.getProperty(name);/用Properties类中的getProperty方法将标记作为参数,分别返回给数据成员 catch(Exception e) /捕获异常 e.printStackTrace(); 我们在eclipse中测试。测试码见下图:第三节 线程一、基本概念:1、进程:通俗来讲就是指正在被cpu执行的代码叫进程。2、线程:等待被cpu执行的代码叫线程。3、多线程:指的是在单个程序中可以同时运行多个不同的线程,执行不同的任务。 由于cpu采用分时复用,每个线程都有机会得到执行,每个都执行1ms,我们看起来

28、就像是同时执行。二、创建线程:线程的所有活动都是通过线程的run()方法来实现的。在一个线程被建立并初始化以后, Java 的运行时系统就自动调用 run()方法,正是通过 run()方法才使得建立线程的目的得以实现。线程开始执行时,从它的 run ()方法中执行,这种方法是定义的线程的执行起点,就像应用程序从 main()开始一样。通常, run()方法是一个循环,例如一个播放动画的线程要循环显示一系列图片。有时, run() 方法会执行一个时间较长的操作,例如下载并播放电影。有两种方法可以构造自己的 run() 方法。下面我们将通过两个例子来分别说明。1、通过继承创建线程定义一个线程类,它

29、继承线程类 Thread 并重写其中的方法 run ( ) ,由于 Java 只支持单继承,用这种方法定义的类不能再继承其他父类。启动时调用start方法。举例说明public class X1 extends Thread /创建类X1,继承Thread类int i=1;/定义整型变量i,初始化值为1public void run()/重写run方法while(i0)System.out.println(X1的 +i+);try /处理在线程sleep时所产生的异常X1.sleep(1000L);/为了测试时能看清楚,调用Thread类中的sleep方法/每秒输出一个数字 catch (In

30、terruptedException e) /捕获异常e.printStackTrace();测试码如图:2、提供一个实现接口 Runnable 的类作为一个线程的目标对象,在初始化一个Thread 类或者 Thread 子类的线程对象时,把目标对象传递给这个线程实例,由该目标对象提供线程体 run ( )。这时,实现接口 Runnable 的类仍然可以继承其他父类。举例说明:public class X2 implements Runnable/创建X2类,实现Runnable接口int i=1;public void run()/重写run方法以实现Runnable接口while(i0)S

31、ystem.out.println(X2的 +i+);try Thread.sleep(1000L); catch (InterruptedException e) / TODO 自动生成 catch 块e.printStackTrace();测试码入图:3、两种方法的比较 (1)直接继承线程 Thread 类。不能再从其他类继承,编写简单,可以直接操作线程。 (2)通过实现 Runnable 接口实现线程。可以将 CPU 、代码和数据分开,形成清晰的模型;还可以继承其他类;保持程序风格的一致性和良好的扩展性。在具体应用中,采用哪种方法来构造线程体要视情况而定。通常,当一个线程已继承了另一个类

32、时,就只能用第二种方法来构造,即实现Runnable 接口。三、线程的状态:1、创建状态(new Thread() 当一个线程处于创建状态时,它仅仅是一个空的线程对象,系统不为它分配资源。2、可运行状态( Runnable ) 当一个线程处于可运行状态时,系统为这个线程分配了它所需的系统资源,安排其运行并调用线程运行方法,这样就使得该线程处于可运行( Runnable )状态。3、运行中状态( Running ) 当一个线程处于可运行状态时,系统为这个线程分配了它所需的系统资源, Java 的运行系统选中一个可运行状态的线程,该线程占有 CPU 并转为运行中状态。4、不可运行状态( Not R

33、unnable ) 不可运行状态也称为阻塞状态( Blocked )。由于某种原因(输入输出、等待消息或其他阻塞情况),系统不能执行线程的状态。这时即使处理器空闲,也不能执行该线程。5、死亡状态( Dead ) 线程执行结束的状态。存在两种情况:自然撤消或是被停止。四、线程控制:1、设置线程的优先级用Thread类中的setPriorty方法;例如:Thread.setPriorty(10);其中的参数10是设置为最高优先级,1是最低优先级。注意:要在线程启动前设置优先级。2、停止一个线程:一种方法是直接调用stop方法,但这不可靠,sun公司的文档写明不推荐的方法。另外一种就是自己写个方法,

34、让线程该停止的时候调用该方法。例如:可在例一中添加fun方法:public class X1 extends Thread int i=1;public void run()while(i0)System.out.println(X1的 +i+);try X1.sleep(1000L); catch (InterruptedException e) / TODO 自动生成 catch 块e.printStackTrace();public void fun()i=-1;System.out.println(X1 is Dead);测试码入图:3、启动多个线程:在下图中,我们虽然设置它们同样的s

35、leep时间,但是还是显示出了不规律性,当多个线程都有机会执行时,cpu想执行哪个要靠它的心情决定。表现出来的随机性,我们是无能为力的。4、当两个线程同时对一个数据进行操作时,例如、一个线程向数组中写数字,另外一个输出,那么有可能出现还没有写入的时候就被输出了。当我们不知道什么时间控制其停止的时候可以使用join方法。join方法是等待一个线程执行完毕。public class Join /创建Join类,用来测试join方法int a=new int 10;/定义一个int型的数组a,其长度为10public static void main(String args) /创建main方法,作

36、为程序入口 Join a=new Join();a.fun();/调用fun()方法,启动内部类中的线程,为数组a初始化。for(int i=0;i10;i+) System.out.println(ai= *+a.ai); /输出数组a的各个元素值public void fun()/创建fun方法XXX b=new XXX();/创建内部类对象bThread th=new Thread(b);th.start();/启动线程try /调用join方法,使该线程结束再处理main方法th.join(); catch (InterruptedException e) / TODO 自动生成 ca

37、tch 块e.printStackTrace();class XXX implements Runnable/创建内部类XXX实现Runnable接口public void run()/重写run方法实现Runnable接口for(int i=0;i后面输入 open 127.0.0.1 1234 回车 */public class TestServerSocket1 public static void main(String args) throws Exception /安装电话分机 ServerSocket server = new ServerSocket(1234); System.out.println(Server is listening.); /秘书守侯电话 Socket sock = server.accept(); server.close(); /发出指示 PrintStream ps = new PrintStream(sock.getOutputStream();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号