JAVASE基础笔记总结全套.docx_第1页
JAVASE基础笔记总结全套.docx_第2页
JAVASE基础笔记总结全套.docx_第3页
JAVASE基础笔记总结全套.docx_第4页
JAVASE基础笔记总结全套.docx_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

2015/9/1 Tuesday1 基本知识点1. JDK(Java Developer Kit)2. Applet 小应用程序init() start() stop() destroy() 没有构造方法3. ANSI America National Standard Institute (ANSI编码在不同国家是不一样的)4. 小技巧:替换文本中所有空行 s*n 同时改一下option5. 习惯 Java源文件名词第一个大写,包名小写;6. 升级三个因素:1. 提高效率。2. 简化书写。3. 提高安全性。7. Javac Test.java 编译Java Test运行 java.exe 是JVM8. 打包编译javac d . test.java9. Main 方法的args数组用来存放命令参数(command arguments)10. 命名规则 字符,$,下划线开头11. 避免用单个字母命名 变量尽可能在他被使用的地方附近定义12. 算数运算符 逻辑运算(高位补零)13. 值域小的可以直接赋值给值域大的;(自动类型提升)14. 数组1. 声明时可以不指定大小,使用时必须指定,以便向系统申请指定的空间;2. type arrayName=new typesize;3. 每个数组都有成员变量length 下标最大为length-14. Type arr1,arr2等价于 arr1,arr2; arr1和arr2维数不同,不能赋值;15. Java各种循环的判别式都是Boolean类型的;16. 只有成员变量,系统才自动赋一个默认值对于局部变量,必须初始化;17. 素数的判断for(int num=2;num=10000;num+,flag=false)for(int i=2;iMath.sqrt(num);i+)if(num%i=0)flag=true;break;/不是素数 If(flag=false)/是素数System.out.println(num);18. Java编程语言只有值传递参数(对象的引用,对象的值)19. Java整数默认为int型,小数默认为double型20. 非静态方法不能出现在Main()函数中21. 哈希码是由对象的实例域产生的一个整数,如果自定义类,就要实现这类的hashcode()22. 可变参数:其实就是上一种数组参数的简写形式。不用每一次都手动的建立数组对象。只要将要操作的元素作为参数传递即可。隐式将这些参数封装成了数组。public static void show(String str,int. arr)23. 定义函数的步骤1. 既然函数是一个独立的功能,那么该功能的运算结果是什么先明确,也就是明确函数的返回值类型;2. 在明确定义该功能的过程中是否需要未知的内容参与运算,这是在明确函数的参数列表(参数的类型和参数的个数)24. this语句:用于构造函数之间进行互相调用。 this语句只能定义在构造函数的第一行。因为初始化要先执行。25. this.: this代表它所在函数所属对象的引用。简单说:哪个对象在调用this所在的函数,this就代表哪个对象。26. this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。但凡本类功能内部使用了了本类对象,都用this表示。27. public static void main(String args) 主函数:是一个特殊的函数。作为程序的入口,可以被jvm调用。主函数的定义:1. public:代表着该函数访问权限是最大的。2. static:代表主函数随着类的加载就已经存在了。3. void:主函数没有具体的返回值。4. main:不是关键字,但是是一个特殊的单词,可以被jvm识别。5. (String arr):函数的参数,参数类型是一个数组,该数组中的元素是字符串。字符串类型的数组。6. 主函数是固定格式的:jvm识别。7. jvm在调用主函数时,传入的是new String0;28. final实例变量没有默认值,必须先赋值;29. final:最终。作为一个修饰符,1. 可以修饰类,函数,变量。2. 被final修饰的类不可以被继承。为了避免被继承,被子类复写功能。3. 被final修饰的方法不可以被复写。4. 被final修饰的变量是一个常量只能赋值一次,既可以修饰成员变量,有可以修饰局部变量。5. 当在描述事物时,一些数据的出现值是固定的,那么这时为了增强阅读性,都给这些值起个名字。方便于阅读。而这个值不需要改变,所以加上final修饰作为常量:常量的书写规范所有字母都大写,如果由多个单词组成,单词间通过_连接。6. 内部类定义在类中的局部位置上是,只能访问该局部被final修饰的局部变量。2 类与对象1. 设计类的方法a) 是什么b) 有什么c) 做什么2. 名词提炼法:找名词和动词;3. 类设计的技巧:1. 一定要保证数据私有2. 一定要对数据初始化3. 不要在类中使用过多的基本类型4. 不是所有的域都需要独立的域访问器和域修改器5. 将职责过多的类进行分解6. 类名和方法名要体现它们的职责4. 类之间的关系:依赖:uses-a 聚合:has-a 意味着类A的对象包含类B的对象继承:is-a5. 其实定义类,就是在描述事物,就是在定义属性和行为。属性和行为共同成为类中的成员(成员变量和成员方法);6. 开发面向对象:其实就是找对象使用,没有对象就创建对象,找对象,建立对象,使用对象,维护对象的关系;7. Person p = new Person(zhangsan,20);该句话都做了什么事情?1,因为new用到了Person.class.所以会先找到Person.class文件并加载到内存中。2,执行该类中的static代码块,如果有的话,给Person.class类进行初始化。3,在堆内存中开辟空间,分配内存地址。4,在堆内存中建立对象的特有属性。并进行默认初始化。5,对属性进行显示初始化。6,对对象进行构造代码块初始化。7,对对象进行对应的构造函数初始化。8,将内存地址付给栈内存中的p变量。8. 什么使用静态?1. 要从两方面下手:a) 因为静态修饰的内容有成员变量和函数。2. 什么时候定义静态变量(类变量)呢?a) 当对象中出现共享数据时,该数据被静态所修饰。b) 对象中的特有数据要定义成非静态存在于堆内存中。9. 什么时候定义静态函数呢?1. 当功能内部没有访问到非静态数据(对象的特有数据),2. 那么该功能可以定义成静态的10. static特点:1. 随着类的加载而加载。也就是说:静态会随着类的消失而消失。说明它的生命周期最长。2. 优先于的对象存在明确一点:静态是先存在。对象是后存在的。3. 被所有对象所共享4. 可以直接被类名所调用5. 建议使用类名而不是对象调用静态方法11. 实例变量和类变量的区别:1,存放位置。类变量随着类的加载而存在于方法区中。实例变量随着对象的建立而存在于堆内存中。2,生命周期:类变量生命周期最长,随着类的消失而消失。实例变量生命周期随着对象的消失而消失。12. 静态使用注意事项:1,静态方法只能访问静态成员。非静态方法既可以访问静态也可以访问非静态。2,静态方法中不可以定义this,super关键字。因为静态优先于对象存在,所以静态方法中不可以出现this。3,主函数是静态的。13. 静态有利有弊利处:对对象的共享数据进行单独空间的存储,节省空间。没有必要每一个对象中都存储一份。可以直接被类名调用。弊端:生命周期过长。 访问出现局限性。(静态虽好,只能访问静态。)2.1 小知识点1. 类:对某种具有共同特征类型的一类对象的定义a) 类的修饰符:public abstract finalb) 类的访问控制符:public2. 对象:是一些相关变量和方法的集合a) 对象可以访问它的成员变量和成员方法,如果A对象有一个引用名指向了B对象,则对象A也可以访问B对象公开方法与变量;(通过.运算符)b) 每个对象都可以用this指向它自身;3. 实例:以类为模板创建的对象:new出来的;4. 封装性:允许或禁止访问类或对象的数据和成员方法的能力;5. 继承性:获取另一个类(超类)的状态和行为;6. 多态性:同名的多个方法共同存在一个程序的情况;7. 重载性: 允许一个成员方法有多重定义,定义多个版本的构造方法;a) Java允许重载任何方法,不仅仅是构造函数b) 重载没有访问控制限制,返回类型也可以不一样,它只关心你参数必须不一样;8. 抽象:(方法抽象)(数据抽象)不考虑问题的细节9. 对象的操作a) 修改自身状态b) 对外发布消息10. 一个对象影响其它对象:通过调用那个对象的方法,而不是直接改变那个对象;11. 对象的克隆是指创建一个新对象且新对象和原对象状态相同,当克隆对象修改时,不会影响源对象;12. 引用类型: 引用类型变量的名字不是表示变量的本身而是变量的存储地点,一般通过new进行初始化;13. 成员变量: a) 成员变量修饰符:public protected private static finalb) 成员变量开辟在堆内存,在它定义的类中处处有效;14. 局部变量:在它定义的块中有效(不在方法间传递)a) 局部变量前面不能放置任何访问修饰符,除了finalb) 局部变量开辟在栈中,必须赋初值15. 类变量:(静态成员变量)a) 可以直接通过类名访问;b) 不管对象被被实例化多少次,一个静态成员变量仅存一个版本(如果一个对象修改了该变量,其它对象也会受影响;c) 静态初始化器当类进入内存事,系统调用执行,而构造方法是在执行new操作后自动执行;16. 静态方法:只能使用静态成员变量,输入参数及其它静态成员方法;a) 静态方法不能直接访问非静态方法;17. 实例变量:没有static限定的变量就是实例变量;18. 实例方法:没有static限定:每个对象都有自己实例方法的复制;19. 构造方法:构造与类名同名,它在类实例化对象时被执行,且没有返回值;构造方法应紧跟成员变量的定义;构造方法不能被继承,因此不能重写(override),但是可以被重载(overload)20. 构造函数:可以用来给对象初始化,一new出来就具备某些属性;a) 如果重载了构造函数,就必须自己添加默认的构造函数;b) 当在类中自定义了构造函数后,默认的构造函数就没有了。21. 构造函数与一般函数的区别:a) 写法上区别b) 运行上不同:构造方法是对象一建立就运行,一般方法是对象调用才执行,给对象添加对象具备的功能;c) 一个对象的建立,构造函数只运行一次,而一般方法可以运行多次;22. 什么时候定义构造函数a) 当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数23. 常量:public static final24. 包:类与接口的集合;25. 域和方法的访问控制符:public private protected 默认同一个类同一个包不同的子包不同非子包PublicOkOkOkOkProtectedOkOkOkDefaultOkOkPrivateOk26. 一个从抽象类拓展的类,如果没有把抽象方法具体化,则它也是一个抽象类,抽象类不能实例化,也就是不能直接产生对象。在抽象类中声明抽象方法可以迫使子类实现继承来的的抽象方法;27. 构造代码块 a) 作用:给对象进行初始化。对象一建立就运行,而且优先于构造函数执行。b) 和构造函数的区别:构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化。c) 构造代码快中定义的是不同对象共性的初始化内容28. 静态代码块:格式:static静态代码块中的执行语句。特点:随着类的加载而执行,只执行一次,并优先于主函数。作用:用于给类进行初始化的。28.2.2 常见实用类2.2.1 String类1. 定义String str1=”list”;String str2=new String(”list”);2. 用“+”进行字符串的连接和添加3. 长度从0开始计算,最后一个下标N-1,总长N;4. 方法1. Boolean equals(String s) 比较本身内容是否相等2. Int CompareTo(String s) 当前与s相同=0 小于05. String s=new String(“list”);1. 创建了两个String Object,先创建了list对象再创建了s这个对象;6. 字符串的Hashcode是由内容导出来的;7. 常用操作方法:1. 获取。1.1字符串中的包含的字符数,也就是字符串的长度。int length()1.2 根据位置获取位置上某个字符。char charAt(int index):1.3 根据字符获取该字符在字符串中位置。int indexOf(int ch):返回的是ch在字符串中第一次出现的位置。int indexOf(int ch, int fromIndex) :从fromIndex指定位置开始,获取ch在字符串中出现的位置。int indexOf(String str):返回的是str在字符串中第一次出现的位置。int indexOf(String str, int fromIndex) :从fromIndex指定位置开始,获取st在字符串中出现的位置。int lastIndexOf(int ch) 2. 判断。2.1 字符串中是否包含某一个子串。boolean contains(str):特殊之处:indexOf(str):可以索引str第一次出现位置,如果返回-1.表示该str不在字符串中存在。所以,也可以用于对指定判断是否包含。if(str.indexOf(aa)!=-1)而且该方法即可以判断,有可以获取出现的位置。2.2 字符中是否有内容。boolean isEmpty(): 原理就是判断长度是否为0.2.3 字符串是否是以指定内容开头。boolean startsWith(str);boolean endsWith(str);2.5 判断字符串内容是否相同。复写了Object类中的equals方法。boolean equals(str);2.6 判断内容是否相同,并忽略大小写。boolean equalsIgnoreCase();3. 转换。3.1 将字符数组转成字符串。构造函数:String(char)String(char,offset,count):将字符数组中的一部分转成字符串。静态方法:static String copyValueOf(char);static String copyValueOf(char data, int offset, int count) static String valueOf(char):3.2 将字符串转成字符数组。char toCharArray():3.3 将字节数组转成字符串。String(byte)String(byte,offset,count):将字节数组中的一部分转成字符串。3.4 将字符串转成字节数组。byte getBytes():3.5 将基本数据类型转成字符串。static String valueOf(int)static String valueOf(double)/3+;/String.valueOf(3);基本数据类型+基本数据类型.toString(基本数据类型值);如: Integer.toString(34);/将34整数变成34;特殊:字符串和字节数组在转换过程中,是可以指定编码表的。4,替换String replace(oldchar,newchar);5,切割String split(regex);6,子串。获取字符串中的一部分。String substring(begin);String substring(begin,end);7,转换,去除空格,比较。7.1 将字符串转成大写或则小写。String toUpperCase();String toLowerCase();7.2 将字符串两端的多个空格去除。String trim();7.3 对两个字符串进行自然顺序的比较。int compareTo(string);2.2.2 StringBuffer类1. 是一个可变字符序列,是字符串缓冲区。2. 特点:1 长度是可变化的。2 可以字节操作多个数据类型。3 最终会通过toString方法变成字符串。3. 定义 StringBuffer sb=new StringBuffer(“list”);4. String类的“+”实质上也是先转换成StringBuffer的append和同String运算;5. 方法:1 存储。StringBuffer append():将指定数据作为参数添加到已有数据结尾处。StringBuffer insert(index,数据):可以将数据插入到指定index位置。2 删除。StringBuffer delete(start,end):删除缓冲区中的数据,包含start,不包含end。StringBuffer deleteCharAt(index):删除指定位置的字符。3 获取。char charAt(int index)int indexOf(String str)int lastIndexOf(String str)int length()String substring(int start, int end)4. 修改。StringBuffer replace(start,end,string);void setCharAt(int index, char ch) ;5. 反转。StringBuffer reverse(); 6. 将缓冲区中指定数据存储到指定字符数组中。void getChars(int srcBegin, int srcEnd, char dst, int dstBegin)2.2.3 System类1. System:类中的方法和属性都是静态的。2. System类3个静态方法与这三个流很有关联1. Void setIn(InputStream in) 可以重新指定输入流in为System.in2. Void setOut(PrintStream out)3. Void setErr(PrintStream out)可以重新指定输出流out为System.err3. 获取时间:System.currentTimeMillis();4. out:标准输出,默认是控制台。5. in:标准输入,默认是键盘。6. 获取系统属性信息:Properties getProperties();1. 获取所有属性信息。for(Object obj : prop.keySet()String value = (String)prop.get(obj);System.out.println(obj+:+value);2. Properties prop = System.getProperties();/因为Properties是Hashtable的子类,也就是Map集合的一个子类对象。/那么可以通过map的方法取出该集合中的元素。/该集合中存储都是字符串。没有泛型定义。3. 如何在系统中自定义一些特有信息呢?System.setProperty(mykey,myvalue);4. 获取指定属性信息。String value = System.getProperty();System.out.println(value=+value);5. 可不可以在jvm启动时,动态加载一些属性信息呢?String v = System.getProperty(haha);System.out.println(v=+v);2.2.4 Math类1. double d = Math.ceil(16.34);/ceil返回大于指定数据的最小整数。2. double d1 = Math.floor(12.34);/floor返回小于指定数据的最大整数。3. long l = Math.round(12.54);/四舍五入4. random 返回0-1之间的小数;2.2.5 Date类1. Date d = new Date();System.out.println(d);/打印的时间看不懂,希望有些格式。/将模式封装到SimpleDateformat对象中。SimpleDateFormat sdf = new SimpleDateFormat(yyyy年MM月dd日E hh:mm:ss);/调用format方法让模式格式化指定Date对象。String time = sdf.format(d);System.out.println(time=+time);2. 获取任意年的二月有多少天?思路:根据指定年设置一个时间就是 c.set(year,2,1)/某一年的3月1日。c.add(Calenar.DAY_OF_MONTH,-1);/3月1日,往前推一天,就是2月最后一天。2,获取昨天的现在这个时刻。c.add(Calenar.DAY_OF_MONTH,-1);2.2.6 Runtime类1. 该类并没有提供构造函数。说明不可以new对象,那么会直接想到该类中的方法都是静态的。发现该类中还有非静态方法,说明该类肯定会提供了方法获取本类对象。而且该方法是静态的,并返回值类型是本类类型。由这个特点可以看出该类使用了单例设计模式完成。2. 该方式是static Runtime getRuntime();Runtime r = Runtime.getRuntime();Process p = r.exec(notepad.exe SystemDemo.java);2.2.7 Pattern 正则表达式1. 正则表达式:符合一定规则的表达式。1. 作用:用于专门操作字符串。2. 特点:用于一些特定的符号来表示一些代码操作。这样就简化书写。3. 所以学习正则表达式,就是在学习一些特殊符号的使用。4. 好处:可以简化对字符串的复杂操作。5. 弊端:符号定义越多,正则越长,阅读性越差。2. 具体操作功能:1,匹配:String matches方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。2,切割:String split();3,替换:String replaceAll(regex,str);如果regex中有定义组,可以在第二参数中通过$符号获取正则表达式中的已有的组。3. 实例:1. splitDemo(erkktyqqquizzzzzo,(.)1+);按照叠词完成切割。为了可以让规则的结果被重用可以将规则封装成一个组。用()完成。组的出现都有编号。从1开始。 想要使用已有的组可以通过 n(n就是组的编号)的形式来获取。2. 将重叠字母换成单个字母Str.repalceAll(“(.)1+”,”$1”);3. /String reg = +;/按照多个空格来进行切割4. 匹配手机号段只有 13xxx 15xxx 18xxxxString telReg = 1358d9;5. 对QQ号码进行校验要求:515 0不能开头,只能是数字String regex = 1-9d4,14;4. 正则表达式的第四个功能。获取:将字符串中的符合规则的子串取出。操作步骤:1,将正则表达式封装成对象。2,让正则对象和要操作的字符串相关联。3,关联后,获取正则匹配引擎。4,通过引擎对符合规则的子串进行操作,比如取出。public static void getDemo()String str = ming tian jiu yao fang jia le ,da jia。;System.out.println(str);String reg = ba-z4b;/将规则封装成对象。Pattern p = Ppile(reg);/让正则对象和要作用的字符串相关联。获取匹配器对象。Matcher m = p.matcher(str);/System.out.println(m.matches();/其实String类中的matches方法。用的就是Pattern和Matcher对象来完成的。/只不过被String的方法封装后,用起来较为简单。但是功能却单一。/boolean b = m.find();/将规则作用到字符串上,并进行符合规则的子串查找。/System.out.println(b);/System.out.println(m.group();/用于获取匹配后结果。/System.out.println(matches:+m.matches();while(m.find()System.out.println(m.group();System.out.println(m.start()+.+m.end();5. 网页爬虫:public static void getMails_2()throws ExceptionURL url = new URL(54:8080/myweb/mail.html);URLConnection conn = url.openConnection();BufferedReader bufIn = new BufferedReader(new InputStreamReader(conn.getInputStream();String line = null;String mailreg = w+w+(.w+)+;Pattern p = Ppile(mailreg);while(line=bufIn.readLine()!=null)Matcher m = p.matcher(line);while(m.find()System.out.println(m.group();/获取指定文档中的邮件地址。/使用获取功能。Pattern Matcherpublic static void getMails()throws ExceptionBufferedReader bufr =new BufferedReader(new FileReader(mail.txt);String line = null;String mailreg = w+w+(.w+)+;Pattern p = Ppile(mailreg);while(line=bufr.readLine()!=null)Matcher m = p.matcher(line);while(m.find()System.out.println(m.group();String reg = a-zA-Z0-9_+a-zA-Z0-9+(.a-zA-Z+)+;/较为精确的匹配。reg = w+w+(.w+)+;/相对不太精确的匹配2.3 内部类允许内部类继承外部类1. 内部类的访问规则:1. 内部类可以直接访问外部类中的成员,包括私有。之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式 外部类名.this2. 外部类要访问内部类,必须建立内部类对象。2. 访问格式:1.当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中,可以直接建立内部类对象。3. 格式:外部类名.内部类名 变量名 = 外部类对象.内部类对象;Outer.Inner in = new Outer().new Inner();4. 当内部类在成员位置上,就可以被成员修饰符所修饰。比如,private:将内部类在外部类中进行封装。static:内部类就具备static的特性。当内部类被static修饰后,只能直接访问外部类中的static成员。出现了访问局限。5. 在外部其他类中,如何直接访问static内部类的非静态成员呢?new Outer.Inner().function();6. 在外部其他类中,如何直接访问static内部类的静态成员呢?Outer.Inner.function();注意:当内部类中定义了静态成员,该内部类必须是static的。当外部类中的静态方法访问内部类时,内部类也必须是static的。7. 当描述事物时,事物的内部还有事物,该事物用内部类来描述。因为内部事务在使用外部事物的内容。8. 内部类定义在局部时,1. 不可以被成员修饰符修饰2. 可以直接访问外部类中的成员,因为还持有外部类中的引用,但是不可以访问它所在的局部中的变量。只能访问被final修饰的局部变量。10. 匿名内部类:1. 匿名内部类其实就是内部类的简写格式。2. 定义匿名内部类的前提:内部类必须是继承一个类或者实现接口。匿名内部类的格式: new 父类或者接口()定义子类的内容其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖。可以理解为带内容的对象。匿名内部类中定义的方法最好不要超过3个。2.4 抽象类1. 当多个类中出现相同功能,但是功能主体不同,这是可以进行向上抽取。这时,只抽取功能定义,而不抽取功能主体。2. 抽象类的特点:1, 抽象方法一定在抽象类中。2, 抽象方法和抽象类都必须被abstract关键字修饰。3, 抽象类不可以用new创建对象。因为调用抽象方法没意义。4, 抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。只能引用非抽象子类的对象;3. 抽象类比一般类多个了抽象函数。就是在类中可以定义抽象方法。抽象类不可以实例化。4. 特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。5. abstract 关键字,和哪些关键字不能共存?2. final:被final修饰的类不能有子类。而被abstract修饰的类一定是一个父类。3. private: 抽象类中的私有的抽象方法,不被子类所知,就无法被复写。而抽象方法出现的就是需要被复写。4. static:如果static可以修饰抽象方法,那么连对象都省了,直接类名调用就可以了,可是抽象方法运行没意义。6. 抽象类中是否有构造函数?有,抽象类是一个父类,要给子类提供实例的初始化。2.5 包1. 为了简化类名的书写,使用一个关键字import:import 导入的是包中的类。2. import static 静态导入。当类名重名时,需要指定具体的包名。当方法重名是,指定具备所属的对象或者类。3. 建议,不要写通配符 * ,需要用到包中的哪个类,就导入哪个类。建议定包名不要重复,可以使用url来完成定义,url是唯一的。4. 错误分析:1. 错误原因:类名写错。因为类名的全名是:包名.类名2. 错误原因:packa包不在当前目录下需要设置classpath,告诉jvm去哪里找指定的packa包。3. 错误原因:有了包,范围变大,一个包中的类要被访问,必须要有足够大的权限,所以被访问的类要被public修饰。4. 错误原因:类公有后,被访问的成员也要公有才可以被访问。5. 总结:1.包与包之间进行访问,被访问的包中的类以及类中的成员,需要public修饰。2.不同包中的子类还可以直接访问父类中被protected权限修饰的成员。包与包之间可以使用的权限只有两种,public protected。3 继承1. 如何使用一个继承体系中的功能呢?想要使用体系,先查阅体系父类的描述,因为父类中定义的是该体系中共性功能。通过了解共性功能,就可以知道该体系的基本功能。那么这个体系已经可以基本使用了。2. 继承设计的技巧1. 将公共操作和域放在超类2. 不要使用受保护的域3. 使用继承实现“is-a”关系4. 除非所有继承的方法都有意义,否则不要使用继承5. 在覆盖方法时,不要改变其预期的行为6. 使用多态,而非类型信息7. 不要过多使用反射3. 那么在具体调用时,要创建最子类的对象,为什么呢?一是因为有可能父类不能创建对象,二是创建子类对象可以使用更多的功能,包括基本的也包括特有的。简单一句话:查阅父类功能,创建子类对象使用功能。4. 子父类中的变量1. 如果子类中出现非私有的同名成员变量时,2. 子类要访问本类中的变量,用this3. 子类要访问父类中的同名变量,用super。4. super的使用和this的使用几乎一致。5. this代表的是本类对象的引用。6. super代表的是父类对象的引用。5. 子父类中的函数。1. 当子类出现和父类一模一样的函数时,当子类对象调用该函数,会运行子类函数的内容,如同父类的函数被覆盖一样。这种情况是函数的另一个特性:重写(覆盖)当子类继承父类,沿袭了父类的功能,到子类中,但是子类虽具备该功能,但是功能的内容却和父类不一致,这时,没有必要定义新功能,而是使用覆盖特殊,保留父类的功能定义,并重写功能内容。2. 覆盖:1. 子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败。2. 静态只能覆盖静态。注意:重载:只看同名函数的参数列表。重写:子父类方法要一模一样。6. 子父类中的构造函数。1. 在对子类对象进行初始化时,父类的构造函数也会运行,那是因为子类的构造函数默认第一行有一条隐式的语句 super();2. super():会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super();7. 为什么子类一定要访问父类中的构造函数?1. 因为父类中的数据子类可以直接获取。所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的,所以子类在对象初始化时,要先访问一下父类中的构造函数。2. 如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。3. 注意:super语句一定定义在子类构造函数的第一行。8. 子类的实例化过程的结论:1. 子类的所有的构造函数,默认都会访问父类中空参数的构造函数。因为子类每一个构造函数内的第一行都有一句隐式super();2. 当父类中没有空参数的构造函数时,子类必须手动通过super语句形式来指定要访问父类中的构造函数。3. 当然:子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数。子类中至少会有一个构造函数会访问父类中的构造函数。3.1 小知识点1. 继承:1. 提高了代码的复用性。2. 让类与类之间产生了关系。有了这个关系,才有了多态的特性。3. 注意:千万不要为了获取其他类的功能,简化代码而继承。必须是类与类之间有所属关系才可以继承。所属关系 is a。2. super 关键字可以访问超类成员或引用超类构造方法,但是super不是对象引用;3. 子类 无法继承父类私有成员(物理上有)解决方法:在超类用Set,get函数访问私有成员变量;4. 子类 可以覆盖超类的成员方法,应避免覆盖成员变量;通过super仍可以使用被覆盖的超类方法;对于父类与子类的同名域,在子类中只是对父类同名域进行隐藏;5. 对于覆盖:子类和父类的方法,如果方法名相同且参数相同,而返回类型不同,这在语法上是错误的; 1. 子类覆盖父类的方法,要求子类方法的访问控制关键字权限只能更高或同级,不能降级;2. 抛异常为父类异常的子类,切返回类型和参数列表必须精确匹配;3.2 多态1. 在超类中使用抽象或普通方法,然后在子类中实现或覆盖该方法,这样就产生了多态;2. 多态的体现:父类的引用指向了自己的子类对象。父类的引用也可以接收自己的子类对象。3. 多态的前提:必须是类与类之间有关系。要么继承,要么实现。通常还有一个前提:存在覆盖。4. 多态的好处:多态的出现大大的提高程序的扩展性。5. 多态的弊端:提高了扩展性,但是只能使用父类的引用访问父类中的成员。6. 在多态中成员函数的特点: Father f=new Son();在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。在运行时期:参阅对象所属的类中是否有调用的方法。简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。7. 在多态中,成员变量的特点:无论编译和运行,都参考左边(引用型变量所属的类)。在多态中,静态成员函数的特点:无论编译和运行,都参考做左边。8. Animal a = new Cat();/类型提升,向上转型。a.eat();9. 如果想要调用猫的特有方法时,如何操作?强制将父类的引用转成子类类型。向下转型。Animal a = new Animal();Cat c = (Cat)a;c.catchMouse();千万不要出现这样的操作,就是将父类对象转成子类类型。我们能转换的是父类应用指向了自己的子类对象时,该应用可以被提升,也可以被强制转换。多态自始至终都是子类对象在做着变化。4 接口1. 抽象类和接口异同:相同:1,都可以在内部定义抽象方法。2,通常都在顶层。3,都不可以实例化,都需要子类来实现。不同点:1,抽象类中可以定义抽象方法和非抽象方法,而接口中只能定义抽象方法。2,接口的出现可以多实现。抽象类只能单继承。也就是说:接口的出现避免了单继承的局限性。3,继承和实现的关系不一致。继承:is a,实现:like a2. 接口不是类,尽管不能构造接口的对象,却可以声明接口的变量,接口的变量必须引用实现了接口的类对象;3. 接口可以扩展(extends),接口中不能包含实力域或者静态方法,却可以包含常量publicstatic final4.1 小知识点1. 接口:是一些抽象方法和常量所组成的集合;2. 初期理解,可以认为是一个特殊的抽象类,当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。3. class用于定义类interface 用于定义接口。4. 接口定义时,格式特点:1. 接口中常见定义:常量,抽象方法。2. 接口中的成员都有固定修饰符。常量:public static final方法:public abstract 记住:接口中的成员都是public的且实现接口的方法时必须加上public;5. 接口:是不可以创建对象的,因为有抽象方法。6. 需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化,否则子类是一个抽象类。7. 接口可以被类多实现,也是对多继承不支持的转换形式,java支持多实现。8. 要让一个类使用排序服务必须让它实现compareTo()方法,任何实现Compareable接口的类都必须包含compareTo方法,返回一个整数-1,0,1;5 GUI1. 创建图形化界面:1. 创建frame窗体。 f = new Frame(my frame);2. 对窗体进行基本设置。比如大小,位置,布局。f.setBounds(300,100,600,500);f.setLayout(new FlowLayout();3. 定义组件。but = new Button(m

温馨提示

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

评论

0/150

提交评论