javaSE学习笔记

luoweifu
博客专家认证
2012-08-09 09:29:48
对于初学者来说,java入门确实不太容易,尤其是java的配置比起C或C++来说要复杂的多。本人建议初学者可以去到网上去下载一些视频来看学习,我当时就是看尚学堂马士兵的视频学习java SE的,讲的很详细,比起大学里的一些老师来说要好得多了。(这绝对不是做广告,是我自己的亲身体会)

话不多说,下面就是我通过视频学习时做的一些笔记,供大家参考一下。


  一,遇到问题的解决办法步骤:
  1,查文档,做实验。
  2,Google
  1,关键词的选择
   1),由精细到粗化
   2,略读页面介绍,分析可能性
   1),超过5页没找到,不要往后翻。
   3,先中文,后英文。
  3,论坛
   1),问题问清楚
   2),www.csdn.net
   3),国外的论坛
     基础知识
  1,打开命令提示符的方式有两种:1,开始\程序\附件\命令提示符;2,开始\运行\输入cmd后,按Enter键。
  2,java是解释型语言。java虚拟机能实现一次编译多次运行。
  3,JDK(java software Development kit 软件开发包),JRE(java Runtime Environment java运行环境)。
  4,javac编译java程序,java运行java程序。
  5,经过编译运行之后会形成三个文件.java、.class和.bak文件。bak文件是UltraEdit备份的一个文件。可以在UltraEdidt中进行设置,选择“高级\配置\文件处理\备份”,选择"不备份".
  6,一个文件最多有一个public class。
  7.java中switch语句只能探测int类型值。
  T1,(T表示后面添加的内容)在java中一个字节是八位,一个字符占两个字节(16位unicode字符串)。
  T2,内存中int占4个字节,long类型占8个字节;float占4个字节,double占8个字节;boolean类型占1个字节;
  T3,java不提供运算符的重载。
      类和对象
  8,在static方法中不能访问非static的成员。static方法是指在函数前面加上static限定符,如:public staticvooid main();public static void print(); 例子:视频第三章第19节。
  9,约定俗成的给package取名时把自己公司的域名倒过来,后面再跟上项目名。如:com.bjsxt.java140。
  10,如果你要把一个类放在包里面,第一句话写package,编译出来的类必须位于正确的目录下面。如:package com.bjsxt.java140;依次的目录是com\bjsxt\java140也就是一层层的子文件夹。编译出来的class文件必须位于正确的子目录下。如果你想在第二个类里面应用这一个类必须把名字给写全了,如:com.bjsxt.java140.Cat c = new com.bjsxt.java140.Cat();
  11,还有一个简写是用import引入这个类。如 a,import com.bjsxt.java140.Cat;表示引入Cat这一个类;
   b,import com.bjsxt.java140.Cat.*;表示引入这一个包里的所有类。 一下三种用法都是正确的:
   (1)
   import com.bjsxt.java140.*;
   public class Dog {
   public static void main(String args[]) {
   Cat c = new Cat();
   c.print();
   }
   }
   (2)
   import com.bjsxt.java140.Cat;
   public class Dog {
   public static void main(String args[]) {
   Cat c = new Cat();
   c.print();
   }
   }
   (3)
   public class Dog {
   public static void main(String args[]) {
   //com.bjsxt.java140.Cat c = new com.bjsxt.java140.Cat();
   Cat c = new Cat();
   c.print();
   }
   }
  12,必须class文件的最上层包的文件目录位于classpath路径(设计环境变量)下。 在执行的时候也要把包名给写全了,即执行一个类需要写全包名
  13,java.lang的包在引用时不需要写上包名,除了lang这个包之外的所有包里的类在引用时必须写入包名。
  14,jar的路径:C:\jdk\jre\lib\rt
  15,打成jar包的方法:
  1,打开命令提示符,定位到包的根目录的上一层目录,如E:\java\package>
  2,然后再输入-cvf,
  3,再输入jar名,如test.jar ,
  4,再输入*。*后按Enter建。如: E:\java\package> -cvf test.jar *.*
  16,默认的访问权限是default。
  
      继承
  17,(1)、(函数)重写(overwrite)要注意的机几点:
  1),重写方法(函数)必须和被重写方法具有相同的方法名称、参数列表和返回类型;
  2),重写的时候要从父类的函数声明中拷贝函数的声明(即函数名设参数的类型和个数)。
  3),重写方法不能使用比被重写方法跟严格的访问权限。(为避免名称出错,重写时必须从基类中copy函数的声明)
   (2)、super关键字指向当前类的父类。
   (3)、构造方法:a,子类的构造的过程必须调用其基类的构造方法;b,子类可以在自己的构造方法中使用super(argument_list参数列表)调用基类的构造方法;即使用this(argument_list_)调用本类的另外的构造方法,如果调用super,必须写在子类构造方法的第一行。 c,如果子类的构造方法中没有显示地调用基类的构造方法,则系统默认调用基类无参数的构造方法; d,如果子类的构造方法中没有显示地调用基类的构造方法,而基类中又没有无参数的构造方法,则编译出错。
   (4),object类是java所有类的根基类,如果在类的声明中未使用extends指明其基类,则默认为object类。
   (5),对象转型:a,一个基类的引用类型对象可以“指向”其子类的对象;b,一个基类的引用的不可以访问子类对象新增加的成员(属性和方法);c,可以使用引用变量instanceof类名来判断该引用变量所“指向”的对象该类或该类的子类;d,子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之称为向下转型(downcasting)。
   (6),动态绑定是指在“执行”期间(而非在编译期间)判定所引用对象的实际类型,根据实际的类型调用相应的方法。
   要符合的条件:a,要有继承;b,要有重写;c,父类引用指向子类对象。
   (7),抽象类;
   a,用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,这个方法叫做抽象方法;
   b,含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写;
   c,抽象类不能被实例化;
   d,抽象方法只需声明,而不需实现。
   (8),final关键字(类似于C++中的const)
   a,final的变量的值不能被改变;1),final的成员变量; 2)final的局部变量;
   b,final的方法不能被重写;
   c,final的类不能被继承。
  
      接口
  18,接口(interface)是抽象方法和常量值的定义的集合;从本质上讲,接口是一种特殊的抽象类,这种抽象类包含常量和方法的定义,而没有变量和方法的定义。
  19,接口特性:
   (1),接口可以多重实现;
   (2),接口中声明的属性默认为public static final的;也只能是public static final的;
   (3),接口只能定义抽象方法,而且这些方法默认为public的,也只能是public的;
   (4),接口可以继承其他的接口,并添加新的属性和抽象方法。
  20,接口和接口之间可以继承,类和类之间可以    继承,但是类和接口之间只能通过类来实现接口。
  异常处理
  21,异常的分类(图)
   throwable error 无法处理
   exception 其他类型 必须处理
   RuntimeExcption 可以处理也可以不处理,视情况而定。
  22,异常处理通常的结构是:try{...} catch{...} finally{...}//不管try块中是否抛出异常,finally中的语句必须被执行。
  24,异常与重写的关系:重写方法需要抛出与原方法所抛出类型一致的异常,或不抛出异常。
  25,总结:1,一个图(分类);2,五个关键字:try,catch,finally,throw,throws;3,先逮小的,再逮大的;4,异常与重写的关系。
  数组
  26,一维数组的形式:(1), int a[]; a = new int[5]; 等同于 int a[] = new int[5];
   (2), int[] a; a = new int[5]; 等同于 int[] a = new int[5];
  27,二维数组:int a[][] = {{1,2}, {3,4,5,6}, {7,8,9}};二维数组可看成以数组为元素的数组。
   java中多维数组的声明和初始化应按从高维到低维的顺序进行,如:
   方法(1);
  
int a[][] = new int[3][];
   a[0] = new int[2];
   a[1] = new int[4];
   a[2] = new int[3];//正确
   int t[][] = new int[][4];//非法

   方法(2);
   int a[][] = new int[3][5];//正确,分配一个三行五列的二维数组。
   容器
...全文
515 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxisme 2014-06-16
  • 打赏
  • 举报
回复
初学者需要关爱啊
luoweifu 2012-08-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

楼主太他妈**,谢谢好心的分享!!受用了。。。
如果有更详细的,或者其他资料。一定要第一时间这上面更新哦,一定到场学习!
[/Quote]
会的,我会尽我所能,分享是一件很快乐的事情!
阿懒先生 2012-08-11
  • 打赏
  • 举报
回复
楼主太他妈**,谢谢好心的分享!!受用了。。。
如果有更详细的,或者其他资料。一定要第一时间这上面更新哦,一定到场学习!
KID 2012-08-11
  • 打赏
  • 举报
回复
楼主 何不写在空间~
jiekeyu 2012-08-11
  • 打赏
  • 举报
回复
分享了
playboyhdy 2012-08-10
  • 打赏
  • 举报
回复
楼主是要逆天啊,V5
kimiling 2012-08-10
  • 打赏
  • 举报
回复
lz v587
luoweifu 2012-08-09
  • 打赏
  • 举报
回复
以下是我自己写的几篇博客,希望对初学者有用:
JDK的配置:http://blog.csdn.net/luoweifu/article/details/6789595
Java使封装自己的类,建立并使用自己的类库:http://blog.csdn.net/luoweifu/article/details/7281494
Java程序如何生成Jar、exe及安装文件:http://blog.csdn.net/luoweifu/article/details/7628006
luoweifu 2012-08-09
  • 打赏
  • 举报
回复
知识点(1136): 一个图, 一个类(collections), 三个知识点(1、增强的for循环,2、泛型(Generic),3、自动打包和解包(Auto-boxing/unboxing)), 六个接口(collection,Set,List,Map,Iterator,comparable)
  
  28,图:
  
   容器的概念:
   Collection接口——定义了存取一组对象的方法,其子接口Set和List分别定义了存取方式。
   Set接口中的数据没有对象并肩不可重复;List中的数据对象有顺序且可以重复;
   Map接口中定义了存储“键(key)——值(value)映射对”的方法。
  29,容器类对象在调用remove、contains等方法时需要比较对象是否相等,遮这会涉及到对象类型的equals方法和hashCode方法;
   对于自定义类型,需要重写equals和hashCode方法以实现自定义的对象相等规则。
   注意:相等的对象应该具有相等的hash dodes。当你的对象需要用到索引的时候需要用hashCode。
  30,所有实现了collection接口的容器类都有一个iterator方法用于返回一个实现了Iterator接口的对象。
   Iterator对象称作迭代器,用以方便地实现对容器内元素的遍历操作。
   Iterator接口定义了如下方法:
   boolean hasNext();//判断游标右边是否有元素
   object next();//返回游标右边的元素并将游标一致下一个位置
   void remove();//删除游标左边的元素,在执行完next之后该操作只能执行一次
  31,增强的for循环
   优点:增强的for循环对于遍历array和collection的时候相当的简便。例如:
  
import java.util.*;
   public class EnhancedFor {
   public static void main(String args[]) {
   int arr[] = {1,2,3,4,5};
   for(int i:arr) {
   System.out.println(i);
   }
  
   Collection c = new ArrayList();
   c.add(new String("sss") );
   c.add(new String("aaa") );
   c.add(new String("bbb") );
  
   for(Object o:c)
   System.out.println(o);
   }
   }

   缺点:数组,不能方便地访问下标值; 集合,与使用Iterator相比不能方便地删除集合中的内容。在内部也是调用Iterator。
   总结:除了简单遍历并读取其中的内容外,不建议使用增强的for循环。
  32,Set接口
   Set接口collection的子接口,Set接口没有提供额外的方法,但Set接口的容器类中的元素是没有顺序的,而且不可以
   重复。
   Set容器可以和数学中的“集合”概念相对应。
   J2SDK API中 所提供的Set容器类有HashSet ,TreeSet等。
  33,List接口
   List接口 是Collection的子接口,实现List接口的容器类中的元素是有顺序的,而且可以重复。
   List容器中的元素都应对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。
   J2SDK 所提供的List容器类有ArrayList,LinkedList等。
  34,Comparable接口
   问题:上面的算法根据什么确定对象的“大小”顺序?
   所有可以“排序”的类都实现了java.lang.Comparable接口,Comarable接口中只有一个方法
   public int comparableTo(object obj); 该方法:
   返回 0 表示 this == obj
   返回正数表示 this > obj
   返回负数表示 this < obj
   实现Comparable接口的类通过实现ComparableTo的方法从而确定该类对象的排序方式。
  35,如何选择数据结构:
  衡量标准:读的效率和改的的效率
  Array 读快改慢
  Linked改块读慢
  Hash 两者之间
  36,Map接口
  实现Map接口的类用来存储键—值 对。
  Map接口的实现类有HashMap和TreeMap等。
  Map类中存储的键—值 对通过键来标示,所有键值不能重复。
  37,打包和解包
  打包:将基础类型转换成对象叫打包
  解包:将对象转换成基础类型叫解包
   注:在JDK1.5之后,能自动地打包和解包。如:一下两种写法是等效的。
  Map m1 = new HashMap(), m2 = new TreeMap();
   (1)
   m1.put("one", new Integer(1));
   m1.put("two", new Integer(2));
   m1.put("three", new Integer(3));
   m2.put("A", new Integer(1));
   m2.put("B", new Integer(2));
   (2)
   m1.put("one", 1);
   m1.put("two", 2);
   m1.put("three", 3);
   m2.put("A", 1);
   m2.put("B", 2);
  38,泛型
   JKD1.4以前类型不明确:
   装入集合的类型都被当作Object对待,从而失去自己的实际类型;从集合中取出时往往需要转型,效率低,容易产生错误。
   解决办法:
   在定义集合的时候同时定义集合的类型;
   可以在的定义Collection的时候指定;
   也可以在循环时用Iterator指定。
   好处:
   增强程序的可读性和稳定性。
  
  输入输出流
  39,分类:
   按数据流的方向 输入流和输出流
   按处理数据单位 字节流和字符流
   按照功能 节点流和处理流
   J2 SDK 所提供的所有流类型位于包java.io内都分别继承自以下四种抽象流类型。
  
  
     字节流(8位)   字符流(16位)
  输入流   InputStream   Reader
  输出流   OutputStream Writer
  
   注:在java中一个字节是八位,一个字符占两个字节(16位unicode字符串)
   节点流:是可以从一个特定的数据源(节点)读写数据(如:文件,内存)的流。
   处理流:是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。
   基础InpuStream的流用于向程序中输入数据,且数据的单位为字节(8bit)。
  
  40,节点流类型:
  类型    字符流    字节流
  Flies(文件) FileReader FileInuptStream
   FileWriter FileOutputStream
  Memory Array CharArrayReader ByteArrayInputStream
   CharArrayWriter  ByteArrayOutputStream
  
  Memory String StringReader __
   StringWriter   
  Pipe(管道) PipeReader PipeInputStream
   PipeWriter  PipeOutputStream 
  
  处理流类型:

  处理类型    字符流    字节流
  Buffering    BufferedReader(可读一整行) BufferedInputStream
  Filtering    FilterReader FilterInputStream
   FilterWriter    FilterOutptStream
  Converting between InputStreamReader
  Bytes and charcter OutputStreamWriter   
  Objct Setialization       ObjectInputStream
   ObjectOutputStream
  Data conversion       DataInputStream
   DataOutputStream
  Counting    LineNumberReader    LineNumberInputStream
  Peaking ahead PusbackReader    PushbackInputStream
  Printing    PrintrWriter    PrintStream
   缓冲流:
  缓冲流要“套接”在相应的节点之上,对读写的数据提供了缓冲功能,提高了读写的速率,同时增加了一些新的方法。
  缓冲输入支持其父类的mark和resert方法;
  BuffereReader提供了readerLine用于读取一行字符串(\n或\r分隔);
  BuffereWriter提供了newLine用于写入一行分隔符;
  对于输出的缓冲流,写出的数据会先在内存中缓冲,使用flush方法将会使内存中的数据立刻写出。
   数据流:
  DataOUtputStream和DataInputStream分别继承自OutputStream和InputStream,它属于处理流,需要分别“套接”在OutputStream和InputStream类型的节点流上。
  DataInputStream和DataOutStream提供了可以存取与机器无关的java原始类型数据(如:int,double)的方法。
   Print流
  PrintWriter和PrintStream都是输出流,分别针对字符和字节;
  PrintWriter和PrintStream提供了print和println方法用于多种数据类型的输出;
  PrintWriter和PrintStream的输出操作不会抛出异常,用户通过检测错误状态获取错误信息;
  PrintWriter和PrintStream有自动flush功能。
   Object流
  如果你想把某个对象系列化,必须实现Serializable接口。
  Transient(透明的) 可以用来修饰成员变量。Transient修饰的(成员)变量在系列化的时候不予考虑,往硬盘里存储数据的时候这个值不写。
 线程
 41,线程的基本概念:
(1),线程是一个程序内部的顺序控制流。
(2),线程和进程的区别:
  每个进程都有独立的代码和数据空间(进程上下文),进程间切换会有较大的开销;
  线程可以看成时轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计时器(pc),线程切换的开销小;
多进程:在操作系统中能同时运行多个任务(程序);
多线程:在同一个应用程序中有多个顺序流同时执行;
42,Java的线程通过java.lang.Thread类来实现。VM启动时会有一个由主方法(public static void main(){} )所定义的线程。可以通过创建Thread的实例来创建新的线程。每一个线程都通过特定的Thread对象的方法run()来完成其操作的,方法run()为线程体。通过调用Thread类的start()方法来启动一个线程。
43,能使用接口的时候不要从Thread类继承,因为用接口不仅可以实现接口的方法,而且还可以继承其他的类。
   44,Sleep方法:Thread的静态方法(public static void sleep (long millis) throws InterruptedException) 使得当前线程休眠(暂时停止执行millis毫秒);
  Join方法:合并某个线程;
Yield方法:让出CPU,给其他线程执行的机会。
45,synchronized (this) :锁定当前对象,在执行当前这个对象时不应许其他线程打断插入。使用的方式有:
(1),class Timer {
private static int num = 0;
public synchronized void add(String name) { //执行这个方法的过程中锁定当前对象。
num ++;
try {
Thread.sleep(1);
} catch( InterruptedException e) {
return;
}
System.out.println(name + ",你是第" + num +"使用Timer的线程。");
}
}
(2),class Timer {
private static int num = 0;
public void add(String name) {
synchronized(this) { //锁定大括号这个区域的代码段
num ++;
try {
Thread.sleep(1);
} catch( InterruptedException e) {
return;
}
System.out.println(name + ",你是第" + num +"使用Timer的线程。");
}
}
}
  46,wait();使用wait()的前提是用synchronized锁住该方法。notify的作用是叫醒其它线程,notifyAll的作用是叫醒其它多个线程。
  47,wait方法和sleep方法的区别:
(1),wait方法是Object类的方法,sleep方法是Thread类的方法。
(2),wait时,别的线程可以访问锁定的对象;调用wait方法时必须锁定该对象。
(3),sleep时,别的线程不可以访问锁定对象。
  网络编程
  48,网络编程 != 网站编程
  49,分层模型(表格)
OSI参考模型 TCP/IP参考模型
应用层 应用层
表现层
会话层
传输层 传输层
网络层 网络层
数据链路层 物理 + 数据链层
物理层

  50,IP:每一台计算机都有独立(独一无二)的IP地址;TCP协议是可靠的,但速度慢,效率低;UDP协议是不可靠的,但速度快,效率高。
  51,一般的网络编程叫Socket(插座)编程 。两个java应用程序可通过一个双向的网络通信连接来实现数据,这个双向链路的一端称为Socket。Socket通常用来实现client-server连接。
  52,java.net包中定义的两个类Socket和ServeSocket,分别用来实现双向连接的client和server端。
  53,建立连接时所需的寻址信息为远程计算机的IP地址和端口号(Port number)。自己用端口号要用1024以上的(1024以下的很多被系统占用了)。端口号分为TCP端口和UDP端口,每一个65536个端口。
  GUI编程
   本章内容:
  (1)、AWT,(2)、组件和容器,(3)、布局管理器,(4)、事件处理,(5)、java图形,(6)、Window事件。
  54,AWT
  AWT(Abstract Window Toolkit)包括了很多类和接口,JavaApplication的GUI(Graphics User Interface图形用户界面)编程。
  GUI的各种元素(如:窗口,按钮,文本框等)由java类来实现。
  使用AWT所涉及的类一般在java.awt包中。
  Container和Component是AWT中的两个核心类。
  
  55,新的开发的包javax.swing。
  56,java语言中,提供布局管理器类的对象可以管理
  (1)、管理Component在Container中的布局,不必直接设置Component位置和大小。
  (2)、美格的Container都有一个布局管理器对象,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器,调用Container的setLayout方法改变其布局管理器对象。
  AWT提供了5中布局管理器
  FlowLayout, BorderLayout, GridLayout, CardLayout, GridBagLayout
  57,FlowLayout是Panel类的默认布局管理器。
new FlowLayout(FlowLayout.RIGHT, 20, 40);
右对齐,组件之间水平距离20个像素,垂直距离40个像素。
New FlowLayout(FlowLayout.LEFT);
左对齐,水平和垂直距离为缺省值(5);
New FlowLayout();
使用缺省的居中对齐方式,水平和垂直距离为缺省值(5)。
  58,BroderLayout是Frame类的默认布局管理器,BroderLayout将整个容器的布局划分成:东(EAST),西(WEST),南(SOUTH),北(NORTH),中(CENTER)五个部分,组件只能被添加到指定的区域。
  如不指定组件的加入部分,则默认为加入到CENTER区;每个区域只能加入一个组件,如加入多个,则先前加入的会被覆盖。
  BorderLayout型布局容器尺寸缩放原则:
  北、南两个区域是水平方向缩放;
  东、西两个区域是垂直方向缩放;
  中部可在两个方向上缩放。
  59,GridLayout型布局管理器
  GridLayout型布局管理器将空间划分成规则的矩形网格,每个单元格区域大小相等。组件被添加到每个单元格中,先从左到右填满后换行,在从上到下。
  GridLayout构造方法中指定分隔的行数和列数。如:
  GridLayout(3, 4); //三行四列
   布局管理器总结:
  Frame是一个顶级窗口,Frame的缺省布局管理器为BorderLayout,Panel无法单独显示,必须添加到某个容器中,Panel的缺省布局管理器为FlowLayout。
  当Panel作为一个组件添加到某个容器中,该Panel仍然可以有自己的布局管理器。
  使用布局管理器时,布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件的大小和位置属性,如果试图使用java语言提供的setLocation(),setSize(),setBounds()等方法,则都会被布局管理器覆盖。
  如果布局管理器确实需要亲自设置组件的大小或位置,则应取消该容器的布局管理器,方法为:setLayout(null)。
  60,事件监听
  
  61,Paint 每次需要重画的时候调用Paint()。
  62,匿名类:在方法内部定义的没有类名的类。(视频11章,13节)
  使用匿名类的情况:逻辑比较简单,语句比较少,而且不经常变动时可以使用匿名类。
luoweifu 2012-08-09
  • 打赏
  • 举报
回复
知识点(1136): 一个图, 一个类(collections), 三个知识点(1、增强的for循环,2、泛型(Generic),3、自动打包和解包(Auto-boxing/unboxing)), 六个接口(collection,Set,List,Map,Iterator,comparable)
  
  28,图:
  
   容器的概念:
   Collection接口——定义了存取一组对象的方法,其子接口Set和List分别定义了存取方式。
   Set接口中的数据没有对象并肩不可重复;List中的数据对象有顺序且可以重复;
   Map接口中定义了存储“键(key)——值(value)映射对”的方法。
  29,容器类对象在调用remove、contains等方法时需要比较对象是否相等,遮这会涉及到对象类型的equals方法和hashCode方法;
   对于自定义类型,需要重写equals和hashCode方法以实现自定义的对象相等规则。
   注意:相等的对象应该具有相等的hash dodes。当你的对象需要用到索引的时候需要用hashCode。
  30,所有实现了collection接口的容器类都有一个iterator方法用于返回一个实现了Iterator接口的对象。
   Iterator对象称作迭代器,用以方便地实现对容器内元素的遍历操作。
   Iterator接口定义了如下方法:
   boolean hasNext();//判断游标右边是否有元素
   object next();//返回游标右边的元素并将游标一致下一个位置
   void remove();//删除游标左边的元素,在执行完next之后该操作只能执行一次
  31,增强的for循环
   优点:增强的for循环对于遍历array和collection的时候相当的简便。例如:
  
import java.util.*;
   public class EnhancedFor {
   public static void main(String args[]) {
   int arr[] = {1,2,3,4,5};
   for(int i:arr) {
   System.out.println(i);
   }
  
   Collection c = new ArrayList();
   c.add(new String("sss") );
   c.add(new String("aaa") );
   c.add(new String("bbb") );
  
   for(Object o:c)
   System.out.println(o);
   }
   }

   缺点:数组,不能方便地访问下标值; 集合,与使用Iterator相比不能方便地删除集合中的内容。在内部也是调用Iterator。
   总结:除了简单遍历并读取其中的内容外,不建议使用增强的for循环。
  32,Set接口
   Set接口collection的子接口,Set接口没有提供额外的方法,但Set接口的容器类中的元素是没有顺序的,而且不可以
   重复。
   Set容器可以和数学中的“集合”概念相对应。
   J2SDK API中 所提供的Set容器类有HashSet ,TreeSet等。
  33,List接口
   List接口 是Collection的子接口,实现List接口的容器类中的元素是有顺序的,而且可以重复。
   List容器中的元素都应对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。
   J2SDK 所提供的List容器类有ArrayList,LinkedList等。
  34,Comparable接口
   问题:上面的算法根据什么确定对象的“大小”顺序?
   所有可以“排序”的类都实现了java.lang.Comparable接口,Comarable接口中只有一个方法
   public int comparableTo(object obj); 该方法:
   返回 0 表示 this == obj
   返回正数表示 this > obj
   返回负数表示 this < obj
   实现Comparable接口的类通过实现ComparableTo的方法从而确定该类对象的排序方式。
  35,如何选择数据结构:
  衡量标准:读的效率和改的的效率
  Array 读快改慢
  Linked改块读慢
  Hash 两者之间
  36,Map接口
  实现Map接口的类用来存储键—值 对。
  Map接口的实现类有HashMap和TreeMap等。
  Map类中存储的键—值 对通过键来标示,所有键值不能重复。
  37,打包和解包
  打包:将基础类型转换成对象叫打包
  解包:将对象转换成基础类型叫解包
   注:在JDK1.5之后,能自动地打包和解包。如:一下两种写法是等效的。
  Map m1 = new HashMap(), m2 = new TreeMap();
   (1)
   m1.put("one", new Integer(1));
   m1.put("two", new Integer(2));
   m1.put("three", new Integer(3));
   m2.put("A", new Integer(1));
   m2.put("B", new Integer(2));
   (2)
   m1.put("one", 1);
   m1.put("two", 2);
   m1.put("three", 3);
   m2.put("A", 1);
   m2.put("B", 2);
  38,泛型
   JKD1.4以前类型不明确:
   装入集合的类型都被当作Object对待,从而失去自己的实际类型;从集合中取出时往往需要转型,效率低,容易产生错误。
   解决办法:
   在定义集合的时候同时定义集合的类型;
   可以在的定义Collection的时候指定;
   也可以在循环时用Iterator指定。
   好处:
   增强程序的可读性和稳定性。
  

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧