1.作用域pulic,private,protected以及不写的区别?重写和重载的区别?
作用域 当前类 同一package 子孙类 其它package
public √ √ √ √
protected √ √ √
friendly(不写时,默认) √ √
private √
2.单例设计模式的实现方式?
饿汉式单例:
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton(){}
public static Singleton getInstance(){ return singleton; }
}
懒汉式单例:
public class Singleton {
private static Singleton singleton;
private Singleton(){}
public static synchronized Singleton getInstance(){
if(singleton==null){ singleton = new Singleton(); }
return singleton; }
}
3.& 和 &&区别? | 和|| 区别?
& :无论左边结果是什么,右边都参与运算。 &&:短路与,如果左边为false,那么右边不参数与运算。
|:两边都运算。 ||:短路或,如果左边为true,那么右边不参与运算。
4.在java中一个类被声明为final类型,表示了什么意思? 表示该类不能被继承,是顶级类。
5.谈谈final, finally, finalize的区别。
final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。
finally—在异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
6.Collection 和 Collections的区别。
Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。
Collection是个java.util下的接口,它是各种集合结构的父接口。
7.Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;
8.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。
9.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值
10.常见的runtime Exception?
UnsupportedOperationException不支持的操作,illegalArgumentException非法参数,IndexOutOfBoundsException索引出界,ClassCastException数据类型转换异常, NullPointerException空指针异常, illegalStateException非法状态ArithmeticException除数为0的异常,BufferOverflowException缓冲区上溢异常,BufferUnderflowException缓冲区下溢异常,EmptyStackException空栈异常,illegalArgumentException不合法的参数异常, NoSuchElementException方法未找到异常
11.Java异常处理机制?运行时异常与一般异常有何异同?
A.在方法中用try...catch语句捕获并处理异常,catach语句可以有多个,用来匹配多个异常B.对于处理不了的异常或者要转型的异常,在方法的声明处通过throws语句抛出异常: 如果每个方法都是简单的抛出异常,那么在方法调用方法的多层嵌套调用中,Java虚拟机会从出现异常的方法代码块中往回找,直到找到处理该异常的代码块为止。然后将异常交给相应的catch语句处理。如果Java虚拟机追溯到方法调用栈最底部main()方法时,如果仍然没有找到处理异常的代码块,将调用异常的对象的printStackTrace()方法,打印方法调用栈的异常信息,如果出现异常的线程为主线程,则整个程序运行终止;如果非主线程,则终止该线程,其他线程继续运行
异常处理的语法规则:
1.try语句不能单独存在,可以和catch、finally组成 try...catch...finally、try...catch、try...finally三种结构,catch语句可以有一个或多个,finally语句最多一个,try、catch、finally这三个关键字均不能单独使用。
2.try、catch、finally三个代码块中变量的作用域分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。
3.多个catch块时候,Java虚拟机会匹配其中一个异常类或其子类,就执行这个catch块,而不会再执行别的catch块。
4.throw语句后不允许有紧跟其他语句,因为这些没有机会执行。
5.如果一个方法调用了另外一个声明抛出异常的方法,那么这个方法要么处理异常,要么声明抛出。
运行时异常与一般异常的异同:
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
12.MVC的各个部分都有那些技术来实现?如何实现?
MVC是Model-View-Controller的简写。"Model" 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), "View" 是应用的表示面(由JSP页面产生),"Controller" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。
13.请你谈谈SSH整合
SSH:Struts2(表示层)+Spring(业务层)+Hibernate(持久层)
Struts2是一个表示层框架,主要作用是界面展示,接收请求,分发请求。在MVC框架中,Struts2属于VC层次,负责界面表现,负责MVC关系的分发;Hibernate是一个持久层框架,它只负责与关系数据库的操作;Spring是一个业务层框架,是一个整合的框架,能够很好地黏合表示层与持久层。
14.Hibernate的五个核心接口
Configuration接口:配置Hibernate,根据其启动hibernate,创建SessionFactory 对象;
SessionFactory 接口:初始化Hibernate,充当数据存储源的代理,创建session 对象,sessionFactory 是线程安全的,意味着它的同一个实例可以被应用的多个线程共享,是重量级、二级缓存;
Session 接口:负责保存、更新、删除、加载和查询对象,是线程不安全的,避免多个线程共享同一个session,是轻量级、一级缓存;
Transaction 接口:管理事务;
Query 和Criteria 接口:执行数据库的查询。
15.jsp有哪些内置对象?作用分别是什么?
JSP有9种基本内置组件:
request(用户端请求,此请求会包含来自GET/POST请求的参数);response(网页传回用户端的回应);pageContext(网页的属性是在这里管理);session(与请求有关的会话期);application (Servlet正在执行的内容); out(用来传送回应的输出);config(Servlet的构架部件);page(当前对象,JSP网页本身);exception (针对错误网页,未捕捉的例外)
16.JAVA Servlet API中forward()与redirect()的区别?
forward()仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;redirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。从浏览器的地址栏中可以看到跳转后的链接地址。所以,forward()更加高效,在forward()可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。
17.String,StringBuffer,StringBuilder的区别?
String:内容不能更改,执行速度最低
StringBuffer:(可变字符序列)可以通过某些特殊方法改变,线程安全,同步效率低
StringBuilder:(可变字符序列)可以通过某些特殊方法改变,线程不安全,不同步(支持异步操作),效率高,执行速度最高
18.类有哪三个基本特性?各特性的优点?
封装性:类的封装性为类的成员提供公有、缺省、保护和私有等多级访问权限,目的是隐藏类中的私有变量和类中方法的实现细节。
继承性:类的继承性提供从已存在的类创建新类的机制,继承(inheritance)使一个新类自动拥有被继承类(父类)的全部可继承的成员。
多态性:类的多态性提供类中方法执行的多样性,多态性有两种表现形式:重载和覆盖。
19.HashMap与TreeMap的区别?ArrayList和Vector的区别?
HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。
Vector是线程安全的,也就是说是同步的,而ArrayList是线程不安全的,不是同步的;数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半。
20.集合框架:
Collection集合:
List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重.
ArrayList:底层的数据结构是数组,线程不同步,ArrayList替代了Vector,查询元素的速度非常快。
LinkedList:底层的数据结构是链表,线程不同步,增删元素的速度非常快。
Vector:底层的数据结构就是数组,线程同步的,Vector无论查询和增删都巨慢。
Set:无序(存入和取出顺序有可能不一致),不可以存储重复元素。必须保证元素唯一性。
HashSet:底层数据结构是哈希表,线程是不同步的。无序,高效;
TreeSet:对Set集合中的元素的进行指定顺序的排序。不同步。TreeSet底层的数据结构就是二叉树。
Map集合:
Hashtable:底层是哈希表数据结构,是线程同步的。不可以存储null键,null值。
HashMap:底层是哈希表数据结构,是线程不同步的。可以存储null键,null值。替代了Hashtable.
TreeMap:底层是二叉树结构,可以对map集合中的键进行指定顺序的排序。
21.List、Map、Set三个接口存储元素时各有什么特点?
List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。
Set是一种不包含重复的元素的Collection, Set最多有一个null元素。
Map接口:请注意,Map没有继承Collection接口,Map提供key到value的映射
22.常用的设计模式有哪些?说明工厂模式?
Java中的23种设计模式:
Factory(工厂模式), Builder(建造模式),Factory Method(工厂方法模式),
Prototype(原始模型模式),Singleton(单例模式),Facade(门面模式),
Adapter(适配器模式),Bridge(桥梁模式),Composite(合成模式),
Decorator(装饰模式),Flyweight(享元模式),Proxy(代理模式),
Command(命令模式),Interpreter(解释器模式),Visitor(访问者模式),
Iterator(迭代子模式),Mediator(调停者模式),Memento(备忘录模式),
Observer(观察者模式),State(状态模式),Strategy(策略模式),
Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)
工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。
23. 在java语言中int 和 Integer 有什么区别?
int是基本数据类型,Integer是int的包装类,属于引用类型
24.多线程有几种实现方法,都是什么?同步的方法有几种,都是什么?
多线程有两种实现方法:继承Thread类或者实现Runnable接口。
实现同步也有两种方法:一种是同步方法,另一种是同步代码块。同步方法是在方法返回类型前面加上synchronized关键字;同步代码块是synchronized (这里写需要同步的对象){…}
25.Tomcat服务器的默认端口是多少?怎样修改tomcat的端口?
默认端口为8080,可以通过service.xml的Connector元素的port属性来修改端口。
26.线程死锁的必要条件?怎么克服?
产生死锁的四个必要条件:互斥条件:一个资源每次只能被一个进程使用。请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。
死锁的解决方法:a 撤消陷于死锁的全部进程;b逐个撤消陷于死锁的进程,直到死锁不存在;c从陷于死锁的进程中逐个强迫放弃所占用的资源,直至死锁消失。d从另外一些进程那里强行剥夺足够数量的资源分配给死锁进程,以解除死锁状态
27.cookie和session的区别?什么是Cookie?什么是Session?
区别:Cookie采用的是在客户端保持状态的方案,而Session采用的是在服务器端保持状态的方案;同时我们也看到,由于在服务器端保持状态的方案在客户端也需要保存一个标识,所以Session可能需要借助于Cookie来达到保存标识的目的,但实际上还有其他选择。
Cookie:如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里;如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享.
Session:是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。但程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否包含了一个session标识-称为session id,如果已经包含一个session id则说明以前已经为此客户创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个,这种情况可能出现在服务端已经删除了该用户对应的session对象,但用户人为地在请求的URL后面附加上一个JSESSION的参数);如果客户请求不包含session id,则为此客户创建一个session并且生成一个与此session相关联的session id,这个session id将在本次响应中返回给客户端保存。
28."=="和equals方法究竟有什么区别?
== 专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等
equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。
29.静态变量和实例变量的区别?
语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加
程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了
30.abstract class和interface有什么区别?
含有abstract修饰符的class即为抽象类,abstract类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。
语法区别:
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4.抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5.抽象类中可以包含静态方法,接口中不能包含静态方法
6.抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7.一个类可以实现多个接口,但只能继承一个抽象类
31.GC是什么? 为什么要有GC?
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
32.heap和stack有什么区别。
java的内存分为两类,一类是栈内存,一类是堆内存。栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这个栈中的变量也将随之释放。
堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的那些数据,例如,使用new创建的对象都放在堆里,所以,它不会随方法的结束而消失。方法中的局部变量使用final修饰后,放在堆中,而不是栈中。
33.Request对象的主要方法:
setAttribute(String name,Object):设置名字为name的request的参数值
getAttribute(String name):返回由name指定的属性值
getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例
getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组
getCharacterEncoding():返回请求中的字符编码方式
getContentLength():返回请求的Body的长度
getHeader(String name):获得HTTP协议定义的文件头信息
getHeaders(String name):返回指定名字的request Header的所有值,结果是一个枚举的实例
getHeaderNames():返回所以request Header的名字,结果是一个枚举的实例
getInputStream():返回请求的输入流,用于获得请求中的数据
getMethod():获得客户端向服务器端传送数据的方法
getParameter(String name):获得客户端传送给服务器端的有name指定的参数值
getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例
getParametervalues(String name):获得有name指定的参数的所有值
getProtocol():获取客户端向服务器端传送数据所依据的协议名称
getQueryString():获得查询字符串
getRequestURI():获取发出请求字符串的客户端地址
getRemoteAddr():获取客户端的IP地址
getRemoteHost():获取客户端的名字
getSession([Boolean create]):返回和请求相关Session
getServerName():获取服务器的名字
getServletPath():获取客户端所请求的脚本文件的路径
getServerPort():获取服务器的端口号
removeAttribute(String name):删除请求中的一个属性
34.两种跳转方式分别是什么?有什么区别?
forward跳转:<jsp:forward page ="跳转页面地址">
response跳转:response.sendRedirect("跳转页面地址");
forward跳转:服务器端跳转,地址栏不改变。执行到跳转语句后马上执行跳转,之后的代码不再执行(跳转之前一定要释放全部资源)。request设置的属性在跳转后的页面仍然可以使用。
response跳转:客户端跳转,地址栏改变。所有代码执行完毕后跳转。跳转后页面不能使用上一个页面的request。使用地址重写传递参数(response.sendRedirect("URL?参数名=参数值"))。
35.数据类型(基本数据类型,引用数据类型)
基本数据类型:①数值型:a.整数型(byte,short,int,long) b.浮点类型(float单精度小数,double双精度小数) ②字符型:(char) ③布尔型{(boolean)true为真,fales为假}
引用数据类型:①类(class)字符串是系统定义的一个类 ②接口(interface)③数组([])
36.运算符:
+(加),-(减), *(乘),/(除),%(求余,即取摸),==(相等),!=(不等),++(自增),--(自减),&(按位与),^(按位异域),|(按位或),||(逻辑或,即或者),&&(逻辑与,即并且) x+=5;与x=x+5相等;
37.循环 判断
选择判断:①if判断:if(条件){满足条件执行的代码};②if(条件){满足条件执行的代码}else{不满足条件执行的代码};③if(条件1){满足条件1执行的代码}else if(条件2){满足条件2执行的代码}else{不满足前面两个条件执行的代码}④switch(变量或表达式){case 常量1:语句1;语句2;break;case 常量2:语句3;语句4;break;default(前面都不满足就执行):语句;语句;break;} switch变量或表达ih式只能使用:byte,short,char,int几种类型(JDK1.7以后使用字符串);
循环:①先判断后执行:while(循环条件){循环操作};②先执行后判断至少执行一次do{循环操作}while(循环条件);③for(参数初始化;条件判断;循环条件){循环操作;};
break:改变程序控制流(结束所有循环)常用于switch结构和循环结构 Continue:结束本次循环,跳过本次循环中continue后面的语句,下次循环是否继续还是会正常判断(结束当前的本次循环)常用于一般循环结构
38.函数?如何定义一个函数?函数:为了提高代码的复用性,可以将其定义成一个单独的功能,该功能的体现就是java中的函数。java函数的定义格式:修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数1,…){执行语句;return 返回值;}
当函数没有具体的返回值时,返回的返回值类型用void关键字表示。如果函数的返回值类型是void时,return语句可以省略不写的,系统会帮你自动加上。return的作用:结束函数.结束功能.如何定义一个函数?函数其实就是一个功能,定义函数就是实现功能,通过两个明确来完成:①明确该功能的运算完的结果,其实是在明确这个函数的返回值类型。②在实现该功能的过程中是否有未知内容参与了运算,其实就是在明确这个函数的参数列表(参数类型&参数个数)。函数的作用:①用于定义功能。②用于封装代码提高代码的复用性。注意:函数中只能调用函数,不能定义函数。主函数:①保证该类的独立运行。②因为它是程序的入口。③因为它在被jvm调用。函数定义名称是为什么呢?①为了对该功能进行标示,方便于调用。②为了通过名称就可以明确函数的功能,为了增加代码的阅读性。
39.Java把内存划分为4个部分:①栈区(stacksegment)由编译器自动分配释放,存放函数的参数值,局部变量的值等,具体方法执行结束之后,系统自动释放JVM内存资源②堆区(heapsegment)一般由程序员分配释放,存放由new创建的对象和数组,jvm不定时查看这个对象,如果没有引用指向这个对象就回收③静态区(datasegment)存放全局变量,静态变量和字符串常量,不释放④代码区(codesegment)存放程序中方法的二进制代码,而且是多个对象共享一个代码空间区域
40.一维数组:用于存储同一类型数据的一个容器。好处:可以对该容器中的数据进行编号,从0开始。数组用于封装数据,就是一个具体的实体。
如何在java中表现一个数组呢?两种表现形式。①元素类型[] 变量名 = new 元素类型[元素的个数];②元素类型[] 变量名 = {元素1,元素2...};③System.arrayCopy(source,0,dest,0,x):语句的意思就是:复制源数组从下标0开始的x个元素到目标数组,从目标数组的下标0所对应的位置开始存取。④Arrays.sort(数组名)为数组排序的操作,但这个方法在java.util这个包里面,所以在用到的时候需要先将它导入
41.面向对象:
面向过程的编程语言:c;面向对象的编程语言:c++,c#,Java
一切皆对象:对象:现实中客观存在的具体实体 类:将具有共同属性和行为的对象进行抽象得到一个抽象的概念 对象:①属性:外部特征,字段,成员变量②方法:对象具有的行为,动作,功能
面向对象的三大特征:封装(隐藏内部细节,对外提供一个公共的接口)继承(子类继承父类)多态(同一方法不同实现)
创建对象:类名 对象名=new 类名(); ①引用对象成员用'.'进行操作②引用类的属性:对象名.属性③引用类的方法:对象名.方法名()
定义方法的语法:①访问修饰符 返回值类型 方法名(参数列表){方法体} ②无参方法:访问修饰符 返回值类型 方法名(){方法体} 如果方法具有返回值,方法必须用返回值return,返回值类型为该返回值的类型,方法是个'黑匣子',完成某个特定的应用程序功能,并返回结果
方法调用:执行方法中包含的语句 静态方法不需要用对象来调 方法可以嵌套调用,但不能嵌套定义 方法允许相互调用,不需要知道方法的具体实现
成员变量:类里面定义的变量,Java会给成员变量赋予初始值 局部变量:除去成员变量其余均是局部变量,Java不会给成员变量赋予初始值 局部变量和成员变量同名,局部变量会隐藏成员变量,通过这个变量名访问的是局部变量,若想访问成员变量(this.变量名)。
形参:定义方法时的参数 实参:调用方法时使用的参数 方法无参:调用方法时,程序流程会进入方法定义中,去执行方法体中的代码 方法有参:调用方法时,程序流程会进入方法定义中,(如果方法有参数,程序会把实参的值赋给形参)去执行方法体中的代码,方法调用结束后形参的值不会赋给实参.
基本数据类型做参数:形参改变,实参不变;引用数据类型做参数:形参改变,实参也变(字符串例外). 基本数据类型:数据存储在栈区,值拷贝会把数据类型复制一份(两个变量用两份数据);引用数据类型:数据存储在内在的堆区,栈中存放的是堆空间的地址,赋地址(两个变量使用同一空间内存中的同一数据)
构造函数:用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种。特点:①该函数的名称和所在类的名称相同。②不需要定义返回值类型。③该函数没有具体的返回值。记住:所有对象创建时,都需要初始化才可以使用
this:代表对象.(this.属性;this.方法())用this调用构造函数,必须定义在构造函数的第一行。因为构造函数是用于初始化的,所以初始化动作一定要执行。否则编译失败。
static:关键字,是一个修饰符,用于修饰成员(成员变量和成员函数)。特点:①想要实现对象中的共性数据的对象共享。可以将这个数据进行静态修饰。②被静态修饰的成员,可以直接被类名所调用。也就是说,静态的成员多了一种调用方式。类名.静态方式。③静态随着类的加载而加载。而且优先于对象存在。final:关键字,最终的,不能再改变
静态成员:类加载的时候,加载到方法区 非静态成员:创建对象的时候 java基础怎么理解 同一类,非静态方法可以直接调用本类的静态方法;同一类,静态方法可以直接调用本类的静态方法,不能调用非静态方法。
代码块:静态代码块:类加载的时候,只执行一次;构造代码块:创建一个对象,执行一次;局部代码块:定义在方法中的代码块。
继承:Object(所有类的最终父类,任何类都直接或间接继承自它) 子类对象创建时,会先调用父类的构造方法,如果没有指定调用谁,系统自动调用父类默认无参的构造方法;可以指定调用父类的某个构造方法,必须放在构造方法的第一条语句:super();类中一般都显示默认无参的构造方法.super 关键字,代表父类对象 super();super(name)在子类构造方法调用且必须是第一句. super.name;访问父类的属性 super.print;访问父类方法 子类会继承父类的私有成员,受peivate访问权限的限制继承了也无法访问;子类不会继承父类的构造函数但可以调用访问修饰符.多重继承关系的初始化顺序:父类属性父类构造方法子类属性子类构造方法 super()或者this():为什么一定要定义在第一行?因为super()或者this()都是调用构造函数,构造函数用于初始化,所以初始化的动作要先完成。
重写:发生在父子类之间,方法名相同,参数的类型.个数.顺序相同,返回值相同,访问权限不能更封闭,抛出异常不能宽泛;重载:发生在同一个类中,方法名相同,但是参数不同(类型不同或个数不同或参数的顺序不同),返回值可以不相同。 子类对象如何实现父类方法可以重写a.直接使用父类实现 super.print(); b.使用父类实现其他父类没有实现的功能 super.print() c.子类实现方法时和父类实现的功能安全不同。
抽象类:随着程度越高,一般来讲在继承关系节点上层的类,对这样的类创建对象已经没有意义了,我们就把它定义成抽象类.public abstract class 类名{} 抽象类可以定义子类的共同方法,但有些方法在父类中实现也没有意义,这样的方法就是定义成抽象方法.访问修饰符abstract 返回值类型(参数) 抽象方法只定义,不实现 子类继承父类就要实现父类的抽象方法,除非子类也是抽象类.抽象类可以没有抽象方法;一个类有抽象方法,这个类必须是抽象类。
多态:(同一方法不同实现)a.子类重写父类的方法 b.子类对象赋值给父类对象c.使用父类对象调用方法,调用的是子类的方法 多态是针对方法而言,属性和多态无关.
Interface(接口):接口的特征:a.接口不可以被实例化b.实现类必须完成接口的所有方法c.实现类可以实现多个接口d.接口中的变量都是静态变量 抽象类:对一组有共性的事物进行抽象 接口:考虑一组功能和类之间的共性无关.
42.内部类:把类定义在其他类的内部 内部类访问特点:a.内部类可以直接访问外部类的成员包括私有b.外部类要访问内部类的成员,必须创建对象 内部类的种类:成员位置(成员内部类)局部位置(局部内部类)匿名内部类(重点) 当内部类定义在外部类中的成员位置上,可以使用一些成员修饰符修饰 private、static。内部类编译后的文件名为:“外部类名$内部类名.java”;1:默认修饰符。直接访问内部类格式:外部类名.内部类名 变量名 = 外部类对象.内部类对象;Outer.Inner in = new Outer.new Inner();但是这种应用不多见,因为内部类之所以定义在内部就是为了封装。想要获取内部类对象通常都通过外部类的方法来获取。这样可以对内部类对象进行控制。2:私有修饰符。通常内部类被封装,都会被私有化,因为封装性不让其他程序直接访问。 3:静态修饰符。如果内部类被静态修饰,相当于外部类,会出现访问局限性,只能访问外部类中的静态成员。注意;如果内部类中定义了静态成员,那么该内部类必须是静态的。为什么内部类可以直接访问外部类中的成员呢?那是因为内部中都持有一个外部类的引用。这个是引用是 外部类名.this 内部类可以定义在外部类中的成员位置上,也可以定义在外部类中的局部位置上。当内部类被定义在局部位置上,只能访问局部中被final修饰的局部变量。
匿名内部类 new 类名或接口名(){重写方法;} 类名可以是普通类也可以是抽象类,一般是抽象类和接口的情况多没有名字的内部类.就是内部类的简化形式.一般只用一次就可以用这种形式.匿名内部类其实就是一个匿名子类对象.想要定义匿名内部类:需要前提,内部类必须继承一个类或者实现接口。匿名内部类的格式:new 父类名&接口名(){ 定义子类成员或者覆盖父类方法 }.方法。
43. 异常:就是不正常。程序在运行时出现的不正常情况。其实就是程序中出现的问题。这个问题按照面向对象思想进行描述,并封装成了对象。因为问题的产生有产生的原因、有问题的名称、有问题的描述等多个属性信息存在。当出现多属性信息最方便的方式就是将这些信息进行封装。异常就是java按照面向对象的思想将问题进行对象封装。Error:错误,一般情况下,不编写针对性的代码进行处理,通常是jvm发生的,需要对程序进行修正。Exception:异常,可以有针对性的处理方式 受控异常(编译异常):必须处理,否则编译出错 非受控异常(运行时异常):可以不处理,编译器不检查
45.多线程: 进程:一个正在运行的程序 线程:一个进程的执行分支 多线程:一个程序如果有多条执行路径 并行:逻辑上同时发生,指在某一时间内同时运行多个程序 并发:物理上同时发生,指在某一时间点同时运行多个程序 线程调度:计算只有一个CPU,Cpu在某一个时刻只能执行一条指令 线程调度模型:a.分时调度:所有线程轮流使用cpu的使用权,平均分配每个线程占用的cpu时间片 b.抢占式调度模型:优先让优先级高的使用cpu,若线程的优先相同那么会随机选择一个.优先级高的线程获取的cpu时间片相对多一些。线程的生命周期(线程状态):a被创建(start()):创建线程对象b运行:具备执行资格,同时具备执行权;c冻结:sleep(time),wait()—notify()唤醒;线程释放了执行权,同时释放执行资格;d临时阻塞状态:线程具备cpu的执行资格,没有cpu的执行权;e消亡:stop()
wait和sleep区别: 分析这两个方法:从执行权和锁上来分析:wait:可以指定时间也可以不指定时间。不指定时间,只能由对应的notify或notifyAll来唤醒。sleep:必须指定时间,时间到自动从冻结状态转成运行状态(临时阻塞状态)。wait:线程会释放执行权,而且线程会释放锁。Sleep:线程会释放执行权,但不是不释放锁。同步:好处:解决了线程安全问题。弊端:相对降低性能,因为判断锁需要消耗资源,产生了死锁。线程休眠public static void sleep(long millis) 线程加入public final void join() 线程礼让public static void yield() 后台线程public final void setDaemon(boolean on) 中断线程public final void stop()public void interrupt()--会引发一个InterruptedException异常,可以执行清理的收尾工作
46.范式理论:一阶范式:每列都是不可再分的最小数据表单 表不能再分不能表中套表 二阶范式:满足一阶范式并且除了主键以外的其他列都依赖于该主键 单一职责:一个表只存放一个独立的信息 三阶范式:满足二阶范式并且除了主键以外的其他列都不能传递依赖.不能传递依赖
47.JDBC的核心类:DriverManager:加载驱动 Connection:连接 Statement:向数据库发送SQL语句 Resultset:保存查询结果
48.事物:一组操作(SQL语句),要执行都执行,不执行都不执行 事物的四大特征(ACID):原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability)
49. 软件体系结构:C/S:Client/Servlet,例如就是CS结构 服务器端程序/客户端程序。缺点:更新需要两端,所有客户下载新的客户端程序 优点:安全性比较好
B/S:Browser/Serve 浏览器/服务器 缺点:安全性较差 优点:只需要编写服务器端程序
Web资源:静态资源:html、css、javascript、图片等;动态资源:javaweb的动态资源有jsp/servlet,其他web程序动态资源有asp、apsx、php等。静态资源和动态资源的区别:客户端访问服务器静态资源,服务器直接响应;客户端访问服务器动态资源,服务器需要先把动态资源转换成静态资源,再响应。Web服务器: Tomcat(Apache):当前应用最广的JavaWeb服务器,支持servlet规则,不支持JavaEE规范; JBoss(Redhat):支持JavaEE规则; GlassFish(Orcale):支持servlet规则;Resin(Caucho):支持JavaEE规则;Weblogic(Orcale):支持JavaEE规则,适合大型项目;Websphere(IBM):支持JavaEE规则,适合大型项目。HTTP(hypertext transport protocol)即超文本传输协议
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/18853.html