浅雪小脚印吧 关注:40贴子:2,348
  • 4回复贴,共1

笔记之java

只看楼主收藏回复

1、课程名称:面向对象


1楼2012-05-09 12:17回复
    2、知识点
    2.1、上次课程的主要知识点
    1、 String类的主要特点:
    · 有两种实例化方式:
    |- 直接赋值:只开辟一个堆内存,不产生垃圾空间,会自动入池;
    |- 通过构造方法:产生两个堆内存,一个将成为垃圾,不会自动入 池,可以通过intern()方法手工入池;
    · 字符串有两种比较方式:
    |- “==”:表示比较两个堆内存的地址,属于数值比较;
    |- “equals()”:表示两个字符串的内容比较,区分大小写;
    · 字符串的内容一旦声明则不可改变;
    2、 String类的常用方法:
    · 字符与字符串之间的转换:
    |- 【构造】将一个字符数组变为字符串:public String(char [] val);
    |- 【构造】将部分字符数组变为字符串:public String(char [] val,int offset,int length);
    |- 【普通】返回指定位置上的字符:public char charAt(int index);
    |- 【普通】将字符串变为字符数组:public char[] toCharArray();
    · 字节与字符串的转换:
    |- 【构造】将全部字节数组变为字符串:public String(byte [] val);
    |- 【构造】将部分字节数组变为字符串:public String(byte [] value,int offset,int length);
    |- 【普通】将字符串变为字节数组:public byte[] getBytes();
    · 字符串截取:
    |- 【普通】从指定位置截取到结尾:puiblic String substring(int offset);
    |- 【普通】截取部分内容:public String substring(int offset,int length);
    · 大小写转换:
    |- 【普通】转大写:public String toUpperCase();
    |- 【普通】转小写:public String toLowerCase();
    · 字符串检索:
    |- 【普通】判断字符串是否存在:public boolean contains(String str);
    |- 【普通】判断是否以指定的字符串开头:public boolean startsWith(String str);
    |- 【普通】判断是否以指定的字符串结尾:public boolean endsWith(String str);
    |- 【普通】从指定位置检索字符串的位置:public int indexOf(String str,int index);找不到返回-1
    |- 【普通】从开头检索字符串的位置:public int indexOf(String str);
    |- 【普通】从后向前检索字符串的位置:public int lastIndexOf(String str);
    |- 【普通】从后向前的指定位置开始检索字符串位置:public int lastIndexOf(String str,int index);
    · 字符串替换:
    |- 【普通】替换全部字符串的内容:public String replaceAll(String oldStr,String newStr);
    |- 【普通】替换首个字符串的内容:public String replaceFirst(String oldStr,String newStr);
    · 字符串比较:
    |- 【普通】区分大小写的比较:public boolean equals(String str);
    |- 【普通】不区分大小写的比较:public boolean equalsIngoreCase(String str);
    |- 【普通】比较字符串大小:public int compareTo(String str):>0、<0、=0;
    · 字符串拆分:
    |- 【普通】全部拆分:public String[] split(String regex);
    |- 【普通】拆分成指定个数:public String[] split(String regex,int len);
    · 其他操作方法:
    |- 【普通】取出字符串的长度:public int length();
    |- 【普通】判断字符串是否是空字符串(不是null):public boolean isEmpty();
    |- 【普通】去掉左右空格:public String trim();
    3、 this关键字
    · “this.属性”:表示调用本类中的属性,以后只要是类属性的调用都要加上this;
    · “this.方法()”:调用本类中的普通方法,建议也加上this;
    · “this()”:调用本类中的构造方法,但是在进行构造方法互调用的时候一定要将此语句放在构造方法的首行,并且必须保留有一个构造方法是不使用this()调用其他构造方法的,以作为程序的出口;
    · this表示的是当前对象:即,当前调用类中方法的对象;
    4、 对象比较:是由一个类所提供的一个操作方法,而且一个对象传递的类中之后,那么这个对象可以直接调用类中的私有属性操作;
    5、 引用传递:简单Java类和数据表之间的联系、自定义数据类型作为类属性或方法的参数;


    2楼2012-05-09 12:25
    回复
      2.2、本次预计讲解的知识点
      1、 static关键字的使用;
      2、 代码块的作用;
      3、 内部类的定义及使用;
      4、 数据链表的基本实现;
      5、 二叉树的基本实现;


      3楼2012-05-09 12:25
      回复
        3、具体内容
        3.1、static关键字(重点)
        对于static关键字,应该已经并不陌生了,因为此关键字一直在出现。
        3.1.1、使用static定义属性
        在讲解此概念之前,首先完成这样的一个操作,现在希望定义一个表示北京人的操作类,按照最早的方式,则类编写如下:
        class Person {
        private String name ;
        private int age ;
        String city = "北京" ; // 为了省事暂时不封装
        public Person(String name,int age) {
        this.name = name ;
        this.age = age ;
        }
        public String getInfo(){
        return "姓名:" + this.name + ",年龄:" + this.age + ",城市:" + city ;
        }
        }
        public class OODemo {
        public static void main(String args[]) {
        Person per1 = new Person("张三",20) ;
        Person per2 = new Person("李四",21) ;
        Person per3 = new Person("王五",22) ;
        per1.city = "北平" ;
        System.out.println(per1.getInfo()) ;
        System.out.println(per2.getInfo()) ;
        System.out.println(per3.getInfo()) ;
        }
        }
        那么现在的内存关系图如下所示:
        这个时候每一个对象都有各自的city属性,现在而言,那么既然内容一样,则肯定是重复开辟了属性内容,那么如果说现在已经产生了5000W个Person对象,而又突然要决定修改所有对象的city属性,即:北京改名了,成为北平,那么这个时候要修改5000W个,现在发现即浪费空间,又不好修改;
        那么这个时候实际上就希望city变为一个公共属性,这样一来,即解决了空间的占用问题,又同时解决了修改复杂的操作问题,而这种公共属性就只能通过static关键字定义了:
        class Person {
        private String name ;
        private int age ;
        static String city = "北京" ; // 为了省事暂时不封装
        public Person(String name,int age) {
        this.name = name ;
        this.age = age ;
        }
        public String getInfo(){
        return "姓名:" + this.name + ",年龄:" + this.age + ",城市:" + city ;
        }
        }
        public class OODemo {
        public static void main(String args[]) {
        Person per1 = new Person("张三",20) ;
        Person per2 = new Person("李四",21) ;
        Person per3 = new Person("王五",22) ;
        per1.city = "北平" ;
        System.out.println(per1.getInfo()) ;
        System.out.println(per2.getInfo()) ;
        System.out.println(per3.getInfo()) ;
        }
        }
        发现现在加入了static关键字之后,如果有一个对象修改了city属性的内容,那么所有的对象中的city属性内容就全部更改了,即:使用static定义的就成为了一个公共属性,而此时的内存关系图如下所示:
        关于程序的内存区,实际上一共有四种:
        · 堆内存:保存所有对象中的具体信息;
        · 栈内存:保存一块堆内存的地址数值;
        · 全局数据区:保存所有的公共属性;
        · 全局代码区:保存所有的方法;
        但是,既然现在的city属性是一个公共属性了,那么这个公共属性只依靠一个对象修改是否合适?修改这种变量的时候,应该具备一个所有对象最高的代表,而这个对象的最高代表就是类,所以对于static属性就应该是通过类名称调用,即,代码修改为以下形式:
        Person.city = "北平" ;
        通过以上的代码可以发现,使用static操作的时候有以下特点:
        · 由于static属性可以直接通过类名称调用,所以被称为类属性;
        · 一般对象中的属性都需要在实例化对象产生之后才可以分配空间,但是类属性可以在没有实例化对象的时候直接被用户所操作;
        · 使用static操作永远表示公共的属性,所有对象不管是新是旧都拥有同一个static属性;


        4楼2012-05-09 12:30
        回复
          头昏的编程


          IP属地:湖北来自Android客户端5楼2012-05-27 20:14
          回复