继承
一、继承的目的是扩展类的功能
二、java中一个子类只能继承一个父类
三、java不容许多重继承,容许多层继承
四、父类中private方法不能在子类中被default覆写,若是子类中有重名的方法,那不叫覆写,而是从新
定义了一个方法。
五、父类和子类中定义同名的属性,子类会覆盖父类中的属性,super.getA()调用的是父类中的属性。
this.getA()调用的是子类的属性
重载和覆写的区别
一、单词:overloading overriding
二、定义:方法名称相同,参数的类型或者个数不一样 方法的名称参数的类型返回值的类型等都相同
对权限没有要求
被覆写的方法不能有子类方法更严格的权限
三、范围:发生在同一个类中
发生在继承类中
super关键字
表示的是从子类调用父类中的指定操做,例如:调用属性、方法、构造等。由于在子类的实例化过程当中,会默认调用父类中的无参构造方法,若是如今但愿调用有参构造,则必须在子类中指明要调用的有参构造方法。例如:super(name,age)
this 和 super的区别
一、属性访问:this访问本类中的属性,若是本类中没有此属性,则从父类中继续查找 super是访问父类中的属性。
二、访问方法:this访问本类中的方法,若是本类中没有此方法,则在父类中查找。 super是直接访问父类中的方法。
三、调用构造:this调用本类中的构造,必须放在构造方法的首行。
super调用父类构造,必须放在子类方法的首行。
四、this表示的当前对象。
五、this和super两个关键字在构造中不能同时出现。
math类的用法
1. Math.abs(int a):返回值的绝对值。参数能够的类型int 、float、double、long
2. Math.acos(double a):返回角的反余弦。
3. Math.asin(double a):返回角的反正弦。
4. Math.atan(double a):返回角的反正切。
5. Math.atan2(double a):将矩形坐标(x,y)转换成极坐标(r,theta)。
6. Math.cbrt(double a):返回double 值的立方根。
7. Math.ceil(double a):返回最小的(最接近负无穷大)double值,该值大于或等于参数,而且等于某个整数。
8. Math.cos(double a):返回角的三角余弦。
9. Math.cosh(double x):返回double 值的双曲线余弦。
10. Math.exp(double a):返回欧拉数e 的double 次幂的值。
11. Math.floor(double a):返回最大的(最接近正无穷大)double 值,该值小于或等于参数,而且等于某个整数。
12. Math.max(int a,int b):返回两个值中较大的一个值。参数包含的类型 int、float、long、double。
13. Math.min(int a,int b):返回两个值中较小的一个值。参数包含的类型 int、float、long、double。
14. Math.random():返回带正号的double值。
15. Math.round(double a):返回最接近参数的long。
16. Math.round(float a):返回最接近参数的int。
int除法的问题
12/10=1
12f/10=1.2
12d/10=1.2
12/10f=1.2
12/10d=1.2
------------Double型----------
2.3/0.0 = Infinity
2.3/-0.0 = -Infinity
0.0/0.0 = NaN
0.0/-0.0 = NaN
0.0/0.1 = 0.0
0.0/-0.1 = -0.0
------------Float型----------
2.3/0.0 = Infinity
2.3/-0.0 = -Infinity
0.0/0.0 = NaN
0.0/-0.0 = NaN
0.0/-0.1 = -0.0
几个设计模式
一、工厂模式
二、模板方法模式:模板方法:定义一个操做中的算法的骨架,而将一些步骤延迟到子类中。 T模板方法使得子类能够不改变一个算法的结构便可重定义该算法的某些特定步骤。
1)模板方法模式是基于继承的代码复用基本技术,模板方法模式的结构和用法也是面向对象设计的核心之一。在模板方法模式中,能够将相同的代码放在父类中,而将不一样的方法实现放在不一样的子类中。
2)在模板方法模式中,咱们须要准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,而后声明一些抽象方法来让子类实现剩余的逻辑。不一样的子类能够以不一样的方式实现这些抽象方法,从而对剩余的逻辑有不一样的实现,这就是模板方法模式的用意。
三、单例模式
public class Singleton
{
private static final Singleton singleton = null;
private Singleton()
{
}
public static Singleton getInstance()
{
if (singleton== null)
{
synchronized (Singleton.class)
{
if (singleton== null)
{
singleton= new Singleton();
}
}
}
return singleton;
}
}
第一个条件是说,若是实例建立了,那就不须要同步了,直接返回就行了。
否则,咱们就开始同步线程。
第二个条件是说,若是被同步的线程中,有一个线程建立了对象,那么别的线程就不用再建立了
static 用法
通常调用static属性的时候,采用“类名称.属性”的方式
static方法不能调用非static属性,也不能调用非static方法, 由于static的属性和方法在对象没有实例化以前就已经初始化了。
其余的应用:能够统计一共产生了多少个对象。
java中的内存空间类型
栈内存:保存对象的名称,也就是访问堆内存的地址
堆内存:保存每一个对象的基本属性
全局数据区:保存static类型的属性
全局代码区:保存全部方法的定义
hashmap与hashtable区别
HashMap和Hashtable都实现了Map接口,但决定用哪个以前先要弄清楚它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。
HashMap几乎能够等价于Hashtable,除了HashMap是非synchronized的,并能够接受null(HashMap能够接受为null的键值(key)和值(value),而Hashtable则不行)。
HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程能够共享一个Hashtable;而若是没有正确的同步的话,多个线程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。另外一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。因此当有其它线程改变了HashMap的结构(增长或者移除元素),将会抛出ConcurrentModificationException,但迭代器自己的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并非一个必定发生的行为,要看JVM。这条一样也是Enumeration和Iterator的区别。
因为Hashtable是线程安全的也是synchronized,因此在单线程环境下它比HashMap要慢。若是你不须要同步,只须要单一线程,那么使用HashMap性能要好过Hashtable。
HashMap不能保证随着时间的推移Map中的元素次序是不变的。
forward和redirect的区别
答:forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,而后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,因此它的地址栏中仍是原来的地址。
redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器从新去请求那个地址,通常来讲浏览器会用刚才请求的全部参数从新请求,因此session,request参数均可以获取
前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是彻底的跳转,浏览器将会获得跳转的地址,并从新发送请求连接。这样,从浏览器的地址栏中能够看到跳转后的连接地址。因此,前者更加高效,在前者能够知足须要时,尽可能使用forward()方法,而且,这样也有助于隐藏实际的连接。在有些状况下,好比,须要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。
js截取字符串
函数:split()
功能:使用一个指定的分隔符把一个字符串分割存储到数组
例子:
str=”jpg|bmp|gif|ico|png”;
arr=theString.split(”|”);
//arr是一个包含字符值”jpg”、”bmp”、”gif”、”ico”和”png”的数组
函数:John()
功能:使用您选择的分隔符将一个数组合并为一个字符串
例子:
var delimitedString=myArray.join(delimiter);
var myList=new Array(”jpg”,”bmp”,”gif”,”ico”,”png”);
var portableList=myList.join(”|”);
//结果是jpg|bmp|gif|ico|png
函数:substring()
功能:字符串截取,好比想从”MinidxSearchEngine”中获得”Minidx”就要用到substring(0,6)
函数:indexOf()
功能:返回字符串中匹配子串的第一个字符的下标
var myString=”JavaScript”;
var w=myString.indexOf(”v”);w will be 2
var x=myString.indexOf(”S”);x will be 4
var y=myString.indexOf(”Script”);y will also be 4
var z=myString.indexOf(”key”);z will be -1
substr 方法
返回一个从指定位置开始的指定长度的子字符串。
stringvar.substr(start [, length ])
参数
stringvar
必选项。要提取子字符串的字符串文字或 String 对象。
start
必选项。所需的子字符串的起始位置。字符串中的第一个字符的索引为 0。
length
可选项。在返回的子字符串中应包括的字符个数。
说明
若是 length 为 0 或负数,将返回一个空字符串。若是没有指定该参数,则子字符串将延续到
stringvar 的最后
function SubstrDemo(){
var s, ss; // 声明变量。
var s = "The rain in Spain falls mainly in the plain.";
ss = s.substr(12, 5); // 获取子字符串。
return(ss); // 返回 "Spain"。
}
java 特征
继承 封装 多态 抽象java
java 取余 和取模 的区别
取余
rem(3,2)=1
rem(-3,-2)=-1
rem(3,-2)=1
rem(-3,2)=-1
2.取模
mod(3,2)=1
mod(-3,-2)=-1
mod(3,-2)=-1
mod(-3,2)=1
由此能够看出,rem和mod是有符号区别的!
当除数与被除数的符号相同时,rem和mod的结果是彻底相同的;当除数与被除数的符号不相同时,结
果不一样。
具体说,rem结果的符号与被除数相同;mod结果的符号与除数相同。
sql 分页
--写法1,not in/top
select top 50 * from pagetest
where id not in (select top 9900 id from pagetest order by id)
order by id
--写法2,not exists
select top 50 * from pagetest
where not exists
(select 1 from (select top 9900 id from pagetest order by id)a where a.id=pagetest.id)
order by id
--写法3,max/top
select top 50 * from pagetest
where id>(select max(id) from (select top 9900 id from pagetest order by id)a)
order by id
--写法4,row_number()
select top 50 * from
(select row_number()over(order by id)rownumber,* from pagetest)a
where rownumber>9900
select * from
(select row_number()over(order by id)rownumber,* from pagetest)a
where rownumber>9900 and rownumber<9951
select * from
(select row_number()over(order by id)rownumber,* from pagetest)a
where rownumber between 9901 and 9950
js 跨域
一、document.domain+iframe的设置
对于主域相同而子域不一样的例子,能够经过设置document.domain的办法来解决
二、动态建立script
虽然浏览器默认禁止了跨域访问,但并不由止在页面中引用其余域的JS文件,并能够自由执行引入的JS文
件中的function(包括操做cookie、Dom等等)。根据这一点,能够方便地经过建立script节点的方法来
实现彻底跨域的通讯。具体的作法能够参考YUI的Get Utility
这里判断script节点加载完毕仍是蛮有意思的:ie只能经过script的readystatechange属性,其它浏览器
是script的load事件。如下是部分判断script加载完毕的方法。
三、使用HTML5 postMessage
otherWindow.postMessage(message, targetOrigin);
otherWindow: 对接收信息页面的window的引用。能够是页面中iframe的contentWindow属性;
window.open的返回值;经过name或下标从window.frames取到的值。
message: 所要发送的数据,string类型。
targetOrigin: 用于限制otherWindow,“*”表示不做限制
四、利用flash
五、window.name实现的跨域数据传输
iframe的src属性由外域转向本地域,跨域数据即由iframe的window.name从外域传递到本地域。这个就巧妙地绕过了浏览器的跨域访问限制,但同时它又是安全操做。算法
以上先总结这么多,后面收集后再更新,同时也算是学习了。sql