📄 day02.txt
字号:
Core Java(day02) 2007-12-4 --- 李艳
1、变量
成员变量:声明在类体内的变量都是成员变量。例:类的属性
(1)成员变量有默认的初始值,声明后就可使用
成员变量默认值列表:
byte short int long float double char boolean All reference types
0 0 0 0L 0.0f 0.0d ‘\u0000’ false null
\u0000是空格
局部变量:在方法内声明的变量,既凡是不在类体内声明的变量都是局部变量
(1)一定要先赋值后使用,即必须由程序员进行显示初始化
(2)作用范围:从定义开始到定义它的代码块结束
(3)在重合范围不允许两个局部变量命名冲突
默认值 使用范围 命名冲突
成员变量 系统赋初始值 本类的内部使用 允许成员变量和局部变量发生命名冲突,在命名冲突的时候变量的值-->局部优先
局部变量 先赋值后使用 定义他的代码块 同范围内不允许两个局部变量发生命名冲突
2、值传递
基本类型传值,引用类型传地址。
3、运算符:java的运算符的优先级和结合性和c++相同
计算机采用的是补码,既取反加1。符点数是不能进行移位运算的。
有符号右移:>>= 前面是零补零,前面是一补一; 右移一位比除以2效率高
正数移完后还是正数,负数移完后还是负数
所有的非长整型,都是先取32的余数,再移位
所有长整型的数据都是先取64的余数,再移位
负数用二进制表示是取反加1
对于移动负数位都是+32再移位
右移一位等于除以2,左移一位等于乘以2
例:12>>1等价于 12/2的1次方--->6
12>>33等价于12/2的(33%32)次方---->12/2的一次方--->6
-12>>2等价于-12/2的2次方---->-3
-12>>66等价于-12/2的(66%32)---->-12/2的2次方--->-3
无符号右移:>>>= 不管是正数还是负数,移完后都是正数
>>=和>>>=对于负数不一样
正数:右移n位等于除以2的n次方
负数:变成正数。
&& 短路与,前面为假,表达式为假,后面的操作不会进行,& 非短路运算符,会对所有条件进行判断。
例: int a = 4;
if(a<3&(b=a)==0) b赋值
if(a<3&&(b=a)==0) b不赋值
|| 短路或,前面为真,表达式为真,后面的操作不会进行,| 会对所有条件进行判断。
instanceof,是用于判断一个对象是否属于某个类型
java中的求余运算符“%”可以对两个实型变量求余 5%2=1
4、字符串连接:
两个操作的对象都是数字时,是加法
若有一个是字符串,就是字符中连接
例:String str="abc";
4+str=4abc
4+str+5=4abc5
4+5+str=9abc
s+4+5=abc45
5、流程控制
(1)控制流
if()
if()…else
if()…else if()…else
注意:else只是和其上面的同层的最近的if()来配对。
(2)switch(s){
case 'a':……break;
case 1:……break;
default:....break;---default后面的break可有可无
}
注意:switch()内数据类型为byte short char int和枚举类型,只有以上四种类型的才可以在switch()中使用。
case块中不加break时顺序执行下面的语句。
switch只能用于有限的条件。能用switch写的分支语句都能用if--else来写,故switch不常用
(3)循环语句
每一种循环都有的四要素:
条件初始化
条件定义
条件变量的变化
循环体
for(int i=0;i<n;i++){} ---- 知道循环次数时最好用for循环
不知道次数只知道循环条件最好用以下两个
while(){} ---- 循环0或多次
do{} while();-----------注意加分号 循环1次或多次
6、数组
(1)数组的定义
数组是内存中的一块连续的存储空间
数组是一次性定义多个相同类型的变量
(2)定义一个数组:
int[] a; //定义一个数组,变量名就是指向数组首地址的指针
a=new int[10]; //为数组分配空间,分配了长度为10,int类型的数组空间,把首地址赋值给a,数组长度一旦确定不能改变
一个数组在java中就是一个对象,数组是一个没有方法,只有属性的对象。
a.length; //得到数组的长度
访问数组元素:
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
数组元素有默认值:默认值是各式各样的0
数组元素默认值规则:
int 0
long 0l
float 0f
double 0d
boolean false
对象数组 null(空指针)
(3)初始化、创建、和声明在同一时间
int[] i = {0,1}; //显示初始化
int[] i = new int[]{0,1}; //注意:这样显示的初始化的时候,new int[] 中括号中必须是空的,不能填数字
Car[] c = {new Car(),new Car()};
(4)二维数组:
定义二维数组:int[][] a=new int[3][4] 3行4列
java中的二维数组其实是一维数组,一维数组的元素又是个一维数组
1) 有效定义
int[][] a = new int[2][3]; (同时给定一维,二维的空间)
遍历二维数组:for(int i=0;i<a.length;i++){
for(int j=0;j<a[i].length;j++){
System.out.print(a[i][j]+" ");
}
System.out.println();
}
int[][] b = new int[3][]; (给定一维的空间,二维空间待定,不规则的二维数组,只有java中有,C++没有)
b[0] = new int[2];
b[1] = new int[4];
b[2] = new int[3];
2) 无效定义
int[][] i1 = new int[][3]; //不能不指定行数
3) 显示初始化二维数组
int[][] c={{1,2,3,4}{5,6,7,8}{9,8,7,6}};
3) 数组长度
int[] b = new int[5];
int len = b.length; //len = 5;
int[][] a = new int[4][6];
len = a.length; //len = 4;
len = a[0].length; //len = 6;
(5)数组拷贝
System.arrayCopy(Object src, int srcPos, Object dest, int destPos, int length);
src源数组,srcPos从第几个位置开始拷贝(数组下标,从0开始),dest目标数组,destPos目标数组放置的起始位置,length,表示要拷贝的长度。
(6)数组排序
类库中用 Arrays.sort(数组名); 进行升序排序
该方法是一个经过调优的快速排序法
作业:写一个模拟彩票系统的随机数程序(从1--33里选),需要6个数
java.Math.random(); //取值范围是[0,1)这个区间的double类型数据
要想取[1--33]的随机数可以:int d=(int)(33*Math.random()+1);
问题就是如何过滤重复,检验代码写的是否正确可以把33改成6看是否有重复数据就知道了
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -