欢迎软件行业的同仁们来参观讨论!

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

TAG:

 

评分:0

我来说两句

日历

« 2024-05-05  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 39537
  • 日志数: 55
  • 建立时间: 2013-08-30
  • 更新时间: 2013-12-27

RSS订阅

Open Toolbar