-1-Java基础1.什么是类?类是某一种事物的一般性的集合体,是相同的或相似的各个事物共同特性的一种抽象。2.什么是对象?在面向对象概念中,对象是类的实例。对象与类的关系就像变量与数据类型的关系一样。3.类的核心特性封装性:类的封装性为类的成员提供公有的、缺省的、保护的、私有的等多级访问权限。目的是隐藏类中的私有变量和类中方法的实现细节。继承性:类的继承性提供从已存在的类创建新类的机制,继承使一个新类自动拥有被继承类的全部可继承的成员。多态性:类的多态性提供类中方法执行的多样性,有两种表现形式:重载和覆盖。4.方法:对象中方法表达了对象所具有的行为。5.属性:一个对象的属性是能够被外界或对象所处的环境所感知或操纵的数据或状态。6.什么是Java?Java是一门易于编程的跨平台编程语言,同时又是一个开发、应用、执行和部署的平台。7.为什么要有Java?Java与平台无关、一次编译处处运行、以及他的易于编程的特性。8.Java开发程序的步骤?编写源代码(2)编译(3)执行9.Java的环境变量1)JAVA–HOMEjdk的安装路径2)CLASSPATHjvm转载class字节码文件时的搜索路径3)PATH是系统的环境变量、命令的搜索路径10.JVM:JavaVirtualMachine是一个逻辑的操作系统、它屏蔽了硬件和平台的信息、jvm能将字节码文件解释并执行、正是这种独立执行的方式是Java具有与平台无关的特性。11.类的加载过程:类加载器加载字节码文件到内存、jvm内存数据区将对象状态放置在堆区、各线程使用的变量放在栈区、类的特征放在方法区、然后进行字节码验证再执行。12.常用的Java命令:Javac、java、javadoc、jar13.类的语法与规范一个源文件只能有一个public的类Public源文件可以有多个类定义源文件名必须与public类名保持一致包名必须放在第一行包名可以有0个或1个但不能有多个源文件如果带包的话最好存放在包结构对应的目录下标识符程序语言用于标识变量名类名方法名的字符串就是标识符。标识符必须字母下划线美元符开头大小写敏感。类名要求首字母大写方法名首字母小写每个单词首字母大写常量名所有字母大写如果有两个或几个字母的联合用下划线连接关键字:程序语言中、程序已经所有用户不能再使用的单词一般关键字都是小写14.数据类型:基本数据类型:整型(byte、short、int、long)默认是int浮点型(float、double)、默认是double布尔型(boolean)、字符型(char)引用类型:类、接口、数组15.main()方法执行过程1)先到方法区搜索student、如果搜索不到则去加载student的字节码文件2)通过classpath查找对应的student字节码文件找不到就返回错误(ClassNotFound)3)将字节码文件的二进制数据转换为class对象放置于方法区(class对象描述了student类的方法特征及静态成员等)加载完成4)验证字节码文件-2-5)在堆区中划分空间放置student对象6)在栈区放置应用类型变量stu、stu指向student对象的地址7)student对象存放了class对象的地址8)通过studentstu引用类型变量的值找到student对象、通过student对象存放class对象的地址找到对应的study()方法然后执行。9)释放资源jvm运行结束16.基本类型和引用类型的区别引用类型存放的是对象的地址、基本类型存放的是变量的实际值引用类型变量可用指向复杂的数据结构引用类型变量可使用“.”操作来访问它所指向的方法或属性17.表达式运算符和操作数按照一定的规则组成的语句.赋值运算符“=”比较运算符“”“”“=”“=”相等运算符“==”位运算符~:取反、^:异或、|:或、&:与逻辑运算符“&&”“||”条件运算符a?b:c18.变量的作用域(1)类的成员变量:静态成员变量:生命周期从类加载开始到类被卸载结束初始化后被放在方法区实例成员变量:变量初始化放在堆区、生命周期从生成对象开始到对象被回收时结束(2)局部变量:方法或代码块中定义的变量、局部变量从栈区弹出结束、局部变量在使用前必须初始化(3)方法的参数(4)异常的参数19.数组:是相同类型元素的线性集合是一个指向数组的引用对象20.集合框架Iterator是一个迭代器接口ListIterator继承自Iterator是子接口只能用于list接口Collection是集合框架的顶层接口List有序可重复ArrayList实现了可变数组的数据结构LinkedList实现了双向链表的数据结构Set无序不可重复HashSet实现了无序不可重复-3-LinkedHashSet有序不可重复(插入的顺序)TreeSet升序不可重复Map是一个key、value对映射HashMap按照key无序LinkedHashMap按照key有序TreeMap按照key升序Collections是集合框架的辅助类(工具类)里边的所有方法都是static的Arrays是对数组的工具类Comparable、Comparator是做比较排序的21.Vector和ArrayList的区别:1)Vector是线程安全的(同步的)ArrayList不是ArrayList的效率高一些2)当初始容量满的时候Vector增加原来的一倍、ArrayList增加原来的一半22.HashTable和HashMap的区别:1)HashTable是线程安全HashMap不是HashMap的效率会高一些2)HashMap允许null的key存在HashTable不允许23.Setset=Map.keySet();Iteratorit=set.iterator();While(it.hasnext()){}24.类的结构类名、属性名(静态属性、实例属性)、方法(静态方法、实例方法)、构造器(缺省构造器、带参构造器)静态代码块static、实例代码块this.25.参数传递对于基本类型将实际的变量的值原样的赋值以便传值对于引用类型将引用类型变量的地址赋值给实参26.this关键字都在什么地方使用1)实例变量与局部变量同名用this区分实例变量名与局部变量名2)在构造器重载时、用this调用其它构造器3)在实例方法中用来当作当前对象的引用传给其它方法27.方法的重载方法名要相同、在同一类中多个方法有不同的方法签名方法签名具有参数类型参数个数和参数顺序、返回类型不做要求28.类的初始化过程1)在堆区分配空间new的过程2)给对象属性赋默认值3)调用构造方法进一步赋值29.构造器类中提供的用于初始化对象的特殊的方法、这个方法于类同名无返回值、类中没有提供构造器jvm会提供一个不带参的缺省构造器、类中有带参的构造器jvm就不提供了30.详细说明封装、继承、和多态封装:将类的实现细节隐藏起来、对外提供一致的接口、提高系统的维护性继承:定义:一个类自动获得另一个类的属性或者方法的过程使用方面:extends关键字、单根继承、所有类都是Object类的子类、构造器不能被继承、子类初始化时会默认情况下调用父类缺省的构造器、子类调用父类带参的构造器则父类可以不提供缺省的构造器否则一定要有个缺省的构造器如何使用继承?1)区分has-a和is-a2)子类要扩充父类的功能-4-3)子类需要大量置换父类的功能时不能使用继承4)不要从工具类中继承优缺点:优点:继承是最容易复用代码的形式、修改父类的功能时子类可以自动获得新的功能缺点:打破了封装、只是类型复用多态:编译时编译器检查声明类型和方法信息运行时jvm对实例方法和引用变量和实际引用对象动态绑定,对静态方法和引用变量声明的类型静态绑定类的属性在编译阶段绑定31.instanceof:判断实例是否为某个类型或子类型(1)只能在父子类进行比较(2)Null可以进行比较结果为false(3)判断实例类型时,一般从子类开始,然后父类32.override:方法覆盖。子类重写父类中的方法子类重写父类中的方法的条件:(1)方法名相同(2)方法签名相同(参数)(3)返回值相同(4)子类的修饰符要大于等于父类的修饰符(5)子类抛出的异常要小于等于父类抛出的异常33.依赖关系(1)一个类中的方法,其局部变量类型是另一个类,则这两个类具有依赖关系(2)一个类中的方法调用另一个类中的静态方法,则这两个类具有依赖关系(3)一个类中的方法中参数是另一个类的静态方法,则这两个类具有依赖关系34.多态的运行机制(1)在类编译阶段,编译器会检查类型是否匹配(2)在运行阶段,jvm会调用实例的对应方法,先检查父类方法,然后检查子类方法,然后会检查实例声明的类型35.Super调用父类的属性和方法、子类和父类有同名的方法时,子类可用super区分是父类的方法36.final(1)final修饰的类不能被继承(2)final修饰的方法不能被覆盖(3)final修饰的变量是常量,常量不可修改但有例外实例常量:若定义时没有赋值,则可以在构造器或实例代码块中赋值,构造器或者代码块赋值只能有一个静态常量:若定义时没有赋值,则可以在静态代码块中赋值,37.抽象类具有部分实现的类。使用时的注意事项:(1)不能实例化(2)可有0到多个抽象方法(3)可有构造器(4)具体类继承抽象类时必须实现所有的抽象方法(5)抽象类可以间接的被子类调用其构造器,并在内存中分配空间,间接实例化(6)抽象类可以有静态方法,可以返回其子类的实例怎样使用抽象类?(1)把各个类中可以共用的方法和逻辑放到抽象的父类中,越多越好(2)属性应尽可能放到子类中-5-38.接口定义:从宏观角度说是一个规范,从面向对象角度说,接口是一种抽象类型(1)属性是常量,一定要赋值(2)方法是抽象方法(3)没有构造器(4)接口支持casting(强制类型转换)(5)接口可以继承自多个接口(6)实现接口的类必须要实现所有的方法,如果是抽象类可以选择实现部分的方法为什么要使用接口?(1)可插拔性的保证,可以随意更换接口的实现类(2)接口可以解决多继承的问题(3)接口使规范的制定者、实现者、使用者分开39.接口和抽象类的区别(1)接口没有任何实现,而抽象类可以有部分实现也可以没有(2)如果需要复用或者共享代码,应该用抽象类而不是接口(3)继承无法解决的类型转换问题,接口是为解决这问题而产生的40.访问控制作用域当前类同一package子孙类其他packagepublic√√√√protected√√√×default√√××private√×××41.static修饰符(1)可以修饰属性,称为静态属性,全类公有常叫做类变量,和具体对象无关,无多态,类名去访问,类加载的时候初始化(2)修饰方法,静态方法中只能访问静态成员,非静态方法可以访问静态成员,工具类的对象都是static的(3)修饰代码块,初始代码块是在类中,而不在任何方法之内的代码块,被static修饰的代码块称为静态代码块,静态代码块在类加载的时候运行一次42.异常定义:jvm将程序运行中的不正常情况的现场信息打包成一个对象,这个对象就是异常类对象。并且将此对象抛出,交由相应的方法或对象处理。异常信息记录了错误的原因,指出了错误的位置,打印错误的栈信息。异常处理机制是责任链机制即子类取默认值不处理,交由父类处理直到追究到jvm然后抛给用户43.为什么处理异常?最本质的原因是让程序执行完毕44.异常类的层次结构Throwable:Error:是错误,程序运行中发生的系统异常,此种异常当前程序一般无法解决Exeption:checked()编译器强迫必须捕获并处理的异常Unchecked(RuntimeExeption、)对于此种异常编译器不要求捕获原因是:低级错误(low-grademistake)、程序员可以避免的错误当错误发生时、捕获异常也无济于事45.如何处理异常(1)交给自己处理、交由当前方法处理(2)交给别人处理、由调用该方法的方法来处理-6-