优惠券网站制作教程/百度平台商家我的订单查询
目录
1,交换两个变量值,不引入第三个变量。
2,类初始化实例化过程。
3,几个笔试题
4,数据库表A和表B的数据合并(笛卡尔积)
1,交换两个变量值,不引入第三个变量。
void swap1(int a,int b)
{
a = a + b;
b = a - b;
a = a - b;
}
void swap2(int a,int b)
{
a = a * b;
b = a / b;
a = a / b;
}
void swap3(int a,int b)
{
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
异或位运算效率最高,不越界。
使用位运算交换两个数,是利用了异或的自反性: a^b^b=a^0=a;
1.与运算(&)
运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;
即:两位同时为“1”,结果才为“1”,否则为0
例如:3&5 即 0000 0011 & 0000 0101 = 0000 0001 因此,3&5的值得1。
例如:9&5 即 0000 1001 (9的二进制补码)&00000101 (5的二进制补码) =00000001 (1的二进制补码)可见9&5=1。
2.或运算(|)
规则:0|0=0; 0|1=1; 1|0=1; 1|1=1;
即 :参加运算的两个对象只要有一个为1,其值为1。
例如:3|5 即 0000 0011 | 0000 0101 = 0000 0111 因此,3|5的值得7。
例如:9|5可写算式如下: 00001001|00000101 =00001101 (十进制为13)可见9|5=13
3.异或运算(^)
运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;
即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。
使用异或操作,两个相等的数异或的结果为 0,而 0 与任何一个数异或的结果为这个数。
例如:9^5可写成算式如下: 00001001^00000101=00001100 (十进制为12)可见9^5=12
2,类初始化实例化过程。
如题,分析下运行main函数会输出什么呢?
直接滑道底部查看答案,对了你就不用看喽 --<-<-<@
主要以下三个考点
- 类初始化过程
都说了孕妇优先,一个类要创建实例而需要先加载,main这个方法所在的类需要先加载初始化。
子类想初始化得先通过老子,不初始化老子哪来的小子。初始化类就是《clinit》方法,一次就好哦,静态变量-->静态代码块
- 实例初始化过程
实例初始化就是《init》方法,有几个构造器就有几个《init》方法,init方法包含静态变量赋值+静态代码块+对应构造器代码
每次创建对象,调用对应构造器执行对应的init方法,init方法首行是super()也就是对应父类init方法。
- 子类super()方法。。。最前
- 静态变量、静态代码块
- 子类无参构造函数。。。最后
- 重写方法
那些方法不会被重写?
final方法+静态方法+private等子类中不可见方法对象
对象的多态性
子类如果重写了父类的方法,通过子类对象调用的一定是子类自己重写过的方法。
非静态方法 默认 调用的调用对象是 tihs
this对象在构造器或者说《init》方法中就是正在创建的对象
3,几个笔试题
1.下面程序的输出结果是()
A.0 B.99 C.100 D.101
解析:由于Java中用了中间变量缓存机制,则类似i=i++就类似
temp=j; --------> j=j+1; ------------> j=temp; 所以 上面的题j还是0;
2.以下代码的执行结果是多少?
public void test2() {int i=0;i=i++ + ++i;System.out.println("i="+i);}
解析:i++和++i使用的不同点在于一个是程序完毕后自增,一个是程序开始之前自增。此时这个问题就是i++,但是先不自增,此时I还是0,然后执行++i,这时候i变成1,执行完成补一下之前i++的加一,此时i实际上就是2.则0+2赋值给i,最终i=2.
3.以下代码的执行结果是多少?
public void test5() {int j=0;j = ++j + j++ + j++ + j++;System.out.println("i="+j);}
解析:首先有了基础知道(++j=1)+ (j++=1)‘‘j=2’’ +(j++=2)‘‘
j=3’’ +(j++=3)‘‘
j=4’但是赋值运算1+1+2+3=7.’
这里为什么i++没有自增?
i=i++;
实质上我们可以将i++与++i对比下
i++的情况
iload_1
iinc 1,1
istore_1
++i的情况
iinc 1,1
iload_1
istore_1
jvm两个存储区,一是暂存区(堆栈),另一个是变量区。
语句istore_1是将堆栈中的值弹出存入相应的变量区(赋值);语句iload_1是将变量区中的值暂存如堆栈中。
i = i++;是先将i的值(0)存入堆栈,然后对变量区中的i自加1,这时i的值的确是1,但是随后的istore_1又将堆栈的值(0)弹出赋给变量区的i,所以最后i = 0。
而i = ++i;是先对变量区中的i自加1,然后再将变量区中i的值(1)存入堆栈,虽然最后执行了istore_1,但也只是将堆栈中的值(1)弹出赋给变量区的i,所以i = ++i;的结果是i = 1。先将变量区的i值存入堆栈区,变量区的i再自增1,最后由于是赋值操作,从堆栈区取出i值赋给变量区。因此i依然为最开始保存在堆栈区的i值。
4,数据库表A和表B的数据合并(笛卡尔积)
sql server中如何将表A 和表B的数据合并成乘积方式,也就是说表A有2条数据,表B有3条数据,乘积后有6条数据,
这就要用到sql中的笛卡尔积方式了
1、什么是笛卡尔积
笛卡尔积在SQL中的实现方式既是交叉连接(Cross Join)。所有连接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里的一个概念,
表示两个表中的每一行数据任意组合。如果分步骤理解的话,内连接可以看做先对两个表进行了交叉连接后,再通过加上限制条件(SQL中通过关键字on)
剔除不符合条件的行的子集,得到的结果就是内连接了
2、实现方式
--1、创建模拟的数据表---
--1.1)产品分类表
create table GoodsCate(Mid int not null,Code varchar(10) not null,Name varchar(20) not null,
)
--1.2)产品类别表
create table GoodsLevel(Mid int not null,Name varchar(10) not null
)--2、添加模拟数据--
--2.1)添加产品分类数据
insert into GoodsCate(Mid,Code,Name) values(1,'6801','电子仪器')
insert into GoodsCate(Mid,Code,Name) values(2,'6802','激光仪器')
insert into GoodsCate(Mid,Code,Name) values(3,'6803','扫描仪器')
--2.2)添加产品类别数据
insert into GoodsLevel(Mid,Name) values(1,'Ⅰ类')
insert into GoodsLevel(Mid,Name) values(2,'Ⅱ类')
insert into GoodsLevel(Mid,Name) values(3,'Ⅲ类')--3、查询数据表--
select * from GoodsCate
select * from GoodsLevel --4、简单的笛卡尔积使用--
select * from GoodsCate A
cross join GoodsLevel B
3、显示查询结果
那如何我要显示产品编码+产品类别(6801_1), 最后数据为这样格式,该怎么修改呢?
6801_1 6801 电子仪器 Ⅰ类
6802_1 6802 激光仪器 Ⅰ类
6803_1 6803 扫描仪器 Ⅰ类
6801_2 6801 电子仪器 Ⅱ类
6802_2 6802 激光仪器 Ⅱ类
6803_2 6803 扫描仪器 Ⅱ类
6801_3 6801 电子仪器 Ⅲ类
6802_3 6802 激光仪器 Ⅲ类
6803_3 6803 扫描仪器 Ⅲ类
--5、查询经营范围(6801_1)方法--
select (CAST(A.Code as varchar(20))+'_'+CAST(B.Mid as varchar(20))) CateLevel,
A.Code CateCode,A.Name CateName,B.Name LevelName
from GoodsCate A
cross join
GoodsLevel B
最后结果
ps:
详细了解笛卡尔积网址:http://www.360doc.com/content/14/1229/21/7635_436727229.shtml
平时多记记,到用时才能看看,记录你的进步,分享你的成果