java SE学习笔记

一:IO输入输出流):有三种输入输出流是比较常用的:

a):第一种是inputStreamoutputStream该两种类是顶层的抽象类;如果想使用的话,必须使用他的子类

b):第二种是FileInputStreamFileOutputStream该两种类是对于文件的读取所采用的类,使用方法是是:

InputStream in = new FileInputStream();

c): 第三种是ByteArrayInputStramByteArrayOutputStream是关于数组的,即该类的构造方法。

d):第四种是BufferedInputStreamBufferedOutStream是缓冲的数据处理。

e)第五种是DataOutputStreamDataOutputStream是一个过滤流,可以包装节点流,注意继承FilterOutStream或者FilterInputStream的是包装流。DataOutputStreamDataInputStream可以写入基本数据类型。其特点就是可以写入基本数据类型。并且写入的是二进制文件。

二:字节和字符以及比特的区别:

1.比特(bit):是计算机中最小单位,即计算机内部是二进制,只能用01表示,比特就是二进制中的最小单位。

2.字节(byte):一个字节是计算机文件大小的单位,一个字节占八个比特。即1 byte = 8 bit

3.字符(char):字符是对字母,汉字和其他符号的统称。通常一个字母占用一个字节大小,一个汉字两个字节大小。字符是指计算机中使用的数字和符号,包括:123ABC~!·#%……—*()——+等等。1个汉字字符存储需要2个字节,1个英文字符存储需要1个字节。.

注意:字节和字符没有必然联系,字节是计算机存储的基本单位。

三:

序列化:(Serializable 一个类要想序列化,必须实现java.io.Serializabel的接口。该接口中没有定义任何方法,是一个标识性接口(Mark inteface),当一个类实现了该接口,说明这个类是可以序列化的。当一个对象被序列化的时候,只能保存其非静态变量,因为静态变量或者方法是属于类的。

例如:Student的类型继承Serizalizable接口,则该student可以序列化。

ObjectInputStreamObjectOutputStream是两个序列化的类。其方法readObject()和writeObject()分别接收一个FileOutputStream的文件。

FileOutputStream file = new FileOutputStream(“file”);

ObjectOutputStream ofile = new ObjectOutputStream(file);

ofile.writeObject(Object obj);即可写入一个Object的对象。读取则反之。

四:

线程(Thread):实现线程有两种方法:一个是继承Thead的类,重写run()方法。一个是Runable接口。启动线程是start();

a)继承Thread的类,Thread类中有start()的方法。直接main()方法中调用MyThread.start()的方法。

b)实现Runable接口。重写Runnablerun()方法。在main()方法中生成new Threadnew MyRunnable()).start()的方法。

四:关于线程的同步(synchronized)问题;建议使用synchronized块。因为这样选择更能小范围的使用。Synchronized的使用方式是:

Synchronized(Object{

...所执行的代码

}

关于wait()notify()的方法。wait()方法必须放在同步代码块里面,配合notify()方法,如果没有notify()方法,则wait()所执行的线程等待让出锁,却无法得到唤醒,只能一直等待,另一种机制是sleep()只是暂停线程的使用,所占用的资源并没有让出,只是暂时睡眠。

五:关于对象的复制,分为浅复制和深复制。浅复制的实现:

让想要复制的类继承Cloneable()接口,然后调用super.clone()的方法。如:

 

 1 public class ClonetTest1 {
 2 
 3     public static void main(String[] args) {
 4         
 5     
 6         People people = new People(90,"zhangsan");
 7         
 8         try {
 9             People people2 = (People)people.clone();
10             System.out.println(people2.getAge());
11             System.out.println(people2.getName());
12         } catch (CloneNotSupportedException e) {
13 
14             e.printStackTrace();
15         }
16     }
17 }
18 
19 class People implements Cloneable{
20     
21     private int age;
22     private String name;
23     
24     public People(int age,String name){
25         
26         this.age = age;
27         this.name = name;
28     }
29 
30     @Override
31     public Object clone() throws CloneNotSupportedException {
32          
33          Object peple2 = super.clone();
34          return peple2;
35      }
36 
37     public int getAge() {
38         return age;
39     }
40 
41     public String getName() {
42         return name;
43     }
44      
45 }

 

深复制:是用序列化的方式写入Stream当中,再读出。这样可以实现深复制。

六:网络编程:此类所用到的类都在java.lang.net的包下,

如果请求远程的一个网页:可以使用这样一个方式:

 1 public class UrlTest3 {
 2 
 3     public static void main(String[] args) throws Exception{
 4         
 5         URL url = new URL("http://www.baidu.com");
 6         
 7         InputStream is = url.openStream();
 8 
 9         //这两行可以用上面的一行进行实现。
10 //        URLConnection con = url.openConnection();
11 //        InputStream ins = con.getInputStream();
12         
13         OutputStream os = new FileOutputStream("Test.txt");
14         
15         byte[] b = new byte[2048];
16         int length;
17         
18         while((length = is.read(b, 0, b.length)) != -1){
19             
20             os.write(b, 0, length);
21         }
22         
23         is.close();
24         os.close();
25     }
26 }

网络编程的连个协议:一个是TCP一个是UDPTCP 是链接UDP是分散之后再传输,TCP的实现方式:

NetAddress address = new NetAddress(“”);

七:网络编程:

Tcp的实现方式的两个类是ServerSocketSocket这两个类。

 1 ServerSocket serverSocket = new ServerSocket(1997);
 2 serverSocket.accept();
 3 Udp的网络实现方式:新建DatagramSocket socket = new DatagramSocket();
 4 DatagramPacket packet = new DatagramPacket();
 5 Socket.send(packet);
 6 package com.koma.network5;
 7 
 8 import java.net.DatagramPacket;
 9 import java.net.DatagramSocket;
10 
11 public class UdpTest2 {
12 
13     public static void main(String[] args) throws Exception{
14         
15         DatagramSocket socket = new DatagramSocket(1993);//这是要接受的客户端的端口必须是指定的。
16         
17         byte[] b = new byte[1024];
18         
19         DatagramPacket packet = new DatagramPacket(b,100);
20         
21         socket.receive(packet);
22         System.out.println(new String(b,0,packet.getLength()));
23         
24         String str = "how do you do";
25 //        先前接收的数据包中含有地址和端口。
26         DatagramPacket packet2 = new DatagramPacket(str.getBytes(), 0,str.length(),packet.getAddress(),packet.getPort());
27         
28         socket.send(packet2);
29         socket.close();
30     }
31 }
32 这个是另一个客户端:
33 package com.koma.network5;
34 
35 import java.net.DatagramPacket;
36 import java.net.DatagramSocket;
37 import java.net.InetAddress;
38 
39 public class UdpTest1 {
40 
41     public static void main(String[] args) throws Exception{
42         //新建一个Udp的数据
43         
44         DatagramSocket socket = new DatagramSocket();
45         
46         String str = "hello everyone";
47 //        封装一个数据包,通过数据包发送。其中这个数据包中含有地址和端口。
48         DatagramPacket packet = new DatagramPacket(str.getBytes(), 0, str.length(), InetAddress.getLocalHost(), 1993);
49 //        发送数据包
50         socket.send(packet);
51 //        接收数据包,把要接收到的数据包存放到一个数组中,
52         byte[] b = new byte[1024];
53 //        新建一个数据包把要读的数据包封装到数组中
54         DatagramPacket packet2 = new DatagramPacket(b, 100);
55         socket.receive(packet2);
56 //        打印出发送的数据。
57         System.out.println(new String(b,0,packet2.getLength()));
58         socket.close();
59         
60     }
61 }

注意:关于网络的传输必须是先启动接收端即服务端,等待客户的输入,再启动客户端发送。

Junit的测试:测试私有方法应该使用反射

 1 public class TestCalc extends TestCase{
 2 
 3     public void testAdd(){
 4         
 5         try {
 6             
 7             Calc calc = new Calc();
 8             
 9             Class<Calc> clazz = Calc.class;
10             
11             Method method = clazz.getDeclaredMethod("add", new Class[]{int.class,int.class});
12             
13             method.setAccessible(true);
14             
15             int result = (int)method.invoke(calc, new Object[]{2,3});
16             
17             Assert.assertEquals(5, result);
18             
19         } catch (Exception e) {
20 
21             Assert.fail();
22         }
23    }
24 }

JUnit的测试:

Junit3的测试必须满足三个条件:

1)继承TestCase父类

2)Public

3)Void

4)方法名必须是以test开头

Junit4加入了注解:注意不必加入继承TestCase父类,如果继承了就会判断异常时出现错误。也就是说Junit4不必继承父类

 

转载于:https://www.cnblogs.com/mayue593/archive/2013/05/15/3080674.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值