java学习笔记_第1页
java学习笔记_第2页
java学习笔记_第3页
java学习笔记_第4页
java学习笔记_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、1. JDK2. Path环境变量是操作系统外部命令搜索路径;Classpath环境变量是类文件搜索路径。3. JRE是Java Runtime Environment,即是java运行环境。包括java虚拟机、java平台核心类文件、其他支持文件。JVM,Java Virtual Machine。它是由软件模拟出来的计算机,软件只需编译一次就可以在不同的操作系统上运行。源文件.java file检查错误编译器检查语法错误字节代码.class file,可以在各种虚拟机上运行,对用户启动程序于不同的操作系统有不同的虚拟机IosJVM(3)LinuxJVM(2)WindowsJVM(1)执行同样

2、的class文件,结果相同软件.class 文件JVM由虚拟机翻译成适合当前操作系统的代码操作系统由操作系统交给硬件再去执行4. 字符集的作用,char类型的变量可以存一个汉字(在java中,或者是uincode编码中)。5. 字面量整数字面量为整型(int),小数字面量为双精度浮点型(double)。数值型类型表数范围关系:byte < short < int < long < float < long。6. 面向对象(消除冗余是一种编程方法,是一种思维模式,不是一种编程语言。7. 栈内存和堆内存生成对象:类名 对象名 = new 类名();对象的本体(真正的对

3、象)在堆内存中,对象名(引用)指向堆内存中的本体,在栈内存中开辟一块空间,放对象名;8. 重载的定义:两个或者多个函数在同一个类当中,函数名相同,参数列表不同。9. 构造函数无实参,有实参。10. thisa. 使用this调用成员变量和成员函数,this代表调用当前成员变量或函数的对象;b. 使用this调用构造函数this(参数列表),调用构造函数必须是构造函数中的第一条语句。11. statica.静态变量声明static int i;调用:既可以用类名调用也可以用对象调用;所有的对象所用的静态变量都是同一份,任何一个对象的静态变量得到修改,其他对象的静态变量也会跟着修改。b.静态函数

4、声明 static void 函数名();静态函数也可以用类名来直接来调用;在静态函数当中不能引用非静态的成员变量。c.静态代码块 格式 static 主要作用是为成员变量赋初始值,在装载的时候执行。12. 继承 extends在java中只支持单继承(一个子类只能继承一个父类,不允许多继承)【在c+中一个子类可以继承多个父类】;使用继承是为了减少重复代码。13. 在子类的构造函数当中,必须调用父类的构造函数,不写的话,编译器会加一行代码super(),自己写的话必须是构造函数的第一行代码;若是想自己调用父类的构造函数,在括号里边加上参数就可以。【注意】和this的不同,this是调用本类中的

5、构造函数。原因:消除重复代码14. 函数的复写(override)复写(在两个类中)也被称之为覆盖,重写。【区别】重载(在一个类中,函数的名相同,参数不同)语法特征:a. 在具有父子关系的两个类当中;b. 父类和子类各有一个函数,这两个函数的定义(包括返回值类型,函数名字,参数)完全相同,里面的方法块不一样。15. 使用 super.父类成员函数 可以调用父类的方法 (当在重写写父类的方法时可以用来消除重复)。16. 对象的转型(多态性的体现)向上转型将子类的对象赋值给父类的引用。一个引用能够调用哪些成员(包括变量和函数)取决于这个引用的类型。一个引用的调用的是哪一个方法取决于这个引用所指向的

6、对象。向下转型将父类的对象赋值给子类的引用。过程:先把对象向上转型,在向下转型。例如:Person是父类,Student是子类Student s1 = new Student();Person p = s1;Student s2 = (Student)p;17. 抽象函数只有函数的定义,没有函数体的函数。声明:abstract void fun(); 。18. 抽象类使用abstract定义的类 a. 抽象类不能够生成对象b. 如果一个类中包含抽象函数,那么这个类必须被声明为抽象类c. 如果一个类中没有抽象函数,这个类也可以被声明为抽象类 19. 抽象类不能生成对象,但是却可以拥有构造函数。2

7、0. 为什么要用抽象类?【原因之一】如果一个类的某一个函数,这个函数必须由它的子类来实现,我们无法写出子类通用的一个函数,最好的方法就是把这个函数定义为抽象函数,并且把这个类定义为抽象类。这样就会强制要求在子类继承这个函数的时候对这个抽象函数进行复写(override)。21. 如果一段代码在语义上是有错误的,那么在语法上也应该有错(现在编程理论认为,但实际上可能没实现)。22. 软件包为java类提供了命名空间将类放置到一个包当中,需要使用 package 包名; 编译时需要使用 d 参数,该参数的作用是依照包名生成相应的文件夹。-d 后面是一个目录。例如:javac d . test.ja

8、va ,“ . ”代表当前目录。一个类的全名应该是“包名” + “.” “类名”。23. 包名的命名规范:1.要求所有的字母都小写;2.包名一般情况下,是你的域名倒过来写,例如 à package com.baidu;24. Java当中的访问权限:(体现面向对象的封装性)1.public:可以修饰类、成员变量和成员函数,没有任何限制,在同一个包中,或不同包中的类都可以自由访问,在跨包访问的时候需要public权限,当类是public的时候,类名和文件名必须一致。2.private:可以修饰成员变量和成员函数,只能在本类中使用。3.default:包级别(默认)访问权限,在不写权限修

9、饰符,就是default权限,可以修饰类、成员变量和成员函数,在同一个包中可以自由访问,在不同包中访问就需要public权限。 4.protected:(受保护权限)public > protected > default > private25. Import + 包名;导入包。26. 访问权限与继承如果子类和父类不在同一个包当中,则子类无法继承到父类当中的default权限的成员变量和成员函数(有问题)。子类可以继承到父类当中的default权限的成员变量和成员函数,但是权限不够,无法使用。27. protected权限首先拥有和default权限一样的功能,但是该权限只

10、能修饰成员变量和成员函数,除此之外,protected权限允许跨包的继承,【注意】和public不同,public允许包外的任意访问,但protected只允许子类访问父类protected的成员变量和成员函数。28. 接口定义了接口就是定义了调用对象的标准。接口的基本语法(一):1.使用interface定义2.接口当中的方法都是抽象方法(抽象类,但不需要abstract定义类)3.接口当中的方法都是public权限。接口的基本语法(二):1.实现接口使用implements关键字2.一个类可以实现多个接口(对于类的继承来讲,一个类只可以继承一个父类,这里不同)3.一个接口可以继承多个接口2

11、9. 简单静态工厂方法模式把生成对象的代码(用到new xxx();),封装在工厂类中。30. 异常中断了正常指令流(一个程序从上到下依次的执行,一条条的语句构成指令流)的事件,异常只出现在程序运行的过程中(意味着在语法上是正确的,跟编译没多大关系)。异常是一个对象,当程序出现异常的时候,虚拟机会生成一个异常对象,生成异常的类都是由JDK提供的异常的分类:RuntimeExceptionCheck Exception uncheck异常Exception运行时异常Throwable check异常Error编译时异常父类编译时报错 虚拟机在运行时产生的错误,一旦产生错误虚拟机就会直接关闭,应用

12、程序是运行在虚拟机上的程序员对此无能为力,只能处理Exception31. trycatchfinally结构来处理可能出现异常的代码try有可能出现异常的代码catch(Exception e)e.printStackTrace();出现异常跳到catch打印异常finally无论有没有异常都执行,也称为异常的出口,把清理资源的代码放在里面对于check Exception必须对其进行处理,用trycatch或者声明,否则编译不能通过。对异常的处理关系到系统的健壮性。32. throw的作用throw e; 作用:抛出一个异常对象,虚拟机得到这个异常对象后在此条语句后面终止代码的运行。如果抛

13、出的是check Exception的话,必须对其进行trycatch处理,但通常情况下,我们自己抛出的异常我们不会处理,这时编译就不会通过。处理异常还可以对其声明。33. throws的作用声明一个函数可能会产生异常:以年龄不能为负数为例,因为java虚拟机不会察觉到这种问题public void setAge(int age) throws Exceptions/这样声明表明本函数可能产生异常,但本函数并没有责任在函数里处理异常,而是需要在调用此函数的地方在处理异常if(age < 0)Exception e = new Exception(“年龄不能为负数”);/这里的参数就是异常

14、信息throw e;this.age = age;34. I/O操作的目标从数据源当中读取数据,以及将数据写入到数据目的地当中,即对数据进行读写操作。数据的流向以java程序为参照物。I/O的分类:三种分法,(1)输入流与输出流(2)字节流与字符流(3)节点流与处理流在节点流的基础上对数据进行加工I/O当中的核心类(字节流的核心类)InputStreamOuputStream 所有字节流的父类(抽象类)读写 FileInputStream 最常用的FileOutputStreamInputStream:Int read(byte b,int off,int len);从硬盘上读取的数据放到字节

15、型数组b中,off表示偏移量,即从数组b的第几个位置开始存储,len表示读取一次最多读多少数据。OutputStream:void write(byte b,int off,int len)35. 字节流的输入输出例子(小文件)/从文件中读取数据第一步骤1:导入类import java.io.*;class IOftpublic static void main(String args )/2.在操作IO流的时候,会产生编译器异常,所以先捕捉异常,/用try.catch/3.声明输入流引用FileInputStream fis = null;/a.声明输出流的引用FileOutputStrea

16、m fos = null;try/4.生成代表输入流的对象fis = new FileInputStream("d:/Android_learn/src/from.txt");/b.生成代表输出流的对象fos = new FileOutputStream("d:/Android_learn/src/to.txt");/5.生成一个字节数组byte buffer = new byte100;/6.调用输入流对象的read方法/c.取read的返回值,调用write方法int temp = fis.read(buffer,0,buffer.length);f

17、os.write(buffer,0,temp);/*for(int i = 0; i < buffer.length; i+)System.out.println(bufferi);这里打印的是ascll码,下面是转换为字符的方法*/String s = new String(buffer);s = s.trim();/调用一个String对象的trim方法将会去掉这个/字符串的首尾空格和空字符System.out.println(s);catch(Exception e)System.out.println(e);36. 大文件的读写方法(对上改进)字节流/从文件中读取数据第一步骤1:

18、导入类import java.io.*;class IOftpublic static void main(String args )/2.在操作IO流的时候,会产生编译器异常,所以先捕捉异常,/用try.catch/3.声明输入流引用FileInputStream fis = null;/a.声明输出流的引用FileOutputStream fos = null;try/4.生成代表输入流的对象fis = new FileInputStream("d:/Android_learn/src/from.txt");/b.生成代表输出流的对象fos = new FileOutp

19、utStream("d:/Android_learn/src/to.txt");/5.生成一个字节数组byte buffer = new byte100;byte buffer = new byte1024;/6.调用输入流对象的read方法while(true)/c.取read的返回值,调用write方 int temp = fis.read(buffer,0,buffer.length);int temp = fis.read(buffer,0,buffer.length);if(temp = -1)/读到文件尾fos.write(buffer,0,temp);brea

20、k;/*for(int i = 0; i < buffer.length; i+)System.out.println(bufferi);fos.write(buffer,0.temp)这里打印的是ascll码,下面是转换为字符的方法*/fis.close();补充上次的不足String s = new String(buffer);【但不该放在这】s = s.trim();/调用一个String对象的trimfos.close();应关闭IO流的操作/方法将会去掉这个/字符串的首尾空格和空字符应该放在finally里面,如下catch后System.out.println(s);cat

21、ch(Exception e)System.out.println(e);finally /但是close方法会产生异常,所以还要tyrcatchtryfis.close();fos.close();catch(Exception e)System.out.println(e);37. 字符流读写文件时,以字符为基础。字符输入流:Reader(父)ßFileReader(子);字符输出流:WriterßFileWriter;父类都是抽象类,位置相当于字节流中的InputStream和OutputStream读函数:int read(char c,int off,int le

22、n);写:void write(char c,int off,int len);使用方法与上面的列子非常类似。38. 处理流(BufferedReader)使用实例,BufferedReader全称也叫字符输入处理流使用这个流主要使用下面的这个方法:以行为单位读取public String readLIne()throwsIOException【重点】生成BufferedReader对象的方法BufferedReader in = new BufferedReader(newFileReader(“foo.in”);使用列子:处理流bufferedReader调用readLine并不是读取磁盘

23、上的文件,而是fileReader读取磁盘文件,bufferedReader在fileReader的基础上进行处理。import java.io.*;class Bfreaderpublic static void main(String args )FileReader fileReader = null;BufferedReader bufferedReader = null;tryfileReader = new FileReader("d:/Android_learn/src/users.txt");bufferedReader = new BufferedRead

24、er(fileReader); String line = null; while(true)line = bufferedReader.readLine();if(line = null)break;System.out.println(line); catch(Exception e)System.out.println(e);finallytrybufferedReader.close();fileReader.close();catch(Exception e)System.out.println(e);39. 装饰者(Decorator)模式节点流是被装饰者,处理流是装饰者,在被装饰

25、者上添加新的功能列子:工人 水管工 木匠A公司水管工B公司水管工A公司木匠B公司木匠如果使用这种继承,假如有m个工种,n个公司,那么便需要m*n个子类,非常复杂。使用装饰者模式:见decorator文件里面的程序Decorator40. 内部类一个类声明在另一个类中,生成内部类对象:如B类声明在A类中,B可以随意使用A的成员变量和成员函数,但这不意味着B继承A,B只是能使用这些变量和函数,并不拥有。A a = new A();A.B b = new A().new B();作为普通内部类来讲,要生成内部类的对象必须先生成一个外部类的对象41. 匿名内部类new 一个接口,这个接口后紧跟着一个类

26、来实现这一个接口,只不过这个类没有名字,这种类就被称之为匿名内部类。42. 多进程与多线程多进程:在操作系统中能(同时)运行多个任务(程序)。多线程:在同一个应用程序中有多个顺序流(同时)执行。43. 线程的执行过程BlockedNewDead解除阻塞阻塞事件RunningRunnablestart()线程调度Run()运行完毕44. 创建线程的方法方式一:定义一个线程类,它继承类Thread并重写其中的方法run(),方法run()称为线程体;由于Java只支持单继承,用这种方法定义的类不能再继承其他类。创建线程以及启动线程例子: /在这个类中有3个线程:1.主函数main();2.自己定义

27、的线程对象ft;3.垃圾回收线程/谁抢到CPU就执行谁class Testpublic static void main(String args )/生成线程类对象FirstThread ft = new FirstThread();/启动线程ft.start();/此线程处于就绪状态/ft.rnu();千万不能这么写,不然就不是多线程for(int i = 0; i < 100; i+)/为了说明线程之间交替运行System.out.println("main->" + i);方式二:提供一个实现接口Runnable的类作为线程的目标对象,在初始化一个Thre

28、ad类或者Thread子类的线程对象时,把目标对象传递给这个线程实例,由该目标对象提供线程体。45. 线程的简单控制方法中断线程:Thread.sleep(2000);2000ms代表休眠2000ms,线程休眠的时候处于阻塞状态,醒来的时候处于就绪状态。Thread.yield();让当前线程让出CPU,但当前线程还是会抢CPU设置线程的优先级:(最大是10,最小是1,可以根据Thread所提供的静态常量来设置线程的优先级)越高的线程先执行的概率越大。getPriority();setPriority();46. 多线程的数据安全(生产者消费者问题-共用资源)synchronized(this

29、);同步代码块,一种锁机制。保证访问数据的安全。47. 数组静态声明:int arr = 1,2,4,5,6;动态声明:int arr = new int10;元素是整型的默认值是0;char型默认值是空;布尔型默认值是faulse.二维数组:int arr = 1,2,3,4,5,6,7,8,9;Int arr = new int35;48. 类集框架1. 类集框架是一组类和接口2. 位于java.util包当中3. 主要用于存储和管理对象4. 主要分为三大类集合、列表和映射集合(set):无序不重复列表(list):有索引可以重复映射(map):键值对类集框架的主体结构List接口impo

30、rt java.util.List;import java.util.ArrayList;public class Testpublic static void main(String args)ArrryList<String> arryList = new ArrayList<String>();arrayList.add(“a”);arrayList.remove(1);for(int I = 0; I < arrayList.size(); i+)String s = arrayList.get(i);System.out.println(s);49. Collection和Iterator(迭代器)接口import java.util.

温馨提示

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

评论

0/150

提交评论