java学习笔记 基于马士兵老师视频教学的笔记_第1页
java学习笔记 基于马士兵老师视频教学的笔记_第2页
java学习笔记 基于马士兵老师视频教学的笔记_第3页
java学习笔记 基于马士兵老师视频教学的笔记_第4页
java学习笔记 基于马士兵老师视频教学的笔记_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java学习笔记 学习 Java首先要配置环境变量,在电脑属性的高级中,点 击环境变量,classpath 中有一英文句号“.”后跟一个分 号,表示当前路径的意思。由第一个程序 Helloworld为例 说明 Java的基本运行代码: public class HelloWorld public static void main(String args) System.out.println(“Hello, World!“); 在 Java中只能允许有一个公共类,此区别于 C+。还 有 Java的写作风格与 C和 C+有很大区别。下面细谈 Java 的基本语法,与其他语言类似,Java 每一条语句都以 “;”结束。 1. short byte char 之间不会自动转换,他们运算时首先转换为 int 然后进行运算;boolean 不会进行转换;如:byte b1;byte b2; byte b3=byte(b1+b2);b1+b2运算后是 int 类型,可以 byte a=1;/可以把数值直接赋值不超范围, (-128127) float f1=1.234f;long l1=300000000L;f和 L一定加上; 2. System.out.println( );/输出后换行 System.out.print( );/输出后不换行 打印时,无论任何类型,都先 转换为字符型,再进行打印。 3. 聚合关系,就是包含关系,实现关系就像虚基类,在派生类中实 现。 4. 定义成员变量可以初始化,若不则自动初始化(可以直接在成员 变量的定义时初始化);但局部变量一定要自己初始化,boolean 类型默认为 false,其他默认为 0;在 main中调用函数时,只要 定义了构造函数并且初始化,就一定要把实参的值写到函数里, 不能少参数。因为所有数值定义后都有默认值,所以一定要初始 化如:int x; x默认为 0;但是如果都不写初始值,调用函数 可以不用参数。 5. String 关键字是字符串定义,不是字符如:(String name=“fgsdhj”/也不用写 name) ;必须使用 new来创建对象 6. 静态数据成员 static:在类体(Car)中定义的时候 private static int sid = 0;在以后的 public static void main()中可以通过 Car.sid;或者 Car mm; mm.sid;访问 7. import与 package package 位于程序开始 如 package com.bjsxt.java140;并把生成相应的类放到相应的子目录下即 新建文件 combjsxtjava140,把类 的.class 文件放在该目录下,就是打包了,在 jdk1.5以后类的. java文件可能也会影响,所以把.java 删掉。在以后的类中调用 时可以 com.bjsxt.java140.类名 = new 类名() ;或者用引入: import com.bjsxt.java140.类名;或者 import com.bjsxt.java140.* 8. 在要打包的上一层文件目录 E:javatest2jar cvf test2.jar 就能把 test2目录下所有文件打包成. jar文件 即 windows下的压缩包。 9. 继承权限:用关键字 extends.有 private protected default public 而 private继承 继承之后也没有使用权, 只有在定义 private的类中才可以使用; 10. 函数重写必须遵循函数名一样,参数类型,返回类型,也必 须一致,并在重写的函数体中增加相应的代码,不是重载;重写 的函数不能比被重写的函数有更严格的访问权限,至少一样。 11. 子类的构造方法中必须对基类的构造函数声明,在子类的构造 函数中首先写 super( );里面加参数,意思是调用基类的构造 函数,若不写,系统默认调用基类无参数的构造函数,若基类中 没有无参数的构造函数,则编译出错; 12. 在构造函数中,前面可以加 public 也可以不加;在类与类之 间“;”可加可不加,编译不会出错。在构造函数的入口参数设 置是一定注意,与上面的初始化保持一致就好。 13. object 类的定义,了解一下,其中有一个方法,toString 方法是返回一个说明该类的说明,在 API文档中查找,建议重写。 关于 object 中,equals 方法返回值是 boolean,可以重写, public boolean equals(object obj) 内容自定义;在 main() 中: System.out.println(c = = a); 或者 System.out.println(a.equals(c)) ;一样用;字符串比较也已 也一样,且不为空才行。 14. 对象类型转换,如 Animal a = new Animal(); Cat c = new Cat();System.out.println(c instanceof a)/输出 true; 也可以这样 a = new Cat();/基类强制转化为子类,可以,只 是 a 不能访问 Cat类中新定义的类型。可以这样访问新定义的类 型。 Cat d = (Cat)a;/ 用强制类型转化基类为子 类,然后转化后一样用。 /e:javatest2TestTeacherTestTeacher.java 15. 关于多态,一定要有继承,要有重写,要有父类指向子类的 引用。动态联编的实现是为了以后程序功能的扩展,而不改变源 代码. /e:javateat2TestdongtaiTestLady.java 16. 抽象类:若一个类中含有抽象和方法,则一定要把给类定义为 抽象类,抽象 abstract 类似于 C+中的纯虚函数。 Public abstract void enjoy();就没有 内部代码了。而且子 类中的重写父类的那个方法一定要有实现代码,否则报错。也可 以再次把该函数声明为抽象类,这样编译不会出错。但是就不能 用该子类定义新对象,因为抽象类是残缺的。 17. final 关键字中 final 的变量不能被改变,final 的方法不 能被重写 ,final 的类不能被继承。Public final class String() /写法如下 final int i =9; 18. interface 接口设置,即为 C+中的多重继承 只是接口继承 的时候不用关键字 extends 而用 implements 可以用 implements A,B,C,D 这是与 extends不同地方。在子类中分别实现积 累的代码,原基类就像抽象类一样,其函数的设置在子类中实现 的。 在本例中还涉及强制类型转换,可见性与不可见性的问题, 还涉及动态联编。 /e:javatest2TestjiekouTestInterface.java 19. Java中关于异常处理机制,try throw catch 其中经常使用 catch (ArithmeticException e) System.out.println(“系统正在维护,请与管理员联系“); e.printStackTrace(); /其中 e 就像一个类的对象一样使 用,e.printStackTrace();是打印出错的堆栈信息,以便修正。 ArithmeticException 和 printStackTrace()是系统自己定义的。 20. finally 是一定执行的语句,catch 语句之后自动停止, 以后不再执行。对所有异常处理,可以直接抛出 throws Exception 不管是 IoException 或是 NotFoundFileException ;不想处理就继续抛出。方法重写必须与原来的抛出的异常一致, 不得是别的。但是不抛异常没有关系。 21. 数组定义,也是引用,int s,或是 int s ;只是中括号 内不能有数字,区别于 c+;如: int a;/声明数组名字 a = new int5;/动态分配空间 在动态分布空间之后, a.length自动记录数组的长度,以后可以直接调用。 22.ipconfig在命令行可以显示 ip地址,ipconfig-all 可以显示更 详细的信息; 23.在 main 函数中, (String args)的作用是把在命令行执行时 加的参数自动保存在 agrs数组里面; 补充:在基本数据 类型里面,可以通过 double.parsedouble( )把一个字符类型的变 量转化为 double 类型。其他类型类似,比如 int float byte。 。 。 。 。 。 直接把3转化为 3 24.函数返回值类型可以是数组类型,public static Date bubblesort(Date a) return a;这样也是可以实现的。 25.二位数组定义,初始化时,int a32=1,2,2,3,23,1; 是错误的,不能写 3 ,java 自动检查长度。 26.关于 string,有很多种方法,就关于字符串的种种处理,大小 写处理,空格处理(trim) ,截取字符,把字符分割成子串(split) , 查找 API文档。Stringbuffer 是可变的字符序列,与不可变的 string相比,更加具有优势,方法与其类似,在执行效率上比较高。 27. dij = Double.valueOf(sSecondj); 把字符串转化为 double类型的数据,调用 double的方法,在前面加上 Double. 一 定不要少。包括二维数组的定义使用,把两维分开来写。 /E:/java/test6/ArrayParser.java 28.Math类 java.lang.math与数学相关的一些方法,File 与文件 相关的方法,java.io.*; 文件的创建,File(String parent, String child) parent代表路 径,而 child 是要创建的文件名称。 f.getParentFile().mkdirs(); /只是把对应的目录创建成功 文 件并没有生成。/e:/java/test6/TestFile.java 29.枚举类型规定只能取规定的值,其余的不允许取值,在游戏开发 时多用,如:public enum mycolourred ,green ,blue; mycolour m = mycolour.red;访问时类似于静态成员变量的访问。 可以提前发现错误,在编译时发现。 容器: 30.List与 Set Map:(都是接口) Set 的数据对象是没有顺序不可重复的 ,即重复的元素不会被加入 集合。/e:javatest7TestSet.java List的数据对象是有顺序可以重复的,自增了一些方法,见 API。 Map是把数据成对成对地装入容器。 Put方法是 object的原因是当放入的 key已经存在时,原来的 value被替换掉,作为返回值返回。Get 方法返回的是 value. /e:javatets7TestMap.java 31.iterator是 collection的一个接口,其作用是容器的遍历,其 方法有 hasNext , next , remove 具体用法是 Iterator i = c.iterator(); /c为 Collection c = new HashSet(); 然后 i就可以调用 Iterator的方法了。Iterator 的 remove 方法是 迭代过程中删除元素的唯一安全的方法。而不是 c.remove。 /e:javatest7collection.java 32.Collections 类封装了 List许多静态的方法。 调用的时候,因为是静态的方法,所以直接用类名加方法就行,如 Collections.sort(l1);l1为 List的容器从低到高排序 /e:javatest7TestList.java 33.(补充) private static final int one = 1; /关键字的顺序 关于 args 在运行 java 。 。 。 。 。 。 。 命令时,在后面加上 数字 字母。 。 。就是加在 agrs数组中。数组的 args 的长度 args.length 没 有括号 六个基本类型 Byte, Double, Float, Integer, Long, Short Integer是 int的包装类 其目的是方便各种数据的转换,如 int num = Integer.valueOf(“12”); double num2 = Double.valueOf(“12.2”); /通过基本包装数据类型的 valueOf和 parseXX实现 String转换为 XX String a = String.valueOf(“1234”); String b = String.valueOf(true); String c = new Integer(12).toString(); /通过包装类的 toString也可以 34.泛型写法: Map m1 = new HashMap(); 具体使用 方法见 java文件 以后用集合的时候尽量使用泛型 /E:javatest7TestMap2.java /e:javatest7 BasicGeneric.java (使用 Iterator时使用泛型) IO: 35. InputStream OutputStream Reader Writer 都是抽象类不能直接 new 也就是实例化,其具体的实类为 FileInputStream FileOutputStream FileReader FileWriter,字节流是一个字节一 个字节读写 字符流可以写汉字(一个字符两个字节) 。 InputStream方法: /e:javatest8TestFileInputStream.java OutputStream方法: Reader Writer 类似。 /E:javatest8TestFileOutputStream.java 36.BUffeedrStream: BufferedReader BufferedWriter BufferedInputStream BufferedOutputStream 提供缓冲区 支持父类的 mark 与 reset 方法,不太常用 mark是标记位置 从 标记的地方开始读写,reset 是重置 ,即是读写后再次回到标记的 位置。BufferedReader 提供了 readLine方法用于读取一行字符串。 在输出 readLine的内容的时候用 println(),好像 readLine不读取 换行符。BufferedWriter 提供了 newLine方法写入一个行分隔符。 /e:javatest8TestBufferedStream.java 37.TransformIO 包括 OutputStreamWriter 与 InputStreamReader 意思是把字节型 的流转化为字符型的流。方法与前面类似。补充 FileOutputStream 的构造方法 FileOutputStream(String str ,true )的意思是在 打开的文件追加内容 而不是覆盖。OutputStreamWriter 在 API文 档中没有找到可以直接写的方法 void write(String str)但是 可以这样用。/e:javatest8TestOutputWriter.java InputStreamReader InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); System.in本身就是 FileStream类型的。这是写了两个处理流, System.in的意思是标准的输入,在命令行中输入内容。 /e:javatest8TestInputReader.java 38.DataIO ByteArrayOutputStream baos = new ByteArrayOutputStream(); 有两个作用一是在内存中分配字节数组,二是将 OutputStream的管 道接到字节数组中。 ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray(); ByteArrayInputStream的构造方法传的参数一定是字节数组。 baos.toByteArray(),就是通过管道接口转化的字节数组。另外字 节数组的遵循队列原则 先进先读 直接调用 writeDouble ,readDouble 方法就可以实现。 /e:javatest8TestDataIO.java 要是发送一个 long类型的数,需要 ByteArrayOutoutStream 和 DataOutputStream 包装 转化 同时服务器也要 ByteArrayInputStream 与 DataInputStream 在网络游戏中发送位置信息用的比较多。 39.PrintStream FileOutputStream fos = new FileOutputStream(“e:java123.txt“,true); PrintStream ps = new PrintStream(fos); System.setOut(ps); /把命令行要显示的东西直接通过 管道与文件链接,写进文件。 /e:javatest8TestPrintStream.java BufferedReader br = new BufferedReader(new InputStreamReader(System.in);一定这样写 因为 BufferedReader 的构造方法传的参数是 Reader型的,所以要用 InputStreamReader过渡一下,System.in 是 InputStream类的。此 例子是为了说明日志的作用 ,通过文件记录操作,并形成可以查阅 的文档。 40.ObjectIO ObjectOutputStream 与 ObjectInputStream 是抽象类 ObjectOutput与 ObjectInput的实例化,传的参数一定是 OutputStream与 InputStram 作用是把类序列化 存盘。把整个类的 内存全部存盘,foo.writeObject(a);/foo 是 ObjectOutputStream,直接将管道接到文件上的。a 是类的对象。 读取的时候 T b = (T)ois.readObject(); /readObject 返回的 是 Object类 要强制转化 ois 是 ObjectInputStream。 transient boolean c = true; /transient 关键字 是修饰的 将不被参与序列化 保持原来的默认值。 public static void main(String args)throws Exception /异常可直接抛出 不作处理 /e:javatest8TestObject.java 将要被序列化的类要继承 Serializable接口,这个接口没有方法, 只是用于标记这个类可以被序列化。class T implements Serializable Thread: 41.启动线程 第一种方法:实现 Runnable 接口 emplements Runnable 重写 public void run()方法;在主线程中,new 一个 thread 对象,Thread a =new Thread (参数是 emplements Runnable 的类的对象);然后 a.start();启动线程。 第二种方法:继承 Thread类,extends Thread 重写 public void run()方法,在主线程中,用继承 extends Thread的类 new一个对 象,调用 start()方法即可。 在第一种方法的时候直接调用 run的方法是不可以的,这样不是多 线程,而是方法调用。 两种方法的选取 ,继承接口第一种比较灵活,因为继承 Thread类 不能再继承了,所以第一种更加好。 /e:javatest9TestThread1.java 42.线程控制基本方法: sleep 是 Thread的静态法方法,传的参数是毫秒,在那个线程中, 那个线程就进入睡眠状态。可以如是调用 Thread.sleep(1000)。会 抛出 InterruptedException.在调用重写方法的时候要是想对异常 不作处理想直接抛出,该方法不能抛出与该方法不同的异常。调用 interrupt方法可以打断线程。 /e:javatest9TestSleep.java join方法是合并线程就是把单独运行的线程合并,只执行一个线程 执行完之后再运行另一个,其本质类似于方法的调用,离开现场, 保护现场,回复现场。在一个时间点全部执行一个线程,执行完就 返回到那个点 ,继续向下执行,就失去多线程的意义。 /e:javatest9TestJoin.java yield 是让出线程给别人执行,不会抛出异常。到设定的时间点哪 怕只执行一点点也会腾出空间给下一个线程执行。 /e:javatest9TestYield.java 优先级设置 用过 Thread类的方法 setPriority();优先级分为 10 等级,默认为 5,优先级越高获得执行的时间越长。 /e:javatest9TestPriority.java 43.线程同步: public synchronized void add(String s) /synchronized (this) num+; try Thread.sleep(1); catch(InterruptedException e) System.out.println(s+“ is “+num+“ timer“); / /两种方式都可以自锁 目的是只允许一个线程在运行 synchronized 是关键字 自锁的意思。即是同一个资源在同一时间 只能被一个线程访问,防止错误,比如银行系统扣费。 /e:javatest9TestSync.java 对同一个资源加锁,对其所有访问此资源的所有方法都要加锁,所 谓的同步,要仔细考虑。 Socket: 44. public static void main(String args)throws Exception ServerSocket ss = new ServerSocket(6666); /从 1024 之后的到 65556的端口自己可以随便写,之前的被系 统征用。6666 代表端口号 ServerSocket是服务器端 while(true) Socket s = ss.accept();/返回值是 Socket,此时表示已 经连接成功。 DataInputStream dis = new DataInputStream (s.getInputStream();/可以与管道融合,调用流的特别方法 System.out.println(“a client connet!“); System.out.println(dis.readUTF(); s.close(); /流与客户端都要关闭 dis.close(); /e:/java/socket/TCPServer.java /e:/java/socket/TCPClient.java /服务器用于接收信息 显示 所以是 InputStream在客户端是 OutptStream Socket s = new Socket(“127.0.0.1“,6666); OutputStream os = s.getOutputStream(); DataOutputStream dos = new DataOutputStream(os); ServerSocket 与 Socket都是有 InputStream OutputStream 45.UDP: 这是相当于服务器接收端: byte buf = new byte1024; DatagramPacket dp = new DatagramPacket(buf,buf.length); DatagramSocket ds = new DatagramSocket(5678); while(true) ds.receive(dp); System.out.println(new String(buf,0,dp.getLength(); 先定义字节数组用于存储接受的数据,DatagramPacket 数据包 DatagramSocket 构造方法有很多,5678 是 UDP的端口, ds.receive(dp);是阻塞式的,会一直等在那里知道有数据传输, dp.getLength()并不一定是 1024 只是接受数据的多少。 这是相当于客户端: byte buf = new String(“Hello World“).getBytes(); DatagramPacket dp = new DatagramPacket(buf,buf.length,new InetSocketAddress(“127.0.0.1“,5678); DatagramSocket ds = new DatagramSocket(9999); ds.send(dp); ds.close(); new String (“ ”).getBytes() 方法把 String 转成字节数 组。 DatagramPacket dp = new DatagramPacket(buf,buf.length,new InetSocketAddress(“127.0.0.1“,5678); 这是用于发送数据的数据包,构造方法不同,最后一个是客户端自 己用于发送接受的端口 区别于 TCP. /d:/Android/workspace/Socket/UDPServer.java 此时水平间距 20 竖直间距 40. BorderLayout:是 F

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论