JAVA基础之四
上一篇 / 下一篇 2013-10-10 21:33:03 / 个人分类:JavaSE
复习:
一、Java数据类型
1、基本数据类型 8种
也称为:简单类型、原生类型
内存存储方式:字节 二进制位
byte short int long char float double boolean
1 2 4 8 2 4 8 1
byte: -128 ~ 127
char: 0 ~ 65535 既是字符 又是数字 unicode编码
2、引用数据类型
也称为:复杂类型、对象类型
内存存储: 引用变量 -> 对象 (堆区)
(对象的地址)
JVM内存结构:
1)Stack 栈区 局部变量(临时变量)
方法中定义的变量是局部变量
栈是一种先进后出的数据结构
2)Heap 堆区 分配空间,创建对象 new
3)Code 方法区 类的信息、静态资源
JVM第一次认识类的信息:类加载 仅一次
按照表现形式分为5种:
类 接口 数组 枚举 标注
class interface int[]
JDK已经提供了很多引用类型:
java.lang.String 字符串类
java.lang.System 系统类
java.lang.Integer int类型的包装类
java.lang.Math 算术类
java.util.Scanner 扫描器类
...
还可以自定义引用类型 class 类
package day03;
public class Student{
String name;
int age;
public void study(String course){
System.out.println(name + "学习" + course);
}
}
如何使用引用类型? 直接new 创建对象 表示实例
package day03;
public class TestStudent{
public static void main(String[] args){
//引用类型 设计 实现 以及使用的过程
//stu1就是对象的引用变量 内存地址
Student stu1 = new Student();
stu1.name = "Tom";
stu1.age = 23;
stu1.study("JavaSE");
}
}
对象的气球理论:
我们将对象比喻成一个充满氢气的气球,引用就好比连着气球的绳子。
1)一根绳子同一时刻只能连着一个气球,就好比一个引用同一时刻只能指向一个对象。
Student stu1 = new Student();
Student stu2 = new Student();
2)一个气球同一时刻可以被多根绳子连着,就好比一个对象同时可以有多个引用指向。
Student stu3 = stu1;
3)如果一个气球没有绳子连着,就会飞走。就好比一个对象如果没有引用指向,该对象就会成为系统的垃圾,等待着GC垃圾收集机制的回收。
stu2 = null; 给引用赋值 null 值
4)如果一根绳子没有连着任何气球,就如同一个引用不指向任何对象,此时为null.如果访问空引用的成员(属性、方法),会抛出一个异常:空指针异常
异常名称: java.lang.NullPointerException
stu2.name = "";
stu2.study("Web");
3、void 只能用在方法的返回值类型中
表示无返回值类型
作业题:生成一个随机大写字母 'A' ~ 'Z'
思路:1.先准备一个[0, 25]的随机整数
double d1 = Math.random(); double [0, 1)
0.0000xxx 0.999xxx
d1 * 26
0.000xxx 25.xxx
int num = (int)(d1 * 26);
0 25
2.再使用'A' + 1 -> 常量 int 自动转为 char
'A' + num -> 变量 结果 int
int -> char 必须强制类型转换
char randomChar = (char)('A' + num);
3.最后打印输出randomChar
在day04.homework包 创建TestRandomChar.java程序
二、数据类型的转换
在day04包下创建一个程序:TestTypeChange.java
1、自动类型转换
(1)常数在表数范围内能够自动转型
字面值:123 'A'
byte b1 = 1; //int -> byte [-128, 127]
char c1 = 'A' + 1; //常量相加 还是常量 int->char
// 65 + 1 -> 66 int -> char 'B'
(2)范围小的能够自动向范围大的转换
byte -> short -> int -> long -> float -> double
char ->
int n1 = 'a'; //char -> int 9
(3)引用类型子类可以自动向其父类转换
java.lang.Object类 是所有类的共同父类
Student stu1 = new Student();
Object obj1 = stu1; //Student -> Object
(4)基本类型能够和包装类型之间互相转换 JDK5.0
基本类型 包装类型 java.lang包下的类
byte --- Byte
int --- Integer
double --- Double
int n1 = 123;
Integer in1 = n1; //int->Integer 自动封箱
int n2 = in1; //Integer->int 自动解箱
2、强制类型转换
除了能够自动类型转换之外,都用强制类型转换
语法: (数据类型) 常量、变量、表达式
byte b2 = (byte)128; //int -> byte 超过范围
128是int类型 4Byte = 32bite
00000000 00000000 00000000 10000000
int 强转为 byte 1Byte = 8bit
保留低位字节,最右边
10000000 byte 最高位1负数 补码
01111111 + 1
--------------
10000000 -128
256是int类型 4Byte = 32bite
00000000 00000000 00000001 00000000
int 强转为 byte 1Byte = 8bit
保留低位字节,最右边 00000000 -> 0
三、运算符和表达式
运算符 operator 也称为操作符
+ - * / = > < ...
表达式 expression
将数据结合运算符进行组合,形成实际业务中的运算代码。 比如:a +b a*b-c 1+2*3-4/6 a*(b-c)
运算符:
优先级:只需记忆常用的 其它使用( ) 提升优先级
结合律:在相同优先级时,考虑从左->右,从有右->左计算,大多数都是从左->右。
优先级从上到下递减:
() . []
() 提升优先级 (a+b)*c 先算a+b
. 取成员运算符 好比“stu1的”的意思
stu1.name stu1.study("JavaSE")
[] 取数组的下标
arr[0] arr[1] ...
++ -- + - ! ~ (<data_type>)
day04包,TestPlusPlus.java程序 CPP C++ Plus 加
++ 自加1运算符 只能针对变量
int a = 1;
前++ 先自加1,再取值
int b = ++a; // b 2 a 2
后++ 先取值,后自加1
int b = a++; // b 1 a 2
-- 自减1运算符
前-- 先自减1,再取值
后-- 先取值,后自减1
+ 正号 5 +5 没有区别 正数的+一般省略
- 负号 -5
! 逻辑非 boolean flag = true; !flag 是false
~ 位运算符 按位取反 0变1 1变0
(数据类型) 强制类型转换
算术运算符: Arithmetic
day04包 创建TestAri.java程序
* / %
* 乘
/ 除
% 取余数
+ -
+ 加
- 减
移位运算符:(了解)
<< >> >>>
<< 左移
>> 右移
>>> 无符号右移 注意:没有<<<符号
比较运算符: 一定返回布尔值 true/false
在day04包下创建TestCompare.java程序
< > <= >= instanceof
< 小于
> 大于
<= 小于或者等于
>= 大于或者等于
instanceof "是不是"
用于引用类型变量和类型的比较
判断对象是否为某种类型。
== !=
== 比较是否相等
!= 比较是否不相等
位运算符: 针对整数 按照 二进制位 进行运算
在day04包创建TestBit.java程序
byte a = 3; // 0000 0011
byte b = 5; // 0000 0101
a & b
& 按位与 "有0则0,全1则1"
0000 0011
0000 0101 & a & b
--------------
0000 0001 1
^ 按位异或 "同0异1"
0000 0011
0000 0101 ^ a ^ b
--------------
0000 0110 6
| 按位或 "有1则1,全0则0"
0000 0011
0000 0101 | a | b
--------------
0000 0111 7
&既是位运算符,也是逻辑运算符 表示逻辑与
(并且 and)
| 既是位运算符,也是逻辑运算符 表示逻辑或
(或者 or)
逻辑运算符的结果 是 布尔值 true / false
参与运算的数据 也是 布尔值
需求:买手机,必须有相机,并且是3G手机,才考虑买,否则不买。
分析:语法 if else 分支语句
并且 逻辑与 &
在day04包下创建TestAnd.java
&& 短路与
条件a && 条件b
如果条件a为false,此时无需再判断条件b,结果为false
优点:效率高
如果条件a为true,还需要判断条件b
如果条件b也为true,结果为true
如果条件b为false,结果为false
|| 短路或
条件a || 条件b
如果条件a为true,此时无需再判断条件b,结果为true
优点:效率高
如果条件a为false,还需要判断条件b
如果条件b也为false,结果为false
如果条件b为true,结果为true
条件运算符: (三目运算符)
条件表达式 ? 条件为true的值 : 条件为false的值
<boolean_expr>?<expr1>:<expr2>
需求:求出两个整数的最大值
int a = 3, b = 5; 语法也对
a > b ? a : b 表达式结果 5
在day04包下创建 TestThree.java
赋值运算符: = 一定优先级最低
= *= /= %= += -= <<= >>= >>>= &= ^= |=
其它都是复合赋值运算符
a = 1;
a *= 1; 等价于 a = a * 1;
boolean b1 = 1*5-6/2*3 > 1 && 5>3;
boolean b1 = (1*5-6/2*3 > 1) && (5>3);
= 赋值 将等号右边的表达式 全部计算完成后
再赋值给左边的变量b1
学习思路:3W1H
what? 是什么?
why? 为什么需要使用? 优点
where? 应用场合?
How? 如何使用?
四、方法的设计和使用
1、什么是方法
在其它语言中,称为函数 function,
在Java中称为方法 method:
表示一段固定的业务代码,定义一次,可以重复使用
方法有三个要素:方法名、参数表、返回值类型
方法的实现:方法体 写业务代码
2、方法的设计
(1)声明 三要素 (方法的签名)
public static int add (int a, int b)
(2)实现 使用方法体实现方法业务代码
public static int add (int a, int b){
//方法体 方法的具体实现
return a + b;
}
3、方法的使用 (方法的调用)
特点:从哪里调用,就从哪里返回
main方法:
int a = 3;
int b = 5
一、Java数据类型
1、基本数据类型 8种
也称为:简单类型、原生类型
内存存储方式:字节 二进制位
byte short int long char float double boolean
1 2 4 8 2 4 8 1
byte: -128 ~ 127
char: 0 ~ 65535 既是字符 又是数字 unicode编码
2、引用数据类型
也称为:复杂类型、对象类型
内存存储: 引用变量 -> 对象 (堆区)
(对象的地址)
JVM内存结构:
1)Stack 栈区 局部变量(临时变量)
方法中定义的变量是局部变量
栈是一种先进后出的数据结构
2)Heap 堆区 分配空间,创建对象 new
3)Code 方法区 类的信息、静态资源
JVM第一次认识类的信息:类加载 仅一次
按照表现形式分为5种:
类 接口 数组 枚举 标注
class interface int[]
JDK已经提供了很多引用类型:
java.lang.String 字符串类
java.lang.System 系统类
java.lang.Integer int类型的包装类
java.lang.Math 算术类
java.util.Scanner 扫描器类
...
还可以自定义引用类型 class 类
package day03;
public class Student{
String name;
int age;
public void study(String course){
System.out.println(name + "学习" + course);
}
}
如何使用引用类型? 直接new 创建对象 表示实例
package day03;
public class TestStudent{
public static void main(String[] args){
//引用类型 设计 实现 以及使用的过程
//stu1就是对象的引用变量 内存地址
Student stu1 = new Student();
stu1.name = "Tom";
stu1.age = 23;
stu1.study("JavaSE");
}
}
对象的气球理论:
我们将对象比喻成一个充满氢气的气球,引用就好比连着气球的绳子。
1)一根绳子同一时刻只能连着一个气球,就好比一个引用同一时刻只能指向一个对象。
Student stu1 = new Student();
Student stu2 = new Student();
2)一个气球同一时刻可以被多根绳子连着,就好比一个对象同时可以有多个引用指向。
Student stu3 = stu1;
3)如果一个气球没有绳子连着,就会飞走。就好比一个对象如果没有引用指向,该对象就会成为系统的垃圾,等待着GC垃圾收集机制的回收。
stu2 = null; 给引用赋值 null 值
4)如果一根绳子没有连着任何气球,就如同一个引用不指向任何对象,此时为null.如果访问空引用的成员(属性、方法),会抛出一个异常:空指针异常
异常名称: java.lang.NullPointerException
stu2.name = "";
stu2.study("Web");
3、void 只能用在方法的返回值类型中
表示无返回值类型
作业题:生成一个随机大写字母 'A' ~ 'Z'
思路:1.先准备一个[0, 25]的随机整数
double d1 = Math.random(); double [0, 1)
0.0000xxx 0.999xxx
d1 * 26
0.000xxx 25.xxx
int num = (int)(d1 * 26);
0 25
2.再使用'A' + 1 -> 常量 int 自动转为 char
'A' + num -> 变量 结果 int
int -> char 必须强制类型转换
char randomChar = (char)('A' + num);
3.最后打印输出randomChar
在day04.homework包 创建TestRandomChar.java程序
二、数据类型的转换
在day04包下创建一个程序:TestTypeChange.java
1、自动类型转换
(1)常数在表数范围内能够自动转型
字面值:123 'A'
byte b1 = 1; //int -> byte [-128, 127]
char c1 = 'A' + 1; //常量相加 还是常量 int->char
// 65 + 1 -> 66 int -> char 'B'
(2)范围小的能够自动向范围大的转换
byte -> short -> int -> long -> float -> double
char ->
int n1 = 'a'; //char -> int 9
(3)引用类型子类可以自动向其父类转换
java.lang.Object类 是所有类的共同父类
Student stu1 = new Student();
Object obj1 = stu1; //Student -> Object
(4)基本类型能够和包装类型之间互相转换 JDK5.0
基本类型 包装类型 java.lang包下的类
byte --- Byte
int --- Integer
double --- Double
int n1 = 123;
Integer in1 = n1; //int->Integer 自动封箱
int n2 = in1; //Integer->int 自动解箱
2、强制类型转换
除了能够自动类型转换之外,都用强制类型转换
语法: (数据类型) 常量、变量、表达式
byte b2 = (byte)128; //int -> byte 超过范围
128是int类型 4Byte = 32bite
00000000 00000000 00000000 10000000
int 强转为 byte 1Byte = 8bit
保留低位字节,最右边
10000000 byte 最高位1负数 补码
01111111 + 1
--------------
10000000 -128
256是int类型 4Byte = 32bite
00000000 00000000 00000001 00000000
int 强转为 byte 1Byte = 8bit
保留低位字节,最右边 00000000 -> 0
三、运算符和表达式
运算符 operator 也称为操作符
+ - * / = > < ...
表达式 expression
将数据结合运算符进行组合,形成实际业务中的运算代码。 比如:a +b a*b-c 1+2*3-4/6 a*(b-c)
运算符:
优先级:只需记忆常用的 其它使用( ) 提升优先级
结合律:在相同优先级时,考虑从左->右,从有右->左计算,大多数都是从左->右。
优先级从上到下递减:
() . []
() 提升优先级 (a+b)*c 先算a+b
. 取成员运算符 好比“stu1的”的意思
stu1.name stu1.study("JavaSE")
[] 取数组的下标
arr[0] arr[1] ...
++ -- + - ! ~ (<data_type>)
day04包,TestPlusPlus.java程序 CPP C++ Plus 加
++ 自加1运算符 只能针对变量
int a = 1;
前++ 先自加1,再取值
int b = ++a; // b 2 a 2
后++ 先取值,后自加1
int b = a++; // b 1 a 2
-- 自减1运算符
前-- 先自减1,再取值
后-- 先取值,后自减1
+ 正号 5 +5 没有区别 正数的+一般省略
- 负号 -5
! 逻辑非 boolean flag = true; !flag 是false
~ 位运算符 按位取反 0变1 1变0
(数据类型) 强制类型转换
算术运算符: Arithmetic
day04包 创建TestAri.java程序
* / %
* 乘
/ 除
% 取余数
+ -
+ 加
- 减
移位运算符:(了解)
<< >> >>>
<< 左移
>> 右移
>>> 无符号右移 注意:没有<<<符号
比较运算符: 一定返回布尔值 true/false
在day04包下创建TestCompare.java程序
< > <= >= instanceof
< 小于
> 大于
<= 小于或者等于
>= 大于或者等于
instanceof "是不是"
用于引用类型变量和类型的比较
判断对象是否为某种类型。
== !=
== 比较是否相等
!= 比较是否不相等
位运算符: 针对整数 按照 二进制位 进行运算
在day04包创建TestBit.java程序
byte a = 3; // 0000 0011
byte b = 5; // 0000 0101
a & b
& 按位与 "有0则0,全1则1"
0000 0011
0000 0101 & a & b
--------------
0000 0001 1
^ 按位异或 "同0异1"
0000 0011
0000 0101 ^ a ^ b
--------------
0000 0110 6
| 按位或 "有1则1,全0则0"
0000 0011
0000 0101 | a | b
--------------
0000 0111 7
&既是位运算符,也是逻辑运算符 表示逻辑与
(并且 and)
| 既是位运算符,也是逻辑运算符 表示逻辑或
(或者 or)
逻辑运算符的结果 是 布尔值 true / false
参与运算的数据 也是 布尔值
需求:买手机,必须有相机,并且是3G手机,才考虑买,否则不买。
分析:语法 if else 分支语句
并且 逻辑与 &
在day04包下创建TestAnd.java
&& 短路与
条件a && 条件b
如果条件a为false,此时无需再判断条件b,结果为false
优点:效率高
如果条件a为true,还需要判断条件b
如果条件b也为true,结果为true
如果条件b为false,结果为false
|| 短路或
条件a || 条件b
如果条件a为true,此时无需再判断条件b,结果为true
优点:效率高
如果条件a为false,还需要判断条件b
如果条件b也为false,结果为false
如果条件b为true,结果为true
条件运算符: (三目运算符)
条件表达式 ? 条件为true的值 : 条件为false的值
<boolean_expr>?<expr1>:<expr2>
需求:求出两个整数的最大值
int a = 3, b = 5; 语法也对
a > b ? a : b 表达式结果 5
在day04包下创建 TestThree.java
赋值运算符: = 一定优先级最低
= *= /= %= += -= <<= >>= >>>= &= ^= |=
其它都是复合赋值运算符
a = 1;
a *= 1; 等价于 a = a * 1;
boolean b1 = 1*5-6/2*3 > 1 && 5>3;
boolean b1 = (1*5-6/2*3 > 1) && (5>3);
= 赋值 将等号右边的表达式 全部计算完成后
再赋值给左边的变量b1
学习思路:3W1H
what? 是什么?
why? 为什么需要使用? 优点
where? 应用场合?
How? 如何使用?
四、方法的设计和使用
1、什么是方法
在其它语言中,称为函数 function,
在Java中称为方法 method:
表示一段固定的业务代码,定义一次,可以重复使用
方法有三个要素:方法名、参数表、返回值类型
方法的实现:方法体 写业务代码
2、方法的设计
(1)声明 三要素 (方法的签名)
public static int add (int a, int b)
(2)实现 使用方法体实现方法业务代码
public static int add (int a, int b){
//方法体 方法的具体实现
return a + b;
}
3、方法的使用 (方法的调用)
特点:从哪里调用,就从哪里返回
main方法:
int a = 3;
int b = 5
TAG: