Java复习文档

来源:互联网 发布:中国海洋大学网络登录 编辑:程序博客网 时间:2024/05/29 07:33

引用类型变量可以存放该类对象的地址信息,通常称为“指向该类的对象”
当一个引用类型变量指向该类的对象时,就可以通过这个变量对对象实施访问;
除8中基本类型之外,用类、接口、数组等声明的变量都称为引用类型变量,简称“引用”;
Cell c = new Cell();
NullpointerException

SELECT * FROM wms_trackinginfo WHERE created >= ‘2016-03-20 00:00:00’ AND created <= ‘2016-03-21 00:00:00’;

JVM内存分为“堆”、“栈” 和“方法区”三个区域,分别用于存储不同的数据
对象存储在堆中
JVM在其内存空间开辟一个称为“堆”的存储空间,这部分空间用于存储使用new关键字所创建的对象
访问对象需要依靠引用变量
当一个对象没有任何引用时,被视为废弃的对象,属于被回收的范围,该对象中的所有成员变量也随之被回收
成员变量的生命周期为:从对象在堆中创建开始到对象从堆中被回收结束
垃圾回收机制 GCC 是JVM自带的一个线程(自动运行着的程序),用于回收没有任何引用指向的对象
Java程序的内存泄漏问题,内存泄漏是指,不再使用的内存没有被及时的回收,严重的内存泄漏会因过多的内存占用而导致程序的崩溃
System.gc()方法
栈用于存放方法中的局部变量
局部变量的生命周期:
一个运行的Java程序从开始到结束会有多次方法的调用,JVM会为每一个方法的调用在栈中分配一个对应的空间,这个空间称为该方法的栈帧,一个栈帧对应一个正在调用中的方法,栈帧中存储了该方法的参数,局部变量等数据,当某一个方法调用完成后,其对应的栈帧将被清除,局部变量失效

成员变量和局部变量的差别:
局部变量:①定义在方法中②没有默认值,必须自行设定初始值③方法被调用时,存在栈中,方法调用结束,从栈中清除
成员变量:①定义在类中,方法外②有默认初始值,可以不显示初始化③所在类被实例化后,存在堆中,对象被回收时,成员变量失效

方法区用于存放类的信息
方法区用于存放类的信息,Java程序运行时,首先会通过类装载器载入类文件的字节码信息,经过解析后将其载入方法区,类的各种信息(包括方法)都在方法区存储

父类的引用指向子类的对象 一个子类的对象可以向上造型为父类的类型
父类的引用可以指向子类的对象,但通过父类的引用只能访问父类所定义的成员,不能访问子类扩展的部分

方法的重写 子类可以重写(覆盖)继承自父类的方法,即方法名和参数列表与父类的方法相同,但方法的实现不同
当子类对象的重写方法被调用时(不论是通过子类的引用调用还是通过父类的引用调用)运行的事子类的重写后的版本;
子类在重写父类的方法时,可以通过super关键词调用父类的版本

重写和重载的区别
重载与重写是完全不同的语法现象,区别如下
重载:指在一个类中定义多个方法名相同但参数列表不同的方法,在编译时,根据参数的个数和类型来决定绑定哪个方法;
重写:指在子类中定义和父类完全相同的方法,在程序运行时,根据对象的类型不同(而不是引用类型)而调用不同的版本;
重载遵循所谓”编译器绑定”,即在编译时根据参数变量的类型判断应该调用哪个方法;
重写遵循所谓”运行期绑定”,即在运行的时候根据引用变量指向的实际对象类型调用方法;

封装的意义:
对外提供可调用的、稳定的功能;
封装容易变化的、具体的实现细节,外界不可访问,这样的意义在于:
降低代码出错的可能性,便于维护;
当内部的实现细节改变时,只要保证对外的功能定义不变,其他的模块就不会因此而受到牵连;
private修饰的成员变量和方法仅仅只能在本类中调用;
public修饰的成员变量和方法可以在任何地方调用;
public休息的内容是对外提供可以被调用的功能,需要相对稳定;private修饰的内容是对内实现的封装,如果”公开”会增加维护成本;
用protected修饰的成员变量和方法可以被子类及同一个包中的类使用;
默认访问控制即不书写任何访问控制符,默认访问控制的成员变量和方法可以被同一个包中的类调用
修饰符 本类 同包类 子类 其他类
public 可以 可以 可以 可以
protected 可以 可以 可以 不
默认 可以 可以 不 不
private 可以 不 不 不
static修饰成员变量
用static修饰的成员变量不属于对象的数据结构
static变量是属于类的变量,通常可以通过类名来引用static成员
static成员变量和类的信息一起存储在方法区,而不是在堆中,一个类的static成员变量只有”一份”,无论该类创建了多少对象。
static修饰方法:通常方法都会涉及到对具体对象的操作,这些方法在调用时,需要隐式的传递对象的引用(this)
static修饰方法:由于static在调用时没有具体的对象,因此在static方法中不能对非static成员(对象成员)进行访问,static方法的作用在于提供一些”工具方法”和”工厂方法”等
static块属于类的代码块,在类加载期间执行的代码块只执行一次,可以用来在软件中加载静态资源
final修饰变量:final关键字修饰的成员变量,意为不可改变
final修饰成员变量,两种方式初始化:①声明同时初始化②构造函数中初始化
final关键词也可以修饰局部变量,使用之前初始化即可;
final关键词修饰的方法不可以被重写;
使一个方法不能被重写的意义在于:防止子类在定义新方法时造成的”不经意”重写;
static final常量:static final修饰的成员变量称为常量,必须在声明同时初始化,不可改变;
static final 常量会在编译器被替换;
方法重写遵循”两同两小一大”:
“两同”即方法名相同,形参列表相同;
“两小”指的是子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的一场类更小或相等;
“一大”指的是子类方法的访问权限应比父类方法的访问权限更大或相等;

由abstract修饰的方法为抽象方法,抽象方法只有方法的定义,没有方法体实现,用一个分号结尾
一个类中如果包含抽象方法,该类应该用abstract关键词声明为抽象类;
如果一个类继承了抽象类,必须重写其抽象方法(除非该类也声明为抽象类);
抽象类不可以实例化;
即使一个类中没有抽象方法,也可以将其定义为抽象类,同样,该类不可以实例化;
abstract和final关键字不可以同时用于修饰一个类,因为final关键字使得类不可继承,而abstract修饰的类如果不可以继承将没有任何意义;
一个类继承抽象类后,必须重写其抽象方法,不同的子类可以有不同的实现;
抽象类的意义:
为其子类提供一个公共的类型;
封装子类中的重复内容(成员变量和方法);
定义有抽象方法,子类虽然有不同的实现,但该方法的定义是一致的;
接口可以看成是特殊的抽象类,即只包含有抽象方法的抽象类;通过interface关键字定义接口;
接口中不可以定义成员变量,但是可以定义常量;接口中只可以定义没有实现的方法(可以省略public abstract);
与继承不同,一个类可以实现多个接口,实现的接口直接用逗号分开.当然,该类需要实现这些接口中定义的所有方法;
一个类可以通过implements关键词”实现”接口,一个类实现了某个接口后必须实现该接口中定义的所有方法;
接口可以作为一种类型声明变量,一个接口类型的变量可以引用实现了该接口的类的对象;通过该变量可以调用该接口中定义的方法(具体的实现类提供了方法的实现);
接口间可以存在继承关系,一个接口可以通过extends关键字继承另外一个接口,子接口继承了父接口中定义的所有方法;
一个类的对象可以向上造型的类型有:
①父类的类型 ②其实现的接口类型
Java编译器根据类型检查调用方法是否匹配;
强制转型:可以通过强制转换将父类型变量转换为子类型变量,前提是该变量指向的对象确实是该子类类型
也可以通过强制转换将变量转换为某种接口类型,前提是该变量指向的对象确实实现了该接口
如果强制转换过程中出现违背上述两个前提,将会抛出ClassCastException;
在强制转型中,为了避免出现ClassCastException,可以通过instanceof关键字判断某个引用指向的对象是否为指定类型;
定义成员内部类:一个类可以定义在另外一个类的内部,定义在类内部的类称之为Inner,其所在的类称之为Outer;
Inner定义在Outer的内部,通常只服务于Outer,对外部不具备可以见性,Inner可以调用Outer的成员及方法(包括私有的);
创建内部类对象:一般情况下,Inner对象会在Outer对象中创建(构造方法或其他方法);Inner对象中会有一个隐式的引用指向创建它的Outer类对象;
定义匿名内部类:如果在一段程序中需要创建一个类的对象(通常这个类需要实现某个接口或者继承某个类),而且对象创建后,这个类的价值也就不存在了,这个类可以不必命名,称之为匿名内部类;
面向对象特征:
封装、继承、多态;
JDK包含大量的API类库,所谓API(应用程序编程接口);
JDK API包含的类库功能强大,经常使用的有:字符串操作、集合操作、文件操作、输入输出操作、网络操作、多线程等等;
java.lang Java程序的基础类,如字符串、多线程等,该包中类使用的频率非常高,不需要import,可以直接使用;
java.util 常用工具类,如集合、随机数产生器、日历、时钟等;
java.io 文件操作、输入/输出操作;
java.net 网络操作;
java.math 数学运算相关操作;
java.secunity 安全相关操作;
java.sql 数据库访问;
java.text 处理文字、日期、数字、信息的格式;
@author Zhangbx 作者
@version 1.204 17/03/30 版本
@see java.lang.StringBuffer 参见
@since JDK1.0 始于JDK版本
String是不可变对象
java.lang.String使用了final修饰,不能被继承;
字符串底层封装了字符数组及针对字符数组的操作算法;
字符串一旦创建,对象永远无法改变,但字符串引用可以重新赋值;
Java字符串在内存中采用Unicode编码方式,任何一个字符对应两个字节的定长编码;
String常量池:Java为了提高性能,静态字符串(字面量/常量/常量连接的结果)在常量池中创建,并尽量使用同一个对象,重用静态字符串;
对于重复出现的字符串的直接量,JVM会首先在常量池中查找,如果存在即返回该对象;
内存编码及长度:String在内存中采用Unicode编码,每个字符占用两个字节;任何一个字符(无论中文还是英文)都算1个字符长度,占用两个字节;
indexOf方法用于实现在字符串中检索另外一个字符串;
String提供几个重载的indexOf方法;
int indexOf(String str)
int indexOf(String str,int fromIndex)
int lastIndexOf(String str,int index)
substring方法用于返回一个字符串的子字符串;
substring常用重载方法如下:
String substring(int beginIndex,int endIndex)
String substring(int beginIndex)
trim 去掉一个字符串的前导和后继空字符;
char charAt(int index)
startsWith endsWith检测一个字符串是否以指定字符串开头或结尾;
toUpperCase toLowerCase 转换字符串中英文字母的大小写形式;
valueOf 将其他类型转换为字符串类型;
StringBuilder封装可变字符串,对象创建后可以通过调用方法改变其封装的字符序列;
StringBuilder是可变字符串,字符串的内容计算,建议采用StringBuilder实现,这样性能好一些;
java的字符串连接的过程是利用StringBuilder实现的;
StringBuffer和StringBuilder区别
StringBuffer是线程安全的,同步处理的,性能稍慢;
StringBuilder是非线程安全的,并发处理的,性能稍快;
matches(正则表达式)方法:将一个字符串与正则表达式进行匹配,如果匹配成功就返回true,否则返回false;
String的split方法可以将字符串按照特定的分隔符拆分成字符串数组;
String[] split(String regex)参数regex为正则表达式;
replace字符串替换的方法 String replaceAll(String regex,String replacement)
在Java类继承结构中,java.lang.Object类位于顶端;
如果定义一个Java类时没有使用extends关键字声明其父类,则其父类默认为java.lang.Object类;
Object类型的引用变量可以指向任何类型对象;
如何重写toString方法
Object类中的重要方法,用于返回对象值的字符串表示,原则上建议重写,格式大多数遵循”类的名字[域名]”例如:
public String toString(){
return getClass().getName()+”[name=”+ name +”]”;
}
equals方法:作用在于检测一个对象是否等于另外一个对象;
在Object类中,这个方法判断两个对象是否具有相同的引用,即是否为相同的对象;
如何重写equals方法:
public boolean equals(Object obj){
if(obj == null){
return false;
}
if(this == obj){
return true;
}
if(obj.instanceof Cell){
Cell cell = (Cell)obj;
return cell.row == row && cell.col == col;
}else{
return false;
}
}
equals和==的区别
==用于比较变量的值,可以应用于任何类型,如果用于引用类型,比较的是两个引用变量中存储的值(地址信息),判断两个变量是否指向相同的对象;
rquals是Object的方法,重写以后,可以用于比较两个对象的内容是否”相等”;
特别注意:Object默认的equals方法的比较规则同==;
在进行类型转换的范畴内,有一种特殊的转换,需要将int这样的基本数据类型转换为对象;
所有基本类型都有一个与之对应的类,即包装类;
包装类是不可变类,在构造了包装类对象后,不允许更改包装在其中的值;
包装类是final的,不能定义他们的子类;
抽象类Number是Byte、Double、Float、Integer、Long和Short类的父类;
Number的子类不许提供将表示的数值转换为byte;
java.util.Date类封装日期及时间信息;
Date类的大多数用于进行时间分量的方法已经被Calendar取代;
使用setTime和getTime设置及获取时间;
SimpleDateFormat java.text.SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类;
将Date格式化为String
将String格式化为Date
Calendar java.util.Calendar类用于封装日历信息,其主要作用在于其方法可以对时间分量进行运算;
Calendar是抽象类,其具体子类针对不同国家的日志系统,其中最为广泛的是GregorianCalendar,对应世界上绝大多数国家/地区使用的标准日历系统;
getInstance方法 Calendar提供了一个类方法getInstance以获得此类型的一个通用对象,该方法返回一个Calendar对象,其日历字段已由当前日期和时间初始化;
Calendar c = Calendar.getInstance();
getActualMaximum 给定此Calendar的时间值,返回指定日历字段可能拥有的最大值;
List可重复集 Set不可重复集
Java提供了一个可以对文件随机访问的操作,访问包括读和写操作.该类名为RandomAccessFile.该类的读写基于指针的操作;
RandomAccessFile提供了一个可以向文件中写出字节的方法 void write(int d)
该方法会根据当前指针所在位置处写入一个字节,是将参数int的”低8位”写出;
进程和线程的区别:
一个进程至少有一个线程;
线程的划分尺度小于进程,使得多线程程序的并发性高,另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率;
线程在执行过程中与进程的区别在于每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口.但是线程不能够独立运行,必须依存在应用程序中,由应用程序提供多个线程执行控制;
从逻辑角度看,多线程的意义在于一个应用中,有多个执行部分可以同时执行,但操作系统并没有将多个线程看做多个独立的应用来实现进程的调度和管理以及资源分配;

内连接 外链接 mysql数据库

JDBC工作原理:
-加载驱动、建立连接;
-创建语句对象;
-执行SQL语句;
-处理结果集;
-关闭练级;

JSP隐含对象
输入输出对象 request response out
作用域通信对象 session application pageContext
Servlet对象 page config
异常对象 exception

0 0
原创粉丝点击