JAVA初高级阶段笔记.doc_第1页
JAVA初高级阶段笔记.doc_第2页
JAVA初高级阶段笔记.doc_第3页
JAVA初高级阶段笔记.doc_第4页
JAVA初高级阶段笔记.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

l 高博S1阶段java笔记、作业 梦在心上 命在手中 路在脚下JAVA初高级阶段笔记Day0:1. 异常与错误:1. 异常是程序在执行过程中出现的中断正常指令执行的事件。2. 错误是偏离可接受代码的一个动作或实例。2. overload和overrid的区别1. Overload方法重载:如果在一个类中2. 它们有不同的参数表(包括 参数的类型、个数、顺序),则该方法称为方法的重载。3. Override方法重写:如果子类中定义某个方法与其父类有相同的名称和参数,则该方法被重写。3. 常见异常1. 空指针异常类:java.lang.nullPointerException2. 数组下标越界异:java.lang.arrayIndexOutOfBoundsException3. 类型强制转换异常:java.lang.classCastException4. 数学运算异常:java.lang.arithmeticexception5. 操作数据库异常:java.sql.SQLException6. 没有访问权限异常: java.lang.illegalaccessexception7. 字符串转换为数字异常:java.lang.numberFormatException4. 静态变量和非静态变量的区别1. 静态变量: 用关键字static修饰的成员变量称作静态变量或类变量,是与类相关联的数据变量,类变量不仅可以通过某个对象访问也可以直接通过类名访问,静态变量被相关的对象共享。2. 非静态变量:没有使用static修饰的成员变量称作非静态变量 ;仅仅是和相应对象关联的变量,改变其中一个对象的实例变量不会影响其它对象的这个实例变量,且必须通过对象访问。5. 静态方法和非静态方法有什么区别:1. 静态方法中不用this是无法引用除自己方法体中定义的成员和参数以外的非静态变量或者方法的。2. 静态方法是不允许被子类重写的,但是子类可以重载父类的静态方法。3. 子类也不可将父类中的非静态方法重写为静态方法。6. final和finally和finalize的区别1. final-修饰符(关键字)被声明为final的类,不能再派生出新的子类,不能作为父类被继承。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。final方法只能使用,不能重写。2. finally-在异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。 3. finalize-方法名。finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。| | & &Day1:7. JDK版本:JAVAME微型版手机软件开发JAVASE标准版桌面应用程序JAVAEE企业版企业级应用开发8. java语言的特点:1.简单没有C、C+中的头文件,指针,运算符重载2.面向对象可以开发出较大型的应用程序3.分布式通过网络访问应用程序,突破空间限制4.健壮性(编译时错误检测)消除有出错倾向的状态:指针5.安全性(蠕虫病毒)禁止运行时堆栈溢出、内存空间未授权读写6.可移植性JVM9. java环境变量配置:JAVA_HOME:JDK安装目录,方便在后面两个环境变量的配置中直接被调用即可path:%JAVA_HOME%bin 列出可执行文件的搜索路径classpath:%JAVA_HOME%libtools.jar %JAVA_HOME%libdt.jar .(当前路径)是java加载类的路径,只有在classpath设置的路径中的类才能被加载在CMD下运行:1.java2.javac3.java -version10. JDK安装目录介绍:Bin 编译器和工具Demo 演示Docs HTML格式的类库文档Include 用于编译本地方法的文件Jre java运行环境文件Lib 类库文件Src 类库源文件11. 第一个java程序:1.文件名与公共类的名字要一致2.一个文件中可以有多个类,但是只能有一个公共类3.使用 “javac 类名.java”来编译源程序4.使用“java 类名” 来执行java程序5.main方法是程序运行的入口,方法必须按照如下书写方式:public static void main(String a) 包名的命名规范:公司的域名倒写+项目名+模块的名字 12. 带包编译:带包编译:javac -d ./ HelloWorld.java带包运行: java com.blues.javabase.day1.HelloWorld注意:在同一个包下面不能有同名的类13. 练习:开发一个Java程序打印出下列信息: 姓名 性别 年龄 毕业学校 户籍14. import的注意事项:import java.util.*;import java.sql.*;System.out.println(new java.util.Date();15. java的注释:1.单行注释:/2.多行注释:/* */3.文档注释/* */通过javadoc命令将文档注释提取出来生成java帮助文档:javadoc -author -version -d ./api HelloWorld.java16. 压缩命令: Jar -cvf first.jar 完整类名解压命令: Jar -xvf first.jar运行jar 文件中的程序: java -classpath first.jar a.b.c.HelloWorld17. java命令行参数:public static void main(String args)/打印当前时间System.out.println(args0);System.out.println(args1);运行时:java com.blues.javabase.day1.HelloWorld blues wang18. main方法运行要点:可执行程序必需要main方法只能public和static调换位置 args可以是任意的名字 /args0 代表第一个命令行参数注意:运行时一定要有命令行参数输入,否则会有数组下标越界异常出现Day2:19. Java标示符:1,什么是标示符? 在java语言中用来给一个类、变量或方法命名的符号2,标示符的命名规则: 1.以字母, “_”或“$”符号开头 2.可以包含字母、“_”、“$”和数字符号 3.大小写敏感 4.不能与保留关键字冲突 5.没有长度限制3.命名规范:1.类名, 接口名 :每个单词的首字母应该大写2.字段、方法以及对象:第一个单词首字母应小写,其他单词首字母大写3.常量:全部用大写字母表示4.Java包(Package):它们全都字母小写5.命名要做到见名知意20. 关键字列表:Volatile:就象大家更熟悉的const一样,volatile是一个类型修饰符(type specifier)。它是被设计用来修饰被不同线程访问和修改的变量。如果没有volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。Transient: java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。当一个对象被序列化的时候,transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。Abstract抽象 boolean break byte case catch char class continue default默认值 do double else extends继承 enum枚举 false final finally float for if implements实现接口 import instanceof实例 int interface接口 long native new null package private私有的 protected public return short static静态的 super switch synchronized同步的 this throw throws transient true try void volatile while 保留字:const,goto Java 中 true false 是boolean类型的字面量所有的关键字都是小写,friendly,string,sizeof不是java的关键字 21. 转义字符描述ddd1到3位8进制数所表示的字符(ddd) uxxxx1到4位16进制数所表示的字符(xxxx)单引号字符双引号字符反斜杠字符r回车n换行f走纸换页t横向跳格b退格22. java数据类型:1.基本数据类型(8种)Byte1、short2、char2、int4、long8、float4、double8boolean* java默认浮点数为double2.引用数据类型数组、类、接口都属于引用数据类型23. 补码:原码取反加1整数在内存中的表示:1.正整数:原码2.负整数:补码-对象就像一个充满氢气的气球,我们没有办法直接去得到它,要想对它的使用都必须通过一根连着它的绳子来访问,这根绳子就是对象的引用。一根绳子同时只能连着一个气球,就像一个引用同时只能指向一个对象;可以用多根绳子同时连接一个气球,也就是可以有多个引用同时指向同一个对象;如果某个气球没有任何绳子连着它,那它就会飞走,同样,某个对象如果没有引用连接它,它就会成为垃圾,等着被java的垃圾收集器回收;如果某根绳子没有连接任何气球,那么它就是一个空引用,对它的访问没有意义。同样,某个引用如果没有指向对象,那么对它的访问将会抛出NullPointerException24. 练习:判断下列语句中的a和b的值是否相等: (1) int a=0; int b=0; a=0,b=48 (2) int a=0; char b=u0000; a=0,b=null (3) int a=123; char b=u007B; a=123,b= (4) int a=0x123(16进制); char b=123; a=291,b= (5) int a=3+5; char b=8; a=56,b=8 (6) int a=3+5; char b=8; a=104,b=8 (7) char a=u0000; char b=0; a=null,b=025. 逻辑运算符:& | !1.支持短路运算&:左边表达式为false,右边表达式不会被执行|:左边表达式为true,右边表达式不会被执行位运算符:不支持短路运算& 、|、 、 、 、1. :取反。1变0,0变12.&:按位与。有0为03.:按位异或。相同为0,不同为14.|:按位或。有1为1- :将一个数的各二进制位全部右移若干位,移到右端的低位被舍弃,最高位则移入原来高位的值 例如 :a = 00110111,则 a2 = 00001101 b = 11010011,则 b2 = 11110100 :一个数的各二进制位无符号右移若干位,与运算符相同,移出的低位被舍弃,但不同的是最高位都补0。 如: a = 00110111, 则 a2 = 00001101b = 11010011, 则 b2 = 00110100 :用来将一个数的各二进位全部左移若干位。高位左移后溢出舍弃,低位补0例如:a = 00001111,则a2 = 00111100。使用最快的算法求2的3次方:22(2*2*2)26. 类型转换:1.隐式自动转换:将占用空间小的赋值给占用空间大的 向上转型、自动进行2.强制类型转换:将占用空间大得赋值给占用空间小的 向下转型、强制进行double d = 0.1;float f = (float)d;27. switch case:说明:1.表达式expression可以是以下四种基本数据类型和枚举类型(byte,short,int,char)2.case子句中的值必须是常量,而且所有case子句中的值应是不同的。3.case通常与break语句联用,以保证多路分支的正确实现,多个case可以公用一组执行语句。28. break;continue;break语句,跳出它所在的循环语句或switch 语句,并从紧跟该循环语句或switch 语句后的第一条语句处执行continue语句,用来结束本次循环,跳过循环体中下面尚未执行的语句,接着进行终止条件的判断,以决定是否继续循环Day3:29. 数组声明、初始化:int arr2 = 1,2,3,4,5;int a = new int5;int b = 1,2,3,4;int c = new int1,2,3,4;int d = new int31,2,3;/不合法-char 缺省值为0所对应的字符boolean缺省值为falseUser 自定义类型数组缺省值为null求数组的长度:ar.length 属性30. 二维数组循环打印:for(int m=0;mh.length;m+)for(int n=0;n轿车-卡车 *特化*轿车(颜色、牌子、方向盘、轮胎、后备箱)卡车类(颜色、牌子、方向盘、轮胎、货箱)汽车类(颜色、牌子、方向盘、轮胎)轿车-卡车-汽车 *泛化*39. 继承:子类可以继承父类中被public、protected修饰的属性和方法private的属性和方法不可以被继承子类的构造方法第一句一定是调用父类中的构造方法(super()隐藏的)40. super关键字:1.调用父类的方法或属性,前提是方法和属性在子类中是可见的2.super()调用父类中的无参构造3.在调用父类构造方法的时候必须放在第一句41. 方法的覆盖:一定发生在继承关系中1.方法名、参数列表、返回值全部一致2.子类的访问修饰符大于或等于父类的访问修饰符3.子类的返回值类型可以是父类返回值类型的子类型(JDK1.5以上版本)42. 多态:是允许将父对象引用一个子对象的技术Employee employee = manager;允许父类对象来引用子类对象,但是实际运行过程中调用的是子类的方法或者属性编译时调用父类方法,运行时调用的是实际引用类型的方法,这种现象叫做动态绑定多态现象:运行时多态、编译时多态1.编译时多态:方法的重载(不建议举例)2.运行时多态:方法的覆盖(建议举例)属性有没有多态性,有1父类静态3父类实例4父类构造2子类静态5子类实例6子类构造instanceof判断一个对象是否属于指定的类,判断依据运行时该引用变量所引用的对象的类43. 练习String类是否可以被继承 不能public final class String extends ObjectDay544. static关键字:1.修饰变量,变量被所有实例所共享2.修饰方法,方法内不可以引用非静态成员;但是非静态方法可以引用静态成员45. 单例模式:一个类的实例只能存在一个a.构造方法私有化1.懒汉式,缺点多线程访问不安全public static Singleton2 getInstance()if(st = null)st = new Singleton2();return st;elsereturn st;2.恶汉式,缺点可能造成空间的浪费private static Singleton st1 = new Singleton();46. abstract类:1.如果一个方法没有方法体,那么该方法一定为abstract方法2.如果一个类中有一个abstract的方法,那么该类一定为abstract类3.abstract类不能被实例化,只能通过字类来实现 Abstract a = new MyClass();/MyClass extends Abstract47. 接口:1.接口是一个特殊的抽象类2.接口中的方法都是public 的抽象方法3.一个类可以实现多个接口InterfaceTest implements MyInterfaceA,MyInterfaceB4.接口中的所有属性都会自动声明为final static(全局常量)final static int a = 10;public abstract void showA();修饰符类内部同一个包子类 不同包public Y Y Y Yprotected Y Y Y N缺省 Y Y N Nprivate Y N N N(基本数据类型都可以用=比较)=与equals的区别:在Object类中equals(Object obj)方法与=的比较结果一致的但是equals是一个方法可以被重写,例如在String类中equals比较的就是字符串的内容包装类用于基本数据类型的区别:1.包装类是对基本数据类型的一种扩展,定义了很多类型之间的转换方法2.针对一些集合类型,他们要求我们存入集合的是Object,那么基本数据类型不能满足要求,就只能放包装类的对象Day6异常与错误:1.异常是在一个程序执行过程中出现的一个事件,它中断了正常指令的执行2.偏离了可接受代码的一个动作或实例就是错误异常结构的分类: Throwable Error Exception未检查异常(运行时)已检查异常(编译时)48. 对异常处理方式-捕获:try catch(Exception e)*注意:catch()代码块可以存在多个,但是catch中的异常类型应该由小到大try catch(Exception e)finally*注意:tryfinally可以搭配使用编译时异常举例:FileInputStream fin = new FileInputStream(./a.txt);上面代码在编译时出错,必须对可能发生的异常进行处理,否则代码编译不通过对异常的处理-抛出:throws表明当前函数不处理出现的异常,将异常抛出,交给调用方去处理(处理的方式:捕获、继续抛出)throw关键字,表明被捕获的异常没有经过处理直接抛出public static String compare(String str) throws Exceptiontry if(str.equals(abc)return abc;else return str; catch (Exception e) throw e; /e.printStackTrace(); /System.out.println(e.getMessage();自定义异常:class MyException extends Exceptionpublic MyException(String message)super(message);-在继承关系中,子类覆盖父类的方法,抛出的异常类型不能比父类更宽泛Java高级的课程内容:1.java集合2.反射3.多线程4.I/O5.网络编程6.JDK5.0新特性49. JAVA内部类的作用:一、 定义放在一个类的内部的类我们就叫内部类。二、 作用1.内部类可以很好的实现隐藏,也就是封装性。一般的非内部类,是不允许有 private 与protected权限的,但内部类可以2.内部类拥有外围类的所有元素的访问权限3.可是实现多重继承4.可以避免修改接口而实现同一个类中两种同名方法的调用三、 例子1.实现隐藏平时我们对类的访问权限,都是通过类前面的访问修饰符来限制的,一般的非内部类,是不允许有 private 与protected权限的,但内部类可以,所以我们能通过内部类来隐藏我们的信息。可以看下面的例子Java代码 复制代码 1. package beyondx; 3. public class Example # private class InsideClass implements InterfaceTest # # public void test() # # System.out.println(这是一个测试); # # # public InterfaceTest getIn() # # return new InsideClass(); # # package beyondx; public class Example private class InsideClass implements InterfaceTest public void test() System.out.println(这是一个测试); public InterfaceTest getIn() return new InsideClass(); 上面的InsideClass就是一个内部类,访问修饰符是private客户端程序Java代码 复制代码 1. package insidecategory; 2. 3. public class TestExample 4. 5. public static void main(String args) 6. 7. Example a=new Example(); 8. InterfaceTest a1=a.getIn(); 9. a1.test(); 10. 11. package insidecategory; public class TestExample public static void main(String args) Example a=new Example(); InterfaceTest a1=a.getIn(); a1.test(); 从这段代码里面我只知道Example的getIn()方法能返回一个InterfaceTest 实例但我并不知道这个实例是这么实现的。而且由于InsideClass 是private的,所以我们如果不看代码的话根本看不到这个具体类的名字,所以说它可以很好的实现隐藏。2.可以无条件地访问外围类的所有元素Java代码 复制代码 1. package beyondx; 2. 3. public class TagBean 4. 5. private String name=luffyke; 6. private class InTest 7. 8. public InTest() 9. 10. System.out.println(name); 11. 12. 13. public void test() 14. 15. new InTest(); 16. 17. public static void main(String args) 18. 19. TagBean bb=new TagBean(); 20. bb.test(); 21. 22. package beyondx; public class TagBean private String name=luffyke; private class InTest public InTest() System.out.println(name); public void test() new InTest(); public static void main(String args) TagBean bb=new TagBean(); bb.test(); 看上面name这个变量是在TagBean里面定义的私有变量。这个变量在内部类中可以无条件地访问System.out.println(name);3.可以实现多重继承这个特点非常重要,个人认为它是内部类存在的最大理由之一。正是由于他的存在使得Java的继承机制更加完善。大家都知道Java只能继承一个类,它的多重继承在我们没有学习内部类之前是用接口来实现的。但使用接口有时候有很多不方便的地方。比如我们实现一个接口就必须实现它里面的所有方法。而有了内部类就不一样了。它可以使我们的类继承多个具体类或抽象类。大家看下面的例子。类一Java代码 复制代码 1. package beyondx; 2. 3. public class Example1 4. 5. public String name() 6. 7. return luffyke; 8. 9. package beyondx; public class Example1 public String name() return luffyke; 类二Java代码 复制代码 1. package beyondx; 2. 3. public class Example2 4. 5. public int age() 6. 7. return 25; 8. 9. package beyondx; public class Example2 public int age() return 25; 类三Java代码 复制代码 1. package beyondx; 2. 3. public class MainExample 4. 5. private class test1 extends Example1 6. 7. public String name() 8. 9. return (); 10. 11. 12. private class test2 extends Example2 13. 14. public int age() 15. 16. return super.age(); 17. 18. 19. public String name() 20. 21. return new test1().name(); 22. 23. public int age() 24. 25. return new test2().age(); 26. 27. public static void main(String args) 28. 29. MainExample mi=new MainExample(); 30. System.out.println(姓名:+(); 31. System.out.println(年龄:+mi.age(); 32. 33. package beyondx; public class MainExample private class test1 extends Example1 public String name() return (); private class test2 extends Example2 public int age() return super.age(); public String name() return new test1().name(); public int age() return new test2().age(); public static void main(String args) MainExample mi=new MainExample(); System.out.println(姓名:+(); System.out.println(年龄:+mi.age(); 大家注意看类三,里面分别实现了两个内部类 test1,和test2 ,test1类又继承了Example1,test2继承了Example2,这样我们的类三MainExample就拥有了Example1和 Example2的方法和属性,也就间接地实现了多继承。四、 避免修改接口而实现同一个类中两种同名方法的调用。大家假想一下如果,你的类要继承一个类,还要实现一个接口,可是你发觉你继承的类和接口里面有两个同名的方法怎么办?你怎么区分它们?这就需要我们的内部类了。看下面的代码接口Java代码 复制代码 1. package beyondx; 2. 3. public interface Incrementable 4. 5. void increment(); 6. package beyondx; public interface Incrementable void increment(); 类 MyIncrementJava代码 复制代码 1. package beyondx; 2. 3. public class MyIncrement 4. 5. public void increment() 6. 7. System.out.println(Other increment(); 8. 9. static void f(MyIncrement f) 10. 11. f.increment(); 12. 13. 14. package beyondx; public class MyIncrement public void increment() System.out.println(Other increment(); static void f(MyIncrement f) f.increment(); 大家看上面加黑的部分,两个方法都是一样的。在看下面这个类要继承这两个类如果不用内部类Java代码 复制代码 1. package beyondx; 2. 3. public class Callee2 extends MyIncrement implements Incrementable 4. 5. public void increment() 6. 7. /代码 8. 9. package beyondx; public class Callee2 extends MyIncrement implements Incrementable public void increment() /代码 想问一下大家increment()这个方法是属于覆盖MyIncrement这里的方法呢?还是Incrementable这里的方法。我怎么能调到MyIncrement这里的方法?显然这是不好区分的。而我们如果用内部类就很好解决这一问题了。看下面代码Java代码 复制代码 1. package beyondx; 2. 3. public class Callee2 extends MyIncrement 4. 5. private int i=0; 6. private void incr() 7. 8. i+; 9. System.out.println(i); 10. 11. private class Closure implements

温馨提示

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

评论

0/150

提交评论