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

下载本文档

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

文档简介

Java学习笔记学习Java首先要配置环境变量,在电脑属性的高级中,点击环境变量,classpath中有一英文句号“.”后跟一个分号,表示当前路径的意思。由第一个程序Helloworld为例说明Java的基本运行代码:publicclassHelloWorld{publicstaticvoidmain(Stringargs[]){System.out.println("Hello,World!");}}在Java中只能允许有一个公共类,此区别于C++。还有Java的写作风格与C和C++有很大区别。下面细谈Java的基本语法,与其他语言类似,Java每一条语句都以“;”结束。shortbytechar之间不会自动转换,他们运算时首先转换为int然后进行运算;boolean不会进行转换;如:byteb1;byteb2;byteb3=byte(b1+b2);b1+b2运算后是int类型,可以bytea=1;//可以把数值直接赋值不超范围,(-128~127)floatf1=;longl1=300000000L;f和L一定加上;System.out.println();//输出后换行System.out.print();//输出后不换行&&和&的区别:表达式1&&表达式2只要表达式1错误,后不再计算,表达式1&表达式2就算表达式1错误表达式2也会计算。+既可以作为加号,也可以作为连接符,即左右都是字符串,当有一个是字符串,系统默认把另一个转化为字符串再处理。例如:System.out.println(“c=”+c);打印时,无论任何类型,都先转换为字符型,再进行打印。聚合关系,就是包含关系,实现关系就像虚基类,在派生类中实现。定义成员变量可以初始化,若不则自动初始化(可以直接在成员变量的定义时初始化);但局部变量一定要自己初始化,boolean类型默认为false,其他默认为0;在main中调用函数时,只要定义了构造函数并且初始化,就一定要把实参的值写到函数里,不能少参数。因为所有数值定义后都有默认值,所以一定要初始化如:intx;x默认为0;但是如果都不写初始值,调用函数可以不用参数。String关键字是字符串定义,不是字符如:(Stringname=“fgsdhj”//也不用写name[]);必须使用new来创建对象静态数据成员static:在类体(Car)中定义的时候privatestaticintsid=0;……在以后的publicstaticvoidmain()中可以通过Car.sid;或者Carmm; mm.sid;访问import与package package位于程序开始如packagecom.bjsxt.java140;并把生成相应的类放到相应的子目录下即新建文件<在原来类的目录下新建>com\\bjsxt\\java140,把类的.class文件放在该目录下,就是打包了,在jdk1.5以后类的.java文件可能也会影响,所以把.java删掉。在以后的类中调用时可以com.bjsxt.java140.类名=new类名();或者用引入:importcom.bjsxt.java140.类名;或者importcom.bjsxt.java140.*<包括该目录下所有类>在要打包的上一层文件目录E:\java\test2\jar–就能把test2目录下所有文件打包成.jar文件即windows下的压缩包。继承权限:用关键字extends.有privateprotecteddefault<包权限>public 而private继承继承之后也没有使用权,只有在定义private的类中才可以使用;函数重写必须遵循函数名一样,参数类型,返回类型,也必须一致,并在重写的函数体中增加相应的代码,不是重载;重写的函数不能比被重写的函数有更严格的访问权限,至少一样。子类的构造方法中必须对基类的构造函数声明,在子类的构造函数中首先写super();里面加参数,意思是调用基类的构造函数,若不写,系统默认调用基类无参数的构造函数,若基类中没有无参数的构造函数,则编译出错;在构造函数中,前面可以加public也可以不加;在类与类之间“;”可加可不加,编译不会出错。在构造函数的入口参数设置是一定注意,与上面的初始化保持一致就好。object类的定义,了解一下,其中有一个方法,toString方法是返回一个说明该类的说明,在API文档中查找,建议重写。关于object中,equals方法返回值是boolean,可以重写,publicbooleanequals(objectobj){}内容自定义;在main()中:System.out.println(c==a);或者System.out.println(a.equals(c));一样用;字符串比较也已也一样,且不为空才行。对象类型转换,如Animala=newAnimal();Catc=newCat();System.out.println(cinstanceofa)//输出true;也可以这样a=newCat();//基类强制转化为子类,可以,只是a不能访问Cat类中新定义的类型。可以这样访问新定义的类型。 Catd=(Cat)a;//用强制类型转化基类为子类,然后转化后一样用。//e:\java\test2\TestTeacher\关于多态,一定要有继承,要有重写,要有父类指向子类的引用。动态联编的实现是为了以后程序功能的扩展,而不改变源代码.//e:\java\teat2\Testdongtai\抽象类:若一个类中含有抽象和方法,则一定要把给类定义为抽象类,抽象abstract类似于C++中的纯虚函数。 Publicabstractvoidenjoy();就没有{}内部代码了。而且子类中的重写父类的那个方法一定要有实现代码,否则报错。也可以再次把该函数声明为抽象类,这样编译不会出错。但是就不能用该子类定义新对象,因为抽象类是残缺的。final关键字中final的变量不能被改变,final的方法不能被重写,final的类不能被继承。PublicfinalclassString(){}//写法如下finalinti=9;interface接口设置,即为C++中的多重继承只是接口继承的时候不用关键字extends而用implements可以用implementsA,B,C,D{}这是与extends不同地方。在子类中分别实现积累的代码,原基类就像抽象类一样,其函数的设置在子类中实现的。在本例中还涉及强制类型转换,可见性与不可见性的问题,还涉及动态联编。//eJava中关于异常处理机制,trythrowcatch 其中经常使用 catch(ArithmeticExceptione){ System.out.println("系统正在维护,请与管理员联系"); e.printStackTrace();//其中e就像一个类的对象一样使用,e.printStackTrace();是打印出错的堆栈信息,以便修正。ArithmeticException和printStackTrace()是系统自己定义的。20.finally{}是一定执行的语句,catch语句之后自动停止,以后不再执行。对所有异常处理,可以直接抛出throwsException{} 不管是IoException或是NotFoundFileException……;不想处理就继续抛出。方法重写必须与原来的抛出的异常一致,不得是别的。但是不抛异常没有关系。21.数组定义,也是引用,int[]s,或是ints[];只是中括号内不能有数字,区别于c++;如: int[]a;//声明数组名字a=newint[5];//动态分配空间 在动态分布空间之后, a.length自动记录数组的长度,以后可以直接调用。22.ipconfig在命令行可以显示ip地址,ipconfig-all可以显示更详细的信息;23.在main函数中,(String[]args)的作用是把在命令行执行时加的参数自动保存在agrs数组里面; 补充:在基本数据类型里面,可以通过double()把一个字符类型的变量转化为double类型。其他类型类似,比如intfloatbyte。。。。。。直接把’3’24.函数返回值类型可以是数组类型,publicstaticDate[]bubblesort(Datea){……returna;}这样也是可以实现的。25.二位数组定义,初始化时,inta[3][2]={{1,2},{2,3},{23,1}};是错误的,不能写3,java自动检查长度。26.关于string,有很多种方法,就关于字符串的种种处理,大小写处理,空格处理(trim),截取字符,把字符分割成子串(split),查找API文档。Stringbuffer是可变的字符序列,与不可变的string相比,更加具有优势,方法与其类似,在执行效率上比较高。27.d[i][j]=Double.valueOf(sSecond[j]);把字符串转化为double类型的数据,调用double的方法,在前面加上Double.一定不要少。包括二维数组的定义使用,把两维分开来写。//E:/java/test6/ArrayParser.java28.Math类java.lang.math与数学相关的一些方法,File与文件相关的方法,java.io.*;文件的创建,File(\o"classinjava.lang"Stringparent,\o"classinjava.lang"Stringchild)parent代表路径,而child是要创建的文件名称。f.getParentFile().mkdirs();//只是把对应的目录创建成功文件并没有生成。//e29.枚举类型规定只能取规定的值,其余的不允许取值,在游戏开发时多用,如:publicenummycolour{red,green,blue};mycolourm=mycolour.red;访问时类似于静态成员变量的访问。可以提前发现错误,在编译时发现。容器:30.List与SetMap:(都是接口)Set的数据对象是没有顺序不可重复的,即重复的元素不会被加入集合。vaList的数据对象是有顺序可以重复的,自增了一些方法,见API。Map是把数据成对成对地装入容器。Put方法是object的原因是当放入的key已经存在时,原来的value被替换掉,作为返回值返回。Get方法返回的是value.31.iterator是collection的一个接口,其作用是容器的遍历,其方法有hasNext,next,remove具体用法是Iteratori=c.iterator();//c为Collectionc=newHashSet();然后i就可以调用Iterator的方法了。Iterator的remove方法是迭代过程中删除元素的唯一安全的方法。而不是c.remove。32.Collections类封装了List许多静态的方法。调用的时候,因为是静态的方法,所以直接用类名加方法就行,如Collections.sort(l1);l1为List的容器从低到高排序//e:\java\test7\T33.(补充)privatestaticfinalintone=1;//关键字的顺序关于args在运行java。。。。。。。命令时,在后面加上数字字母。。。就是加在agrs数组中。数组的args的长度args.length没有括号六个基本类型\o"java.lang中的类"Byte,\o"java.lang中的类"Double,\o"java.lang中的类"Float,\o"java.lang中的类"Integer,\o"java.lang中的类"Long,\o"java.lang中的类"ShortInteger是int的包装类其目的是方便各种数据的转换,如intnum=Integer.valueOf(“12”doublenum2=Double.valueOf(“”);//通过基本包装数据类型的valueOf和parseXX实现String转换为XXStringa=String.valueOf(“1234”Stringb=String.valueOf(true);Stringc=newInteger(12).toString();//通过包装类的toString也可以34.泛型写法:Map<String,Integer>m1=newHashMap<String,Integer>();具体使用方法见java文件以后用集合的时候尽量使用泛型//E:\java\test7\TestMap2.java//e:\java\test7\BasicGeneric.java(使用Iterator时使用泛型)IO:35.InputStreamOutputStreamReaderWriter都是抽象类不能直接new也就是实例化,其具体的实类为FileInputStreamFileOutputStreamFileReaderFileWriter,字节流是一个字节一个字节读写字符流可以写汉字(一个字符两个字节)。InputStream方法:OutputStream方法:ReaderWriter类似。<补充:GBK是中文windows默认的字符编码1310是回车符的ASIC码>36.BUffeedrStream:BufferedReaderBufferedWriterBufferedInputStreamBufferedOutputStream提供缓冲区支持父类的mark与reset方法,不太常用mark是标记位置从标记的地方开始读写,reset是重置,即是读写后再次回到标记的位置。BufferedReader提供了readLine方法用于读取一行字符串。在输出readLine的内容的时候用println(),好像readLine不读取换行符。BufferedWriter提供了newLine方法写入一个行分隔符。包括OutputStreamWriter与InputStreamReader意思是把字节型的流转化为字符型的流。方法与前面类似。补充FileOutputStream的构造方法FileOutputStream(Stringstr,true)的意思是在打开的文件追加内容而不是覆盖。OutputStreamWriter在API文档中没有找到可以直接写的方法voidwrite(Stringstr)但是可以这样用InputStreamReader InputStreamReaderisr=newInputStreamReader(System.in);本身就是FileStream类型的。这是写了两个处理流,的意思是标准的输入,在命令行中输入内容。38.DataIO ByteArrayOutputStreambaos=newByteArrayOutputStream();有两个作用一是在内存中分配字节数组,二是将OutputStream的管道接到字节数组中。ByteArrayInputStreambais=newByteArrayInputStream(baos.toByteArray());ByteArrayInputStream的构造方法传的参数一定是字节数组。baos.toByteArray(),就是通过管道接口转化的字节数组。另外字节数组的遵循队列原则先进先读直接调用writeDouble,readDouble方法就可以实现。要是发送一个long类型的数,需要ByteArrayOutoutStream和DataOutputStream包装转化同时服务器也要ByteArrayInputStream与DataInputStream在网络游戏中发送位置信息用的比较多。FileOutputStreamfos=newFileOutputStream("e:\\java\\123.txt",true); PrintStreamps=newPrintStream(fos); System.setOut(ps);//把命令行要显示的东西直接通过管道与文件链接,写进文件。BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));一定这样写因为BufferedReader的构造方法传的参数是Reader型的,所以要用InputStreamReader过渡一下,是InputStream类的。此例子是为了说明日志的作用,通过文件记录操作,并形成可以查阅的文档。ObjectOutputStream与ObjectInputStream是抽象类ObjectOutput与ObjectInput的实例化,传的参数一定是OutputStream与InputStram作用是把类序列化存盘。把整个类的内存全部存盘,foo.writeObject(a);//foo是ObjectOutputStream,直接将管道接到文件上的。a是类的对象。读取的时候Tb=(T)ois.readObject();//readObject返回的是Object类要强制转化ois是ObjectInputStream。 transientbooleanc=true;//transient关键字是修饰的将不被参与序列化保持原来的默认值。<补充> publicstaticvoidmain(String[]args)throwsException{}//异常可直接抛出不作处理将要被序列化的类要继承Serializable接口,这个接口没有方法,只是用于标记这个类可以被序列化。classTimplementsSerializable{}Thread:41.启动线程第一种方法:实现Runnable接口emplementsRunnable{重写publicvoidrun()方法};在主线程中,new一个thread对象,Threada=newThread(参数是emplementsRunnable的类的对象);然后a.start();启动线程。第二种方法:继承Thread类,extendsThread{重写publicvoidrun()方法},在主线程中,用继承extendsThread的类new一个对象,调用start()方法即可。在第一种方法的时候直接调用run的方法是不可以的,这样不是多线程,而是方法调用。两种方法的选取,继承接口第一种比较灵活,因为继承Thread类不能再继承了,所以第一种更加好。42.线程控制基本方法:sleep是Thread的静态法方法,传的参数是毫秒,在那个线程中,那个线程就进入睡眠状态。可以如是调用Thread.sleep(1000)。会抛出InterruptedException.在调用重写方法的时候要是想对异常不作处理想直接抛出,该方法不能抛出与该方法不同的异常。调用interrupt方法可以打断线程。join方法是合并线程就是把单独运行的线程合并,只执行一个线程执行完之后再运行另一个,其本质类似于方法的调用,离开现场,保护现场,回复现场。在一个时间点全部执行一个线程,执行完就返回到那个点,继续向下执行,就失去多线程的意义。yield是让出线程给别人执行,不会抛出异常。到设定的时间点哪怕只执行一点点也会腾出空间给下一个线程执行。优先级设置用过Thread类的方法setPriority();优先级分为10等级,默认为5,优先级越高获得执行的时间越长。43.线程同步:publicsynchronizedvoidadd(Strings){ //synchronized(this){ num++; try{ Thread.sleep(1); }catch(InterruptedExceptione){} System.out.println(s+"is"+num+"timer"); //}//两种方式都可以自锁目的是只允许一个线程在运行synchronized是关键字自锁的意思。即是同一个资源在同一时间只能被一个线程访问,防止错误,比如银行系统扣费。对同一个资源加锁,对其所有访问此资源的所有方法都要加锁,所谓的同步,要仔细考虑。Socket:44.publicstaticvoidmain(String[]args)throwsException{ ServerSocketss=newServerSocket(6666); //从1024之后的到65556的端口自己可以随便写,之前的被系统征用。6666代表端口号 ServerSocket是服务器端 while(true){ Sockets=ss.accept();//返回值是Socket,此时表示已经连接成功。 DataInputStreamdis=newDataInputStream(s.getInputStream());//可以与管道融合,调用流的特别方法 System.out.println("aclientconnet!"); System.out.println(dis.readUTF()); s.close();//流与客户端都要关闭 dis.close();//服务器用于接收信息显示所以是InputStream在客户端是OutptStreamSockets=newSocket("127.0.0.1",6666); OutputStreamos=s.getOutputStream(); DataOutputStreamdos=newDataOutputStream(os); ServerSocket与Socket都是有InputStreamOutputStream45.UDP:这是相当于服务器接收端:byte[]buf=newbyte[1024]; DatagramPacketdp=newDatagramPacket(buf,buf.length); DatagramSocketds=newDatagramSocket(5678); while(true){ ds.receive(dp); System.out.println(newString(buf,0,dp.getLength())); 先定义字节数组用于存储接受的数据,DatagramPacket数据包DatagramSocket构造方法有很多,5678是UDP的端口,ds.receive(dp);是阻塞式的,会一直等在那里知道有数据传输,dp.getLength()并不一定是1024只是接受数据的多少。这是相当于客户端:byte[]buf=newString("HelloWorld").getBytes(); DatagramPacketdp=newDatagramPacket(buf,buf.length,newInetSocketAddress("127.0.0.1",5678)); DatagramSocketds=newDatagramSocket(9999); ds.send(dp); ds.close();newString(“……”).getBytes()方法把String转成字节数组。DatagramPacketdp=newDatagramPacket(buf,buf.length,newInetSocketAddress("127.0.0.1",5678));这是用于发送数据的数据包,构造方法不同,最后一个是客户端自己用于发送接受的端口区别于TCP.Panel与Frame的关系是Frame可以直接显示出来而Panel只能添加到Frame才能显示Dialog是打开程序弹出的窗口与厂家联系之类的。计算机的三原色是红绿蓝newcolor(inta,intb,intc);Abc最大是255Frame设置坐标是相对于整个窗口,而Panel显示是相对于装她的Frame。布局管理器:FlowLayout默认对齐方式是居中,水平竖直默认间距是5,是Panel的默认管理器。FlowLayoutl=newFlowLayout(FlowLayout.CENTER,20,40);此时水平间距20竖直间距40.BorderLayout:是Frame的默认管理器,分为东西南北中,5个部分。GridLayout是表格划分NewGridLayout(3,2);3行2列的作用。TextField:

温馨提示

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

评论

0/150

提交评论