JAVA
int[] kind;
kind = new int[15];
System.out.println(kind[0]);
System.out.println(kind[15]);
Run:
0
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
JS:
1. 创建对象的两种方法
方法一:直接定义并创建对象实例
var obj = new Object(); //创建对象实例
//添加属性obj.num = 5; //添加属性
obj.fn = function( cin ){ return cin;} //添加方法
访问对象的方法:objectName.methodName()
访问对象的属性:objectName.propertyName
方法二:用函数来定义对象然后创建对象实例
function Class(){
//添加属性
this.val = 1;
//添加方法
this.fn = function(){
return 'fn';
}}
var obj = new Class(); //创建对象实例
访问对象的方法:objectName.methodName()
访问对象的属性:objectName.propertyName
方法三:literals 直接创建对象实例
literals创建对象实例是一种简化方法.
var obj = {}; //创建空对象
var obj = {
num : '2', //这是设置对象属性
fn : function(){
....//这是设置对象方法
}
}
访问对象的方法:objectName.methodName()
访问对象的属性:objectName.propertyName
2. JS中变量提升
1 var v='Hello World';
2 (function(){
3 alert(v);
4 var v='I love you';
5 })()
会出现alert出来的是undefined,原因是因为在函数域里定义一个和外部变量一样名称的变量时,
变量的声明会提升至第一句,赋值则不会变。所以上述语句其实是这样执行的
var v='Hello World';
(function(){
var v; // 变成在这里了
alert(v);
v='I love you';
})()
3. JS全局变量有什么风险,怎样避免
风险1:全局变量的问题在于,你的JavaScript应用程序和web页面上的所有代码都共享了这些全局变量,
他们住在同一个全局命名空间,所以当程序的两个不同部分定义同名但不同作用的全局变量的时候,命名冲突在所难免
风险2:JavaScript有隐含的全局概念,意味着你不声明的任何变量都会成为一个全局对象属性,经验法则是始终使用var声明变量
风险3:避免全局变量的原因是可移植性。如果你想你的代码在不同的环境下(主机下)运行,
使用全局变量如履薄冰,因为你会无意中覆盖你最初环境下不存在的主机对象
解决:
1、js的变量有两种作用域:全局变量和局部变量。没有使用 var 声明的变量和在function之外声明的变量都是全局变量,是window属性之一;
使用 var声明的变量属于所在函数,不管在函数的哪个位置出现,等价于在函数一开始声明。局部变量比同名全局变量的优先级高,
所以局部变量会隐藏同名的全局变量。要想访问被隐藏的全局变量就加上 window. 前缀。
2、js没有块作用域,在语句块之后,在函数结束之前,语句块定义的变量都是可以访问的。
比如:for(var idx =0; idx<2;idx++){} alert(idx); 结果显示为2。
4. JS对象迭代
javascript 数组对象中的迭代方法
* ECMAScript5为数组定义了5个迭代方法。每个方法都接受两个参数,第一个是进行迭代的函数,第二个是该函数的作用域对象【可选】。
* 进行迭代的函数接受三个参数,第一个是数组中要进行迭代的元素的值,第二个是数组候总要进行迭代的元素的位置,第三个是迭代数组本身。
* 1. every() 对数组中的每一项运行给定的函数,如果该函数对每一项都返回true,则返回true
* 2. filter() 对数组中的每一项运行给定的函数,返回该函数返回true的项组成的数组。
* 3. forEach() 对数组中的每一项运行给定的函数,这个方法没有返回值
* 4. map() 对数组中的每一项运行给定的函数,返回每次函数调用的结果组成的数组
* 5. some() 对数组中的每一项运行给定的函数,如果该函数对任意一项返回true,则返回true
* 这些迭代方法支持的浏览器有,IE9+,Firefox2+,Safari3+,Opera 9.5+,chrome
5.防范SQL注入式攻击方式
-----------------------------
1.(简单又有效的方法)PreparedStatement采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setXXX方法传值即可。
2.使用正则表达式过滤传入的参数
3.字符串过滤
4.jsp中调用该函数检查是否包函非法字符
5.JSP页面判断代码
6.复制表结构
select * into 目标表名 from 源表名
insert into 目标表名(fld1, fld2) select fld1, 5 from 源表名
以上两句都是将 源表 的数据插入到 目标表,但两句又有区别的:
第一句(select into from)要求目标表不存在,因为在插入时会自动创建。
第二句(insert into select from)要求目标表存在,由于目标表已经存在,所以我们除了插入源表的字段外,还可以插入常量,如例中的:5。
详细
1:复制表结构及数据到新表
select * into 目的数据库名.dbo.目的表名 from 原表名
select * into my0735home.dbo.infoMianTest from infoMian
2:备份表的一部分列(不写*而写出列的列表)
select 列名1,列名2,列名3 into 目的数据库名.dbo.目的表名 from 原表名
select id,title,mtype,stype,author,tel,nr into infoMianTest2 from infomian
3:备份表的一部分行(加WHERE条件)
select * into 目的数据库名.dbo.目的表名 from 原表名 where id<10
select * into infomiantest2 from infomian where id<10
4:备份表的一部分列(不写*而写出列的列表)和一部分行(加WHERE条件)
select 列名1,列名2,列名3 into 目的数据库名.dbo.目的表名 from 原表名 where id<10
5:只复制表的结构:如:SELECT * INOT t1 FROM titles WHERE 1=2
6:查询结果来源于多个表:如:
SELECT title_id,title,pub_name INTO t3
FROM titles t INNER JOIN publishers p
ON t.pub_id=p.pub_id
7.两张关联表,删除主表中已经在副表中没有的信息
delete from table1 where not exists
( select * from table2 where table1.field1=table2.field1 )
8.主键与外键
关系型数据库中的一条记录中有若干个属性,若其中某一个属性组
(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。
比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
9.复制表结构
select * into 数据库名.dbo.新表名 from 数据库名.dbo.原表名 where 1=0
10结果:
public class parentClass {
public int i = 10;
}
public class subClass extends parentClass{
public int i = 30;
public static void main(String[] args) {
// TODO Auto-generated method stub
parentClass parentC = new subClass();
subClass subC = new subClass();
System.out.println("parentC:"+parentC.i+" subC:"+subC.i);
}
}
Result: parentC:10 subC:30