黑马程序员--基础复习2012.8.2

来源:互联网 发布:头像识别软件 编辑:程序博客网 时间:2024/05/29 08:32
---------------------- android培训、java培训、期待与您交流! ----------------------

class 关键字定义

       main保证类的独立运行,是程序的入口,会被JVM调用

 

循环

       定义初始化表达式;

       While(条件表达式){

       循环体(执行语句);

}

      

       for(初始化表达式:循环条件表达式:循环后的操作表达式)

 

       变量有自己的作用域,对于for来说:如果用于控制循环的增量定义在for语句中,for执行完毕,变量在内存中释放。

 

使用循环结构

       当要对某些语句执行很都次时,就使用循环结构。

 

使用循环的时候需要注意,那些语句需要参与循环,哪些不需要

 

break:应用范围:选择结构和循环结构

continue:应用于循环结构

       a:两个语句离开应用范围,都没有意义

       b:这两个语句单独存在下面都不可以有语句,因为执行不到

       c:continue语句是结束本次循环,继续下一次循环

       d:标号的出现,可以让这两个语句作用于指定的范围

 

 

函数

       定义在类中的具有特定功能的一段独立小程序

重载:在同一个类中允许存在一个以上的同名函数,只要他们的参数个数或者参数类型不同即可,与返回值无关,只看参数列表。方便阅读,优化程序设计

 

数组:

       同一种类型数据的集合。数组就是一个容器。

       可以自动给数组中的元素从0开始编号,方便操作这些元素。

 

       ArrayIndexOutOfBoundsException:操作数组时,访问到了数组中不存在的角标

       NullPointerException:空指针异常,当引用没有任何指向值为null,该引用还在用于操作实体

 

内存结构:

       Java程序运行时,需要在内存中分配空间。为了提高运算效率,又对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

 

栈内存,用于存储局部变量,当数据使用完,所占空间会自动释放

堆内存,数组和对象,通过new建立的实例都放在堆内存中

每一个实体都有一个内存地址

实体中的变量都有默认初始值

实体不知被使用,会在不确定时间内被垃圾回收器回收

 

 

选择排序

1.       拿角标i=0位置的数据和后面的数据逐一比较,取得最小值

2.       拿角标i=1位置的数据和后面的数据逐一比较,取得第二小值

3.       ……

4.       直到角标i=arr.length-1为最后一个角标

5.  // 选择排序

6.  publicstaticvoid choiceSort(int[] arr) {

7.      int len = arr.length - 1;//数组最大角标

8.      for (int i = 0; i < len; i++) {//外层循环,从i=0循环到数组的倒数第二个角标

9.          for (int j = i + 1; j <= len; j++) {//内层循环,循环到从j=i+1循环到最后一个角标

10.           if (arr[i] > arr[j]) {//如果满足条件

11.               //交换元素

12.               swap(arr, i, j);

13.           }

14.        }

15.    }

16.   }

 

冒泡排序:位置相邻的两个元素进行比较,如果符合条件就换位

publicstaticvoid bubleSort(int[] arr){

       int len = arr.length;

       for(int i=0; i<len; i++){

       for(int j=0; j<len-i-1; j++){//-i,让循环次数减少,-1,避免角标越界

              //相邻元素比较

              if(arr[j]>arr[j+1])

                  //交换元素

                  swap(arr, j, j+1);

           }

       }

    }

 

面向对象:三大特征:封装,继承,多态

       将功能封装进对象,强调具备了功能的对象。

开发:找对象,建立对象,使用对象,维护对象的关系

 

类:对现实生活中事物的描述

对象:就是这类事物实实在在的存在个体

 

具体对象对应java在堆内存中用new建立的实体

 

成员变量作用于整个类,在堆内存中,因为对象存在才存在

局部变量作用域函数中,或者语句中。存在于栈内存中

 

匿名对象,对象的简化形式

       对象的方法只调用一次

       匿名对象作为实际参数进行传递

 

封装:是指隐藏对象的属性和其实现细节,仅对外提供公共访问方式。

好处:将变化隔离;便于使用;提高重用性;提高安全性;

封装原则:将不需要对外提供的内容都隐藏起来;

把属性都隐藏起来,提供公共方法对外访问。

 

private :私有,权限修饰符;只在本类中有效。是封装的一种表现形式之一。

 

构造函数

特点:

1.       函数名与类名相同

2.       不用定义返回值类型

3.       不可以写return语句

作用:用于给对象初始化;

构造函数在对象一建立就运行。给对象初始化。一个对象建立,只运行一次。

而一般方法是对象调用才执行,给对象添加对象具备的功能,可以被同一对象调用多次

 

静态代码块

作用:给对象进行初始化。

对象一建立就运行,且优先于构造函数执行。

和构造函数区别:

       构造代码块是给所有对象进行统一初始化,而构造函数是给对应的函数初始化。

 

this:表示本类对象,代表它所在函数所属对象的引用,哪个对象调用this所在的函数,this就代表哪个对象。本类内部使用了本类对时,使用this

       this(name);//this用于构造函数初始化。只能定义在第一行,要先执行。

 

static 关键字

用于修饰成员(成员函数,成员变量),可以直接被类名调用。

static特点

1.  随着类的加载而加载,随着类的销毁而消失,生命周期最长。

2.  优先于对象存在

3.  被所有对象共享

4.  可以直接被类名调用

 

特有数据随着对象存储在堆内存中。

 

实例变量和类变量区别

1存放位置

    类变量随着类的加载而存在于方法区中

    实例变量随着对象的建立而存在于堆内存中

2生命周期

    类变量生命周期最长,随类的消失而消失

    实例变量生命周期,随着对象的消失而消失

static使用注意事项

1.       静态方法只能访问静态成员。

2.       静态方法中不可以定义this,super关键字,因为静态优先于对象存在。

static

       优点:节省空间;可以被类名调用;

       缺点:生命周期过长,访问出现局限性(只能访问静态)

 

静态代码块》默认初始化属性》构造代码块初始化》构造函数初始化

Person  p = new Person(“zhangsan”,20)

1.       因为new 用到了Person.class文件,所以会先找到Person.class文件并加载到内存中

2.       如果有static代码块的话,执行该类中的static代码块,给Person..class类进行初始化

3.       在堆内存中开辟空间分配内存地址

4.       在堆内存中建立对象的特有属性,并进行默认初始化

5.       对属性进行显示初始化(对属性设置的初始值name=”name”

6.       对对象进行构造代码块初始化

7.       对对象进行与之对应的构造函数初始化

8.       将内存地址赋给栈内存中的p变量


 

/*
 * 设计模式:解决某一类问题最行之有效的方法
 * 单例设计模式:解决一个类在内存只存在一个对象。
 * 1.将构造函数私有化
 * 2.在类中创建一个本类对象
 * 3.提供一个方法可以获取到该对象
 */
/*
 * 饿汗式,加载类时直接创建对象
 */
class Single {
 private Single() {
 }

 private static Single single = new Single();

 public static Single getInstance() {
  return single;
 }
}

/*
 * 懒汉式,调用时才创建对象,延迟加载
 */
class Single2 {
 private Single2() {
 }

 private static Single2 single = null;

 public static Single2 getInstance() {
  //判断
  if (single == null) {
   //拿锁
   synchronized (Single2.class) {
    if (single == null) {
     single = new Single2();
    }
   }
  }
  return single;
 }
}

 


---------------------- android培训、java培训、期待与您交流!

----------------------详细请查看:http://edu.csdn.net/heima