java基础知识问题解答文档格式.docx
《java基础知识问题解答文档格式.docx》由会员分享,可在线阅读,更多相关《java基础知识问题解答文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
非静态方法可以被继承和重写,因此可以实现多态。
6.继承里面的super关键字
A.如果子类继承父类,在子类中怎么调用指定的构造方法:
super(参数);
且super(参数)是写在子类构造方法的第一行,如果子类构造方法中没有super那么就是默认super();
B.如果在子类中一定要执行父类的某个构造方法,那么就super.Method(参数)
C.先静态方法(静态代码块),后构造方法。
在声明阶段时候:
static就会被创建。
7.重写(Override)的原则和原因:
原则:
A.同名,同参,同返回值,顺序和个数一致;
B.接口的重写方法的修饰符只能大于或者等于父类的修饰符。
C.子类重写的异常只能小于等于父类的异常。
如果发现父类的行为不能解决子类的问题,那么我们就重写父类的行为(覆盖父类的行为)。
8.重写(Override)与重载(Overload)的区别:
A.重载在一个类中:
同名,不同的参数个数或者类型。
B.重写在继承关系中:
同名,同参。
9.四大修饰符合基本数据类型:
private它修饰的属性,方法都只能在本类中访问
public它修饰的,是所有类都可以访问
缺省它修饰的,只能在本包中访问
protected它修饰的只能在本包以及子类中访问
修饰符本类本包不同包的父子类其他类
Private√
friendly√√
Protected√√√(子类)
Public√√√√
基本数据类型:
Boolean,byte
(1),char(8),short(16),int(32),float(32),double(64),long(64)
(大小:
-2的(次方)-1~~~~2的(次方))
10.类与类的关系(对象与对象的关系):
一对多的关系;
多对多的关系;
一对一的关系(讨论:
角色,用户,权限之间的关系);
(重写toString可以输出所有的属性)
11.类和对象的定义,关系与区别
定义:
类的概念:
类是具有相同属性和服务的一组对象的集合。
它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。
在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。
对象的概念:
对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。
一个对象由一组属性和对这组属性进行操作的一组服务组成。
从更抽象的角度来说,对象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用;
它是一组属性和有权对这些属性进行操作的一组服务的封装体。
客观世界是由对象和对象之间的联系组成的。
关系:
类与对象的关系就如模具和铸件的关系
类的实例化结果就是对象,而对一类对象的抽象就是类.类描述了一组有相同特性(属性)和相同行为(方法)的对象。
区别:
A.类是一个抽象的概念,它不存在于现实中的时间/空间里,类只是为所有的对象定义了抽象的属性与行为。
就好像“Person(人)”这个类,它虽然可以包含很多个体,但它本身不存在于现实世界上。
B.对象是类的一个具体。
它是一个实实在在存在的东西。
C.类是一个静态的概念,类本身不携带任何数据。
当没有为类创建任何对象时,类本身不存在于内存空间中。
D.对象是一个动态的概念。
每一个对象都存在着有别于其它对象的属于自己的独特的属性和行为。
对象的属性可以随着它自己的行为而发生改变。
12.多态的定义,表现形式,作用,例子;
多态指同一个实体同时具有多种形式。
表现形式:
方法的多种表现形式:
方法的多态(通过:
重载与重写来完成);
对象的多种表现形式:
对象的多态(通过继承来完成,只有在运行是才能确定父类的引用具体指向哪一个对象)
作用:
提高代码灵活性,可以重用以及拓展(提高代码的可拓展性(兼容),可维护性)
可拓展性:
当增加一个需求时候,我们不需要修改一个类中的方法。
(就说功能强,兼容强,拓展好)
例子:
通过父类来达到兼容子类(publicvoidjudge(classc)class就是父类。
只有在这个方法运行时候我们才可以知道judge的方法指向那个对象)
13.封装的定义,表现形式,作用,例子;
定义
A.封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口。
B.封装把对象的所有组成部分组合在一起;
封装定义程序如何引用对象的数据?
封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。
A.对象的数据封装特性彻底消除了传统结构方法中数据与操作分离所带来的种种问题,提高了程序的可复用性和可维护性,降低了程序员保持数据与操作内容的负担。
B.对象的数据封装特性还可以把对象的私有数据和公共数据分离开,保护了私有数据,减少了可能的模块间干扰,达到降低程序复杂性、提高可控性的目的。
14.控制反转
控制反转(InversionofControl,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。
控制反转一般分为两种类型,依赖注入(DependencyInjection,简称DI)和依赖查找(DependencyLookup)。
依赖注入应用比较广泛。
15.OOPXX百科,J2EEXX百科
J2EE为搭建具有可伸缩性、灵活性、易维护性的商务系统提供了良好的机制;
16.Exception(异常)
学习异常的原因,怎么处理异常(1.编译时异常,2,运行时异常);
概念:
(concept)
就是java.lang.Exception(所有具体异常父类)这个类用于表示异常(异常不等于错误);
java.lang.Throwable的子类和java.lang.Error都是Throwable的子类
方法:
(method)
Exception()构造详细消息为null的新异常。
Exception(Stringmessage)构造带指定详细消息的新异常。
Exception(Stringmessage,Throwablecause)构造带指定详细消息和原因的新异常。
Exception(Throwablecause)常用的实例方法
voidprintStackTrace()将此throwable及其追踪输出至标准错误流(默认是在控制台输出)。
StringgetMessage()返回此throwable的详细原因。
处理异常:
try{写代码}
catch(异常类变量){处理异常}......catch(异常类变量){处理异常}
Finally{不管发生还是不发生异常finally都会执行}(运行时候:
System.exit(0)关闭进程)
17.final和finally的区别,throw与throws的区别
final是定义常量的关键字,而finally是在异常中最终执行的关键字
throw是抛出异常对象,写在方法里面的;
throws是抛出异常类,写在方法头。
为什么要使用throw,throws?
throw,throws这2个关键字一起使用吗?
如果是写了throw,throw后面不是运行时异常carch(exceptione){thrownewRuntimeException()}那么throws一定要写;
如果throw后面是运行时异常(thrownewRuntimeException())那么throws可以不写;
反过来如果写了throws那么throw可以不写,但是在调用这个方法里面一定要处理。
throws我们一般用于判断方法体是否出现错误
自定义异常
我们的异常只有那么多在开发中远远不够所以我们可以自定义异常做法
classMyExceptionextendsException或者Throwable{
写4个构造方法这4个构造方法的参数分别与Exception或者Throwable一致
4个构造方法中我们就可以一行代码super(参数分别是构造方法的参数)
}
publicclassMyExceptionextendsException{
publicMyException(){}
publicMyException(Stringmessage){
super(message);
}
publicMyException(Stringmessage,Throwablecause){
super(message,cause);
publicMyException(Throwablecause){
super(cause);
}
18.类图怎么画(类图XX百科)
加号(+)表示public;
减号(-)表示private;
#号表示protected;
省略这些修饰符表示具有package(包)级别的可见性。
继承(Inheritance),关联关系(Association),聚合关系(Aggregation),复合关系(Composition),依赖关系(Dependency)。
19.UML(UnifiedModelingLanguage
)图(UMLXX百科)
(说明:
UML中的类图,建议采用office系列中的visio来画)
20.E-R图(E-RXX百科)
21.StingexetendsObjectimplementsSerializable,Comparable<
String>
CharSequence
Serializable:
序列化,便于在网络中传输和保存;
Comparable<
:
比较:
这是让自定义类(class)的对象变成“可比较的”对象,能被排序、查找等各类工具比较使用。
CharSequence:
字符序列:
CharSequence与String都能用于定义字符串,但CharSequence的值是可读可写序列,而String的值是只读序列。
22.API中的String
一对双引号里面的内容就是字符串;
说明:
字符串是一个特殊的对象(放在(类区)字符串池里面),字符串是常量,即:
字符串一旦初始化就不可以改变。
字符串是应用数据类型。
字符串会在对象声明的时候被创建。
本质:
就是一个字符数组(CharSequence)。
它们的值在创建之后不能更改。
字符串缓冲区支持可变的字符串。
因为String对象是不可变的,所以可以共享。
(对象的实例化一般是放在堆里面)
Stringstr1=”abc”;
(产生一个对象,在字符串池:
里面声明是创建了一个对象)
inti=1;
(基本数据类型:
放在栈里面,不产生对象)
Stringstr2=newString(”abc”);
(产生两个对象;
“abc”就是一个常量在对象声明的时候就会放到(内区)字符串池里面,就创建了一个对象。
New的话会在堆里面开辟一个内存空间,初始化的时候:
就把abc放到里面来,又产生了一个对象。
str2是指向堆里面的首地址)
如果字符串池里面创建了一个对象,那么下面就可以直接用这个对象,不用创建了。
23.String的构造方法(API),常用的方法
String(byte[]
bytes)
bytes,Charset
charset)(Charset
描述)
(GB2312,GBK简体中文,GBK1830,BJG,UTF-8统一编码,ISO-8859-1拉丁系列)
byte[]b={};
Strings=newString(b,”GBK”);
System.out.print(s);
(不同的字节数组,用不同的编码格式,就会有不同的显示(解码))
字符串是一个特殊的对象,字符串不可以修改
字符串常量保存在内存的字符串池中
常用方法
length求数组的长度(s.length)
charAt在某个位置的字符(s.charAt
(2))
indexOf求字符的下标(s.indexof('
a'
)从左做到右)
lastIndexOf求字符的下标(s.lastIndexof('
)从右做到左)字符下标不会改变
substring求子字符串,就是求某一部分字符串;
(s.substring
(2))
split()分隔符号
toCharArray()
getBytes()
s.replaceAll(“a”,”b”)s中的b替换a
大小写转换(toUpperCase())
字符串替换
trim()(只能去掉前后的空格)
Concat(“”)(把字符串连接起来)
equals(比较字符是否相等)
equalsIgnoreCase(不比较大小写)
toLowerCase(转成小写)
contains(包含返回true)
startsWith(是不是以什么前缀开始)
endsWith(是不是以什么后缀结束)
比较
compareTo(按照字典的顺序)
intern方法()返回字符串对象的规范化(得到池里面的数据)
作业
1:
给定一个字符串数组。
按照字典顺序进行
从小到大的排序
一个子串在整串中出现的次数
3:
两个字符串中最大相同的子串
24.正则表达式:
(javascript用的比较多)
替换,比较,分割,查找,匹配等
API中的正则表达式:
字符,字符类,POSIX字符类....;
如:
Strings=”[abc]”;
”a”.matches(s);
匹配:
a是否满足s这个正则表达式
“’.repalceAll(s,s1)替换:
“”.split(s)分割:
25.API中的StringBuffer(字符串的缓冲类)
线程安全的可变字符序列。
一个类似于String的字符串缓冲区;
String与StringBuffer的区别:
String是不可变的字符串,StringBuffer是可变的字符串;
如果字符串常量数据不大,我们就使用String,字符串数据大的使用StringBuffer。
publicstaticvoidpinjieString(Objectobj){
//构建一个可变字符串的对象可变字符串StringBuffer对拼接字符串使用最多
StringBuffersb=newStringBuffer("
insertinto"
);
//把任意类里面的类名找出来拼接到sb对应的字符串缓冲区的后面
Classclazz=obj.getClass();
StringtableName=clazz.getSimpleName();
sb.append(tableName+"
("
//把任意类里面的属性名找出来然后拼接到sb对应的字符串缓冲区的后面
Fieldfs[]=clazz.getDeclaredFields();
for(Fieldf:
fs){
sb.append(f.getName()+"
"
sb.deleteCharAt(sb.lastIndexOf("
));
sb.append("
)values("
sb.append("
?
)"
System.out.println(sb);
26.API中的StringBuilder(不安全的)
一个可变的字符序列。
此类提供一个与StringBuffer兼容的API,但不保证同步。
将StringBuilder的实例用于多个线程是不安全的。
如果需要这样的同步,则建议使用StringBuffer。
27.了解和学习一个对象的步骤
第一步:
类的作用;
第二步:
看构造方法;
第三步:
看实例方法;
第四步:
网上搜索常用的方法进行测试。
28.进程与线程(进程的线程XX百科)
进程(Process)
是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的本单位,是操作系统结构的基础。
基
狭义定义:
进程是正在运行的程序的实例(aninstanceofacomputerprogramthatisbeingexecuted)。
广义定义:
进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。
它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
线程
是程序中一个单一的顺序控制流程。
进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。
在单个程序中同时运行多个线程完成不同的工作,称为多线程;
要做游戏可以学习:
Thread和Socket
29.API中的System
System类包含一些有用的类字段和方法。
它不能被实例化。
A:
可以表示标准输入流:
System.in
B:
可以表示标准输出流:
System.out
C:
可以的到系统的当前时间:
System.currentTimeMillis();
为单位
D:
强行关闭当前进程:
System.exit();
E:
垃圾运行机制:
System.gc();
F:
确定当前的系统属性:
System.getProperties();
Propertiesps=System.getProperties();
Stringstr=ps.getproperty(“key”);
(key表示就是这个方法中你要得到的键名,str就是值)
30.API中的Runtime
每个Java应用程序都有一个Runtime类实例,使应用程序能够与其运行的环境相连接。
可以通过getRuntime方法获取当前运行时。
应用程序不能创建自己的Runtime类实例。
意思:
就是使用Runtime这个类,可以调用其他程序
(对于没有单例和没有构造方法,我们就get一下、如:
Rutimert=Runtime.getRuime();
其他我们可以new一下、如:
StringBuffers=newStringBuffer();
)
RutimeRt=Runtime.getRuime();
Try{Peocessp=Rt.exec(“c:
\\QQ.exe”);
//在单独的进程中执行指定的字符串命令。
P.destroy;
//就是杀死子进程
31.包装类
就是对基本数据类型进行包装的类
byte--Byte
boolean--Boolean
short--Short
int--Integer
float--Float
double--Double
char--Character
long-Long
为什么要包装?
最大的作用就是进行类型转换;
比如说字符串转换为各种类型,包装类.parseXXX("
字符串"
//Integer.parseInt("
abc"
//java.lang.NumberFormatException
//各种包装类valueOf(各种基本类型数据)
//把基本类型转换为包装类可以采用构造方法还可以采用valueof
staticvoidvalueof(){
Integeri=Integer.valueOf(10);
//把10变成包装类}
包装是比如这个10,就从栈里面保存到了堆里面
staticStringtoBinaryString(各种基本类型i)
以二进制无符号整数形式返回各种基本类参数的字符串表示形式。
staticStringtoHexString(各种基本类型i)
以十六进制无符号整数形式返回各种基本类参数的字符串表示形式。
staticStringtoOctalString(各种基本类型i)
以八进制无符号整数形式返回各种基本类参数的字符串表示形式
Stringv=Integer.toBinaryString(123);
System.out.p