Java学习笔记马士兵老师视频教学的笔记.docx

上传人:b****4 文档编号:6169402 上传时间:2023-05-09 格式:DOCX 页数:19 大小:955.17KB
下载 相关 举报
Java学习笔记马士兵老师视频教学的笔记.docx_第1页
第1页 / 共19页
Java学习笔记马士兵老师视频教学的笔记.docx_第2页
第2页 / 共19页
Java学习笔记马士兵老师视频教学的笔记.docx_第3页
第3页 / 共19页
Java学习笔记马士兵老师视频教学的笔记.docx_第4页
第4页 / 共19页
Java学习笔记马士兵老师视频教学的笔记.docx_第5页
第5页 / 共19页
Java学习笔记马士兵老师视频教学的笔记.docx_第6页
第6页 / 共19页
Java学习笔记马士兵老师视频教学的笔记.docx_第7页
第7页 / 共19页
Java学习笔记马士兵老师视频教学的笔记.docx_第8页
第8页 / 共19页
Java学习笔记马士兵老师视频教学的笔记.docx_第9页
第9页 / 共19页
Java学习笔记马士兵老师视频教学的笔记.docx_第10页
第10页 / 共19页
Java学习笔记马士兵老师视频教学的笔记.docx_第11页
第11页 / 共19页
Java学习笔记马士兵老师视频教学的笔记.docx_第12页
第12页 / 共19页
Java学习笔记马士兵老师视频教学的笔记.docx_第13页
第13页 / 共19页
Java学习笔记马士兵老师视频教学的笔记.docx_第14页
第14页 / 共19页
Java学习笔记马士兵老师视频教学的笔记.docx_第15页
第15页 / 共19页
Java学习笔记马士兵老师视频教学的笔记.docx_第16页
第16页 / 共19页
Java学习笔记马士兵老师视频教学的笔记.docx_第17页
第17页 / 共19页
Java学习笔记马士兵老师视频教学的笔记.docx_第18页
第18页 / 共19页
Java学习笔记马士兵老师视频教学的笔记.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Java学习笔记马士兵老师视频教学的笔记.docx

《Java学习笔记马士兵老师视频教学的笔记.docx》由会员分享,可在线阅读,更多相关《Java学习笔记马士兵老师视频教学的笔记.docx(19页珍藏版)》请在冰点文库上搜索。

Java学习笔记马士兵老师视频教学的笔记.docx

Java学习笔记马士兵老师视频教学的笔记

Java学习笔记

学习Java首先要配置环境变量,在电脑属性的高级中,点击环境变量,classpath中有一英文句号“.”后跟一个分号,表示当前路径的意思。

由第一个程序Helloworld为例说明Java的基本运行代码:

publicclassHelloWorld{

  publicstaticvoidmain(Stringargs[]){

  System.out.println("Hello,World!

");

  }

}

在Java中只能允许有一个公共类,此区别于C++。

还有Java的写作风格与C和C++有很大区别。

下面细谈Java的基本语法,与其他语言类似,Java每一条语句都以“;”结束。

1.shortbytechar之间不会自动转换,他们运算时首先转换为int然后进行运算;boolean不会进行转换;如:

byteb1;byteb2;

byteb3=byte(b1+b2);b1+b2运算后是int类型,可以

bytea=1;//可以把数值直接赋值不超范围,(-128~127)

floatf1=1.234f;longl1=300000000L;f和L一定加上;

2.System.out.println();//输出后换行

System.out.print();//输出后不换行

&&和&的区别:

表达式1&&表达式2只要表达式1错误,后不再计算,表达式1&表达式2就算表达式1错误表达式2也会计算。

+既可以作为加号,也可以作为连接符,即左右都是字符串,当有一个是字符串,系统默认把另一个转化为字符串再处理。

例如:

System.out.println(“c=”+c);打印时,无论任何类型,都先转换为字符型,再进行打印。

3.聚合关系,就是包含关系,实现关系就像虚基类,在派生类中实现。

4.定义成员变量可以初始化,若不则自动初始化(可以直接在成员变量的定义时初始化);但局部变量一定要自己初始化,boolean类型默认为false,其他默认为0;在main中调用函数时,只要定义了构造函数并且初始化,就一定要把实参的值写到函数里,不能少参数。

因为所有数值定义后都有默认值,所以一定要初始化如:

intx;x默认为0;但是如果都不写初始值,调用函数可以不用参数。

5.String关键字是字符串定义,不是字符如:

(Stringname=“fgsdhj”//也不用写name[]);必须使用new来创建对象

6.静态数据成员static:

在类体(Car)中定义的时候privatestaticintsid=0;……在以后的publicstaticvoidmain()中可以通过Car.sid;或者Carmm;mm.sid;访问

7.import与packagepackage位于程序开始如packagecom.bjsxt.java140;并把生成相应的类放到相应的子目录下即新建文件<在原来类的目录下新建>com\\bjsxt\\java140,把类的.class文件放在该目录下,就是打包了,在jdk1.5以后类的.java文件可能也会影响,所以把.java删掉。

在以后的类中调用时可以com.bjsxt.java140.类名=new类名();或者用引入:

importcom.bjsxt.java140.类名;或者importcom.bjsxt.java140.*<包括该目录下所有类>

8.在要打包的上一层文件目录E:

\java\test2\jar–cvftest2.jar就能把test2目录下所有文件打包成.jar文件即windows下的压缩包。

9.继承权限:

用关键字extends.有privateprotecteddefault<包权限>public而private继承继承之后也没有使用权,只有在定义private的类中才可以使用;

10.函数重写必须遵循函数名一样,参数类型,返回类型,也必须一致,并在重写的函数体中增加相应的代码,不是重载;重写的函数不能比被重写的函数有更严格的访问权限,至少一样。

11.子类的构造方法中必须对基类的构造函数声明,在子类的构造函数中首先写super();里面加参数,意思是调用基类的构造函数,若不写,系统默认调用基类无参数的构造函数,若基类中没有无参数的构造函数,则编译出错;

12.在构造函数中,前面可以加public也可以不加;在类与类之间“;”可加可不加,编译不会出错。

在构造函数的入口参数设置是一定注意,与上面的初始化保持一致就好。

13.object类的定义,了解一下,其中有一个方法,toString方法是返回一个说明该类的说明,在API文档中查找,建议重写。

关于object中,equals方法返回值是boolean,可以重写,publicbooleanequals(objectobj){}内容自定义;在main()中:

System.out.println(c==a);或者System.out.println(a.equals(c));一样用;字符串比较也一样,且不为空才行。

14.对象类型转换,如Animala=newAnimal();Catc=newCat();System.out.println(cinstanceofa)//输出true;也可以这样a=newCat();//基类强制转化为子类,可以,只是a不能访问Cat类中新定义的类型。

可以这样访问新定义的类型。

Catd=(Cat)a;//用强制类型转化基类为子类,然后转化后一样用。

//e:

\java\test2\TestTeacher\TestTeacher.java

15.关于多态,一定要有继承,要有重写,要有父类指向子类的引用。

动态联编的实现是为了以后程序功能的扩展,而不改变源代码.//e:

\java\teat2\Testdongtai\TestLady.java

16.抽象类:

若一个类中含有抽象和方法,则一定要把给类定义为抽象类,抽象abstract类似于C++中的纯虚函数。

Publicabstractvoidenjoy();就没有{}内部代码了。

而且子类中的重写父类的那个方法一定要有实现代码,否则报错。

也可以再次把该函数声明为抽象类,这样编译不会出错。

但是就不能用该子类定义新对象,因为抽象类是残缺的。

17.final关键字中final的变量不能被改变,final的方法不能被重写,final的类不能被继承。

PublicfinalclassString(){}//写法如下finalinti=9;

18.interface接口设置,即为C++中的多重继承只是接口继承的时候不用关键字extends而用implements可以用implementsA,B,C,D{}这是与extends不同地方。

在子类中分别实现积累的代码,原基类就像抽象类一样,其函数的设置在子类中实现的。

在本例中还涉及强制类型转换,可见性与不可见性的问题,还涉及动态联编。

从本质上讲接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。

//e:

\java\test2\Testjiekou\TestInterface.java

19.Java中关于异常处理机制,trythrowcatch

其中经常使用catch(ArithmeticExceptione){

System.out.println("系统正在维护,请与管理员联系");

e.printStackTrace();//其中e就像一个类的对象一样使用,e.printStackTrace();是打印出错的堆栈信息,以便修正。

ArithmeticException和printStackTrace()是系统自己定义的。

20.finally{}是一定执行的语句,catch语句之后自动停止,以后不再执行。

对所有异常处理,可以直接抛出throwsException{}不管是IoException或是NotFoundFileException……;不想处理就继续抛出。

方法重写必须与原来的抛出的异常一致,不得是别的。

但是不抛异常没有关系。

Finally语句进行资源清除工作。

21.数组定义,也是引用,int[]s,或是ints[];只是中括号内不能有数字,区别于c++;如:

int[]a;//声明数组名字数组声明时不能指明长度

a=newint[5];//动态分配空间在动态分布空间之后,a.length自动记录数组的长度,以后可以直接调用。

22.ipconfig在命令行可以显示ip地址,ipconfig-all可以显示更详细的信息;

23.在main函数中,(String[]args)的作用是把在命令行执行时加的参数自动保存在agrs数组里面;补充:

在基本数据类型里面,可以通过double.parsedouble()把一个字符类型的变量转化为double类型。

其他类型类似,比如intfloatbyte。

直接把’3’转化为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.java

28.Math类java.lang.math与数学相关的一些方法,File与文件相关的方法,java.io.*;

文件的创建,File(Stringparent,Stringchild)parent代表路径,而child是要创建的文件名称。

f.getParentFile().mkdirs();//只是把对应的目录创建成功文件并没有生成。

//e:

/java/test6/TestFile.java

29.枚举类型规定只能取规定的值,其余的不允许取值,在游戏开发时多用,如:

publicenummycolour{red,green,blue};

mycolourm=mycolour.red;访问时类似于静态成员变量的访问。

可以提前发现错误,在编译时发现。

容器:

30.List

与SetMap:

(都是接口)

Set的数据对象是没有顺序不可重复的,即重复的元素不会被加入集合。

//e:

\java\test7\TestSet.java

List的数据对象是有顺序可以重复的,自增了一些方法,见API。

Map是把数据成对成对地装入容器。

Put方法是object的原因是当放入的key已经存在时,原来的value被替换掉,作为返回值返回。

Get方法返回的是value.

//e:

\java\tets7\TestMap.java

31.iterator是collection的一个接口,其作用是容器的遍历,其方法有hasNext,next,remove具体用法是

Iteratori=c.iterator();//c为Collectionc=newHashSet();

然后i就可以调用Iterator的方法了。

Iterator的remove方法是迭代过程中删除元素的唯一安全的方法。

而不是c.remove。

//e:

\java\test7\collection.java

32.Collections类封装了List许多静态的方法。

调用的时候,因为是静态的方法,所以直接用类名加方法就行,如Collections.sort(l1);l1为List的容器从低到高排序

//e:

\java\test7\TestList.java

33.(补充)

privatestaticfinalintone=1;//关键字的顺序

关于args在运行java。

命令时,在后面加上数字字母。

就是加在agrs数组中。

数组的args的长度args.length没有括号

六个基本类型Byte,Double,Float,Integer,Long,Short

Integer是int的包装类其目的是方便各种数据的转换,如

intnum=Integer.valueOf(“12”);

doublenum2=Double.valueOf(“12.2”);

//通过基本包装数据类型的valueOf和parseXX实现String转换为XX

Stringa=String.valueOf(“1234”);

Stringb=String.valueOf(true);

Stringc=newInteger(12).toString();

//通过包装类的toString也可以

34.泛型写法:

Mapm1=newHashMap();具体使用方法见java文件以后用集合的时候尽量使用泛型

//E:

\java\test7\TestMap2.java

//e:

\java\test7\BasicGeneric.java(使用Iterator时使用泛型)

IO:

35.

InputStreamOutputStreamReaderWriter都是抽象类不能直接new也就是实例化,其具体的实类为FileInputStreamFileOutputStreamFileReaderFileWriter,字节流是一个字节一个字节读写字符流可以写汉字(一个字符两个字节)。

InputStream方法:

//e:

\\java\\test8\\TestFileInputStream.java

OutputStream方法:

ReaderWriter类似。

//E:

\\java\\test8\\TestFileOutputStream.java

<补充:

GBK是中文windows默认的字符编码1310是回车符的ASIC码>

36.BUffeedrStream:

BufferedReaderBufferedWriterBufferedInputStream

BufferedOutputStream提供缓冲区

支持父类的mark与reset方法,不太常用mark是标记位置从标记的地方开始读写,reset是重置,即是读写后再次回到标记的位置。

BufferedReader提供了readLine方法用于读取一行字符串。

在输出readLine的内容的时候用println(),好像readLine不读取换行符。

BufferedWriter提供了newLine方法写入一个行分隔符。

//e:

\\java\\test8\\TestBufferedStream.java

37.TransformIO

包括OutputStreamWriter与InputStreamReader意思是把字节型的流转化为字符型的流。

方法与前面类似。

补充FileOutputStream的构造方法FileOutputStream(Stringstr,true)的意思是在打开的文件追加内容而不是覆盖。

OutputStreamWriter在API文档中没有找到可以直接写的方法voidwrite(Stringstr)但是可以这样用。

//e:

\\java\\test8\\TestOutputWriter.java

InputStreamReader

InputStreamReaderisr=newInputStreamReader(System.in);

BufferedReaderbr=newBufferedReader(isr);System.in本身就是FileStream类型的。

这是写了两个处理流,System.in的意思是标准的输入,在命令行中输入内容。

//e:

\\java\\test8\\TestInputReader.java

38.DataIO

ByteArrayOutputStreambaos=newByteArrayOutputStream();

有两个作用一是在内存中分配字节数组,二是将OutputStream的管道接到字节数组中。

ByteArrayInputStreambais=newByteArrayInputStream(baos.toByteArray());

ByteArrayInputStream的构造方法传的参数一定是字节数组。

baos.toByteArray(),就是通过管道接口转化的字节数组。

另外字节数组的遵循队列原则先进先读直接调用writeDouble,readDouble方法就可以实现。

//e:

\\java\\test8\\TestDataIO.java

要是发送一个long类型的数,需要ByteArrayOutoutStream和DataOutputStream包装转化同时服务器也要ByteArrayInputStream与DataInputStream

在网络游戏中发送位置信息用的比较多。

39.PrintStream

FileOutputStreamfos=newFileOutputStream("e:

\\java\\123.txt",true);

PrintStreamps=newPrintStream(fos);

System.setOut(ps);//把命令行要显示的东西直接通过管道与文件链接,写进文件。

//e:

\\java\\test8\\TestPrintStream.java

BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));一定这样写因为BufferedReader的构造方法传的参数是Reader型的,所以要用InputStreamReader过渡一下,System.in是InputStream类的。

此例子是为了说明日志的作用,通过文件记录操作,并形成可以查阅的文档。

 

40.ObjectIO

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{}//异常可直接抛出不作处理

//e:

\\java\\test8\\TestObject.java

将要被序列化的类要继承Serializable接口,这个接口没有方法,只是用于标记这个类可以被序列化。

classTimplementsSerializable{}

Thread:

41.启动线程第一种方法:

实现Runnable接口emplementsRunnable{重写publicvoidrun()方法};在主线程中,new一个thread对象,Threada=newThread(参数是emplementsRunnable的类的对象);然后a.start();启动线程。

第二种方法:

继承Thread类,extendsThread{重写publicvoidrun()方法},在主线程中,用继承extendsThread的类new一个对象,调用start()方法即可。

在第一种方法的时候直接调用run的方法是不可以的,这样不是多线程,而是方法调用。

两种方法的选取,继承接口第一种比较灵活,因为继承Thread类不能再继承了,所以第一种更加好。

//e:

\\java\\test9\\TestThread1.java

42.线程控制基本方法:

sleep是Thread的静态法方法,传的参数是毫秒,在那个线程中,那个线程就进入睡眠状态。

可以如是调用Thread.sleep(1000)。

会抛出InterruptedException.在调用重写方法的时候要是想对异常不作处理想直接抛出,该方法不能抛出与该方法不同的异常。

调用interrupt方法可以打断线程。

//e:

\\java\\test9\\TestSleep.java

join方法是合并线程就是把单独运行的线程合并,只执行一个线程执行完之后再运行另一个,其本质类似于方法的调用,离开现场,保护现场,回复现场。

在一个时间点全部执行一个线程,执行完就返回到那个点,继续向下执行,就失去多线程的意义。

//e:

\\java\\test9\\TestJoin.java

yield是让出线程给别人执行,不会抛出异常。

到设定的时间点哪怕只执行一点点也会腾出空间给下一个线程执行。

//e:

\\java\\test9\\TestYield.java

优先级设置用过Thread类的方法setPriority();优先级分为10等级,默认为5,优先级越高获得执行的时间越长。

//e:

\\java\\test9\\TestPriority.java

43.线程同步:

publicsynchronizedvoidadd(Strings){

//synchronized(this){

num++;

try{

Thread.sleep

(1);

}catch(InterruptedExceptione){}

System.out.println(s+"is"+num+"timer");

//}//两种方式都可以自锁目的是只允许一个线程在运行

synchronized是关键字自锁的意思。

即是同一个资源在同一时间只能被一个线程访问,防止错误,比如银行系统扣费。

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

当前位置:首页 > 工程科技 > 材料科学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2