java和javac详解

java和javac详解
java和javac详解

java和javac命令行

(1)javac.exe:用于编译Java程序源代码,编译之后生成字节码文件(.class)

语法:javac [option] source

[option]:可选项,可包括以下的选项。

-classpath<路径>:指定将使用的类路径或要使用的封装类的.jar文件的路径。(可以是目录,jar文件,zip文件(里面都是class文件),会覆盖掉所有在CLASSPATH里面的设定。)

-d<目录>:指定java源文件编译之后生成的字节码.class文件的存放位置

source 指Java源文件名,包括文件扩展名.java

(2)java.exe:用与执行java程序编译之后的字节码文件

语法:java [option] classname [arguments]

[option]:可选项,可包括以下的选项。

-classpath<路径>:指定将使用的类路径或要使用的封装类的.jar文件的路径。

-version<目录>:显示JDK的版本

ClassName:编译之后的字节码文件,但不包含文件扩展名.class

[arguments]:可选项,指传递给main方法的参数。main方法的参数是字符串数据。

知道了这两个命令的一般规则之后,我们开始实际编码。

先来描述一下几种情况:

1、单独的一个java主程序;

2、带包的一个java主程序;

3、同一个包的两个类,一个引用另一个;

4、引用不同包的其它类。

1、单独的一个java主程序

public class dog{

public static void main(String[] args) {

System.out.println("我是一只小狗");

}

}

将命令行到该java文件同一目录(比如dog.java放在D:/test/dog.java)

输入命令d:

cd test

然后输入命令javacdog.java则会在当前的文件夹下出现dog.class类文件。

如果想指定编译的同时将编译好的类文件放到某个文件夹下则可以使用-d指定路径。

例如

1.javac -d ./ dog.java则是在当前目录下,即是D:/(./表示当前目录 ../表示上一级目录)

2.javac -d ../ dog.java 在上一个文件夹(上上级,这个例子路径太浅,不能实验)

3.javac -d ../ a dog.java则是在上一个文件夹下的a文件夹下,但是一定要保证指定的文件路径存在。

编译完之后,就应该使用执行命令java了。

使用命令:java dog 就可以运行了(当然这里使用的是这个例子:javac -d ./ dog.java )

注意:发现这里并没有使用-classpath标注,那是因为没有使用到某些jar文件

即如果使用了a.jar则要加上-classpath .;a.jar其中前面的那个“.;”我理解成是把

环境变量中配置的jar文件拿进来。

2、带包的一个java主程序

package my.friends;

public class cat{

public static void main(String[] args){

System.out.println("我是小猫");

}

}

javac -d ./ cat.java,这时候会在当前目录下自动根据包的结构形式创建文件目录,即创建my/friends/文件夹,D:/test/my/friends/cat.class

执行:java my.friends.cat

3、同一个包的两个类Joeytang.java文件为

pakagemy.friends

public class Joeytang{

public String toString(){ return "Joey"; } }

Sunnylu.java文件为

pakagemy.friends

public class Sunnylu{

public static void main(String[] args) {

System.out.println("I am Sunney."+joey+" is my friend.");

}

}

这种情况中Sunnylu类引用了Joeytang所以必须先编译Joeytang按照第二种情况将Joeytang编译,此时开始编译Sunnylu,注意要使用javac -classpath .; -d ./ Sunnylu.java,此时加入了-classpath选项,我也不知道为什么,但是如果不加编译老是提示找不到Jeoytang这个(郁闷啊,就这个问题搞了一个上午)。编译完以后,来运行Sunnylu也要加入-classpath选项,java -classpath .;

my.friends.Sunnylu

4、引用不同包的其它类

Tom.java文件为

package my.partners;

public class Tom{

public String toString() { return "It's Tom"; }}

Sunnylu.java文件为

pakagemy.friends

import my.friends.Tom;

public class Sunnylu{

public static void main(String[] args) {

System.out.println( "I am Sunny.");

Tom tom = new Tom();

System.out.println(tom + " is my partner.");

System.out.println(joey + " is my friends."); } }

这种情况首先把Joeytang编译了,然后编译Tom类,因为Tom为外部类所以在编译Sunnylu的时候一定要在-classpath注明Tom的路径例如如果我把Tom 类编译到当前目录的上一级目录上去了,则编译Sunnylu时使用javac

-classpath .;../ -d ./ Jerry.java,此时编译时会到上一目录按照Tom的包结构来找Tom类。运行时一样要加入这个选项。好了写这么多希望跟我一样郁闷此问题的可以得到些帮助。

更深奥一点的。(使用-classpath和-sourcepath)参考网络资源

javac

-classpath,设定要搜索类的路径,

-sourcepath,设定要搜索编译所需java 文件的路径,可以是目录,jar文件,zip文件(里面都是java文件)。

所以一个完整的javac命令行应该是这样的,

假设dog.java在d:\test里面,

(在任何的目录的都可以执行以下命令来编译。)

javac -classpath c:\classes;c:\jar\abc.jar;c:\zip\abc.zip

-sourcepathc:\source\project1\src;c:\source\project2

\lib\src.jar;c:\source\project3\lib\src.zip d:\test\dog.java

表示编译需要c:\classes下面的class文件,c:\jar\abc.jar里面的class文件,c:\zip\abc.zip 里面的class文件(当然这些jar都是没有的)

还需要c:\source\project1\src下面的源文件,c:\source\project2 \lib\src.jar里面的源文件,c:\source\project3\lib\src.zip里面的源文件(当然这些源文件也是没有的)

然后就编译d:test/dog.java文件

编译成功

注意:jar,zip里面的源文件不会有什么改动,目录下的源文件,有可能会被重新编译。

java

-classpath,设定要搜索的类的路径,可以是目录,jar文件,zip文件(里面都是class文件),会覆盖掉所有的CLASSPATH的设定。

由于所要执行的类也是要搜索的类的一部分,所以一定要把这个类的路径也放到-classpath的设置里面。

表现在,在要执行的类的路径里面执行java时,一定要添加上点号(.)标示本目录也要搜索。

假设dog.class在路径d:\test里面

可以在任何路径下执行以下命令

java -classpath c:\classes;c:\jar\abc.jar;c:\zip\abc.zip; d:\testdog

问题:如果main.class属于c:\jar\abc.jar,并且在https://www.360docs.net/doc/fb5730270.html,blogs.jeffchen这个包里,那么执行java -classpath c:\classes;c:\jar\abc.jar;c:\zip\abc.zip;https://www.360docs.net/doc/fb5730270.html,blogs.jeffchen.m ain即可,但是如果classpath中包含多个jar包呢?并且其他jar包中也有https://www.360docs.net/doc/fb5730270.html,blogs.jeffchen会发生什么情况?错误?

在windows下,

文件路径的分割符为反斜杠\

类或者java文件列表的分割符为分号;

在linux下

文件路径的分隔符位斜杠/

类或者java文件列表的分隔符为冒号:

一个linux下编译和运行的例子

/usr/local/java/bin/javac -classpath /tm p/javatest/lib/mail-1.3.3.jar -d /tmp/javatest/bin/ /t m p/javatest/src/jp/co/realseed/Capability.java

/usr/local/java/bin/java -classpath /tmp/javatest/lib/mail-1.3.3.jar:/t m p/javatest/bin/ jp.co.realseed.Capability

Java集合类知识点总结

Java集合类 Java集合类 (1) 1.Map (3) 1.1.HashMap (3) 1.1.1.底层实现 (3) 1.1.2.特点 (3) 1.1.3.源码分析 (4) 1.1.4.多线程可能出现的问题 (5) 1.2.ConcurrentHashMap (6) 1.2.1.底层实现 (6) 1.2.2.源码分析 (7) 1.3.HashTable (9) 1.3.1.HashTable是线程安全的,因为所有方法上都加了synchronized关键 字。9 1.3.2.HashTable的key和value都不可以为null。 (9) 1.3.3.扩容时,capacity=2*capacity+1 (9) 1.3.4.数组默认大小为11 (9) 1.3.5.查找下标时,没有使用hash&length-1,而是直接进行计算的 (9) 1.4.TreeMap (9) 1.4.1.底层实现为红黑树 (9) 1.4. 2.TreeMap是一个有序的key-value集合,基于红黑树实现。该映射根据 其键的自然顺序进行排序,或者根据创建时提供的Comparator进行排序 (10) 1.4.3.接口实现 (10) 1.4.4.Entry (11) 1.5.LinkedHashMap (11) 1.5.1.底层是数组+链表+红黑树+双向链表 (11) 1.5.2.维护链表顺序和访问顺序 (11) 1.5.3.LinkedHashMap 可以通过构造参数 accessOrder 来指定双向链表是否在 元素被访问后改变其在双向链表中的位置。 (11) 1.5.4.当accessOrder为true时,get方法和put方法都会调用recordAccess 方法使得最近使用的Entry移到双向链表的末尾;当accessOrder为默认值 false时,recordAccess方法什么也不会做。 (11) 1.5.5.LRU实现 (11) 2.Collection (11) 2.1.List (12) 2.1.1.ArrayList (12) 2.1.2.LinkedList (13) 2.1.3.CopyOnWriteArrayList (13) 2.2.Set (14) 2.2.1.HashSet (14)

JAVA中常用的集合类型

JAVA常用的高级数据类型——集合类型 一、JAVA语言中的集合类型主要有三种形式:Set(集)、List(列表)、Map(映射),每种类型的集合都包括三部分:接口、实现和算法。 a)集合接口实现集合的操作和集合的具体功能实现细节的相互分离—— Set接口、List接口、Map接口 b)集合的具体功能实现类实质上是各种可重用的数据结构的具体表示 List接口的实现类有ArrayList、LinkedList、Stack和Vector等 集合类,Vector 类提供了实现可增长数组的功能,随着更多元素加 入其中,数组变的更大。在删除一些元素之后,数组变小。 Set接口的实现类有HashSet、LinkedHashSet和TreeSet等集合类 Map接口的实现类有HashMap、Hashtable、LinkedHashMap、Properties和TreeMap等集合类。 c)集合的算法指可以对实现集合接口的各个集合的功能实现类提供如排 序、查找、交换和置换等方面的功能实现。 二、List接口 1.List接口代表有序的集合,可以对List接口代表的有序集合中每个元素 的插入位置进行精确地控制,并利用元素的整数索引(代表元素在集合中的位置)访问元素中的各个成员,List接口代表的集合是允许出现重复元素的。 2.List接口主要成员方法: 1)void add(int index,E element)在列表指定位置插入指定元素 2)E get(int index) 返回结合中指定位置的元素 3)E remove(int index) 移除集合中指定位置的元素 4)E set(int index,E elment) 用指定元素替换集合中指定位置的元素 5)boolean add(E o) 向列表的尾部追加指定的元素 6)boolean contains(Object o) 如果列表包含指定的元素,则返回true。 7)boolean isEmpty() 如果列表不包含元素,则返回 true。 8)int size() 返回列表中的元素数 9)Iterator iterator()返回以正确顺序在列表的元素上进行迭代的迭代器。 3.List的实现类 List在数据结构中分别表现为数组(ArrayList)、向量(Vector)、链表(LinkedList)、堆栈(Stack)和队列等形式。 Vector集合和ArrayList集合都是采用数组形式来保存对象,区别在于ArrayList集合本身不具有线程同步的特性,不能用在多线程的环境下,可以使用ArrayList集合能够节省由于同步而产生的系统性能的开销。而Vector集合实现了对线程同步的支持,因此在多线程并发访问的应用环境下,该集合本身能够保证自身具有线程安全性。在多线程的并发访问中,可以将Vector集合的对象实例设计为类中的成员属性,而应该将ArrayList 集合的对象实例设计为局部对象。 public class UserInfo{ List oneVector=new Vector(); public void execute(){

JAVA运算符和条件结构

运算符和条件结构 3.1 训练的技能点 (1)学会使用关系运算符和逻辑运算符 (2)学会获取键盘输入的数据 (3)学会使用if-else和多重if条件结构 (4)学会使用switch结构 3.2 上机任务 【阶段一】指导:从键盘获取信息并判断是否合法 训练要点 (1)键盘输入 (2)条件运算符 (3)逻辑运算符 需求说明 (1)录入会员信息(会员号、会员生日、会员积分),并打印输出录入的信息; (2)功能1:判断录入的会员号是否合法(必须为4位整数),如果录入合法,显示录入的信息,如果不合法,则显示“录入信息失败”; 实现思路及关键代码 (1)创建文件,命名为AddCust.java。 (2)实现功能1: 使用Scanner获取用户的键盘输入,存储在变量custNo、custBirth、custScore中。Scanner input = new Scanner( System.in ); System.out.println( “请输入会员号<4位整数>:” ); //提示输入4位会员号 int custNo = input.nextInt( ); //从键盘输入会员号,存在变量custNo中 注意 在使用Scanner前,要在AddCust.java文件开头添加如下代码: import java.util.*; (3)在功能1的基础上实现功能2:判断会员号是否合法。 if ( 会员号有效的条件) {

//输出录入的会员信息 } else { //输出信息录入失败 } 参考解决方案 实现功能1: import java.util.*; public class AddCust { public static void main( String[ ] args ) { /* 以下部分是信息输入*/ System.out.println("录入客户信息\n"); //录入客户信息Scanner input = new Scanner( System.in ); System.out.println("请输入会员号(4位数字):"); int custNo = input.nextInt( ); System.out.println("请输入会员生日(月/日<用两位数字表示>):"); String custBirth = input.next(); System.out.print("请输入积分:"); int custScore = input.nextInt(); /* 以下部分是信息输出*/ System.out.println("\n已录入的会员信息是:"); //显示录入的信息System.out.println(custNo+"\t"+custBirth+"\t"+custScore); } } 实现功能2: import java.util.*; public class AddCust { public static void main( String[ ] args ) { /* 以下部分是信息输入*/ System.out.println("录入客户信息\n"); //录入客户信息Scanner input = new Scanner( System.in ); System.out.println("请输入会员号(4位数字):"); int custNo = input.nextInt( ); System.out.println("请输入会员生日(月/日<用两位数字表示>):");

java运算符与表达式

一、运算符 1、算术运算符 = - * / %: 例子1:怎样判断两个数是否整除? public class Helloword { public static void main(String[] args) { int number1=11; int number2=5; if(number1%number2==0){ System.out.println(number1+"与"+number2+"整除!"); }else{ System.out.println(number1+"与"+number2+"不整除!"); } } } 比如:78 7 和8 public class Helloword { public static void main(String[] args) { int number=78; int a=number/10; int b=number%10; System.out.println("a="+a); System.out.println("b="+b); } } 推广:如果是三位数,四位数?…. ++ 例子3:int a=5; Int b=a++; A=? b=? public class Helloword { public static void main(String[] args) { int a = 5; int b = a++;//先赋值b=a,后自增a=a+1 int b2=++a;//先自增a=a+1,再赋值b=a System.out.println("a=" + a);//a=6

System.out.println("b=" + b);//b=5 System.out.println("b2=" + b2);//b=6 } } -- 2、关系运算符 < <= > >= = = != 关系运算的结果:True false 3、逻辑运算符 !: &&: ||: ~: public class Helloword { public static void main(String[] args) { if( (10>5) && (10/0==0?true:false) ){ System.out.println("ture"); }else{ System.out.println("false"); } } } 报错!因为:执行(10/0==0?true:false)。 public class Helloword { public static void main(String[] args) { if( (10<5) && (10/0==0?true:false) ){ System.out.println("ture"); }else{ System.out.println("false"); } } } 不报错,因为:没有执行:执行(10/0==0?true:false)。 比较两种情况: && :短路与,只要第一个条件是false,第二个条件不判断& : 与不管第一个条件是什么,第二个条件一样判断

java集合类总结

1.本讲内容:集合collection (数组和集合90%功能相似,但是最大的区别是,数组在初始化的时候必须确定大小,而集合不用,而且集合是一堆的类,使用起来非常方便。) 讲集合collection之前,我们先分清三个概念: 1colection 集合,可用来存储任何对象的一种数据结构(容器)。 2Collection 集合接口,指的是,是Set、List 和Queue 接口的超类接口 3Collections 集合工具类,指的是类。 SCJP考试要求了解的接口有:Collection , Set , SortedSet , List , Map , SortedMap , Queue , NavigableSet , NavigableMap, 还有一个Iterator 接口也是必须了解的。 SCJP考试要求了解的类有:HashMap , Hashtable ,TreeMap , LinkedHashMap , HashSet , LinkedHashSet ,TreeSet , ArrayList , Vector , LinkedList , PriorityQueuee , Collections , Arrays 下面给出一个集合之间的关系图: 上图中加粗线的ArrayList 和HashMap 是我们重点讲解的对象。下面这张图看起来层级结构更清晰些。 我们这里说的集合指的是小写的collection,集合有4种基本形式,其中前三种的父接口是Collection。 4List 关注事物的索引列表 5Set 关注事物的唯一性 6Queue 关注事物被处理时的顺序 7Map 关注事物的映射和键值的唯一性 一、Collection 接口 Collection接口是Set 、List 和Queue 接口的父接口,提供了多数集合常用的方法声明,包括add()、remove()、contains() 、size() 、iterator() 等。 add(E e) 将指定对象添加到集合中 remove(Object o) 将指定的对象从集合中移除,移除成功返回true,不成功返回false contains(Object o) 查看该集合中是否包含指定的对象,包含返回true,不包含返回flase size() 返回集合中存放的对象的个数。返回值为int clear() 移除该集合中的所有对象,清空该集合。 iterator() 返回一个包含所有对象的iterator对象,用来循环遍历 toArray() 返回一个包含所有对象的数组,类型是Object toArray(T[] t) 返回一个包含所有对象的指定类型的数组 我们在这里只举一个把集合转成数组的例子,因为Collection本身是个接口所以,我们用它的实现类ArrayList做这个例子:例子1: package edu.xjfu;

《Java范例开发大全》

下面是377个Java的例子。如果你是牛人,看看你能做出多少? 如果有人不相信这些例子都是Java做的,可以看看清华大学的《Java范例开发大全》实例1开发第一个Java程序 实例2自动提升 实例3自动转换 实例4常用基础类型之强制转换 实例5算术运算符 实例6关系运算符 实例7逻辑运算符 实例8位运算符 实例9移位运算符 实例10转型运算符 实例11常量与变量 实例12各种进制的转换 实例13 Java中的进制与移位运算符 实例14判断输入的年份是否为闰年 实例15抽奖活动 实例16xx乘法表 实例17如何列出素数 实例18 Java中的递归 实例19男生女生各多少人

实例20求xx数 实例21求任意一个正数的阶乘 实例22求n的n次方 实例23利用for循环输出几何图形 实例24xx 实例25求1到100之间的和 实例26存上100元需要多少天 实例27输出100之间的所有偶数 实例28如何判断回文数字 实例29输出100之间的所有奇数 实例30求最大的随机数 实例31判断字母分类 实例32优良及差 实例33打印任意一年日历 实例34一年四季的划分 实例35除0发生的算术异常(ArithmeticException) 实例36数组下标越界异常(ArrayIndexOutOfBoundsException)实例37数组元素类型不匹配异常(ArrayStoreException) 实例38强制类型转换异常(ClassCastException) 实例39索引越界异常(IndexOutOfBoundsException) 实例40空指针异常(NullPointerException)

java移位运算符详解

java移位运算符不外乎就这三种:<<(左移)、>>(带符 号右移)和>>>(无符号右移) 1、左移运算符 左移运算符<<使指定值的所有位都左移规定的次数。 1)它的通用格式如下所示: value << num num 指定要移位值value 移动的位数。 左移的规则只记住一点:丢弃最高位,0补最低位 如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模。如对int 型移动33位,实际上只移动了33%32=1位。 2)运算规则 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。 当左移的运算数是int 类型时,每移动1位它的第31位就要被移出并且丢弃; 当左移的运算数是long 类型时,每移动1位它的第63位就要被移出并且丢弃。 当左移的运算数是byte 和short类型时,将自动把这些类型扩大为 int 型。 3)数学意义 在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方 4)计算过程: 例如:3 <<2(3为int型) 1)把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011, 2)把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位, 3)在低位(右侧)的两个空位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 1100, 转换为十进制是12。 移动的位数超过了该类型的最大位数, 如果移进高阶位(31或63位),那么该值将变为负值。下面的程序说明了这一点: Java代码 // Left shifting as a quick way to multiply by 2. public class MultByTwo { public static void main(String args[]) { int i; int num = 0xFFFFFFE; for(i=0; i<4; i++) { num = num << 1;

Java中集合类用法总结

帮助 | 留言交? | 登录 首页我的图书馆主题阅读精彩目录精品文苑Tags 会员浏览好书推荐 以文找文 如何对文章标记,添加批注? Java 中集合?用法总结(转载) wade0564 收录于2010-07-08 阅读数:查看 收藏数:7 公众公开 原文来源 tags : java 集合类 欢迎浏览 wade0564 个人图书馆中收藏的文章,想收藏这篇好文章吗,赶快 吧,1分钟拥有自己的个人图书馆! 我也要收藏 举报 Java 中集合?用法总结 收藏 Collection ├List │├LinkedList │├ArrayList (异步,线程不安全,空间用完时自动增长原容量一半)│└Vector (同 步,线程安全,空间用完时自动增长原容量一倍)│ └Stack └Set ├HashSet └TreeSet Map ├Hashtable ├HashMap ├WeakHashMap └TreeMap Map 接口: | + -- WeakHashMap: 以弱键 实现的基于哈希表的 Map 。在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条 | 目。更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为 可终止的,被终 | 止,然后被回收。丢弃某个键时, 其条目从映射中有效地移除,因此,该类的行为与其他的 Map 实现有所不同。此实现 | 不是同步的。 | + -- TreeMap:该映射根据其键的自然顺序进行 排序,或?根据创建映射时提供的 Comparator 进行 排序,具体取决于使用的 | 构造方法。此实现不是同步的。 | + -- HashMap:基于哈希表的 Map 接?的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了 | 非同步和允许 使用 null 之外,HashMap 类与 Hashtable ?致相同。)此类不保证映射的顺序,特别是它不保证该顺 | 序恒久不变。此实现不是同步的。 | +-- SortedMap: 进一步提供关于键的总体排序 的 Map 。该映射是根据其键的自然顺序进 行排序的,或?根据通常在创建有 序映射时提供的 Comparator 进行排序。对有序映射的 collection 视图(由 entrySet 、keySet 和 values 方法返回 )进行迭代时,此顺序就会反映 出来。要采用此排序方式,还需要提供一些其他操作(此接?是 SortedSet 的对应映 射)。 Collection 接口: | 热点推荐 中国经典汤品——广东汤常用多音字汇总 如果你失恋。。。这些话...影响世界的100个管理定律汽车发动机?作过程和原理分析温家宝总理答中外记?问女人味,有多少男人可以读懂?珍稀的白头叶猴(组图)三鹿门事件之——中国,...国家公务员职务与级别当代古筝四美 付娜《渔...生活?秘方 真的很实用...哲理?品:守护梦想聚会时可以玩的?游戏依赖型人格障碍的表现和治疗经典妙语,十分精彩江边施救[贴图]李一男2003年在港湾...电脑速度慢的解决方法 ...重装系统后必须做的10件?事

Java中的集合类

Java中的集合类 (Collection framework)我们在前面学习过java数组,java数组的程度是固定的,在同一个数组中只能存放相同的类型数据。数组可以存放基本类型的数据,也可以存入对象引用的数据。 在创建数组时,必须明确指定数组的长度,数组一旦创建,其长度就不能改变,在许多应用的场合,一组数据的数目不是固定的,比如一个单位的员工数目是变化的,有老的员工跳槽,也有新的员工进来。 为了使程序方便地存储和操纵数目不固定的一组数据,JDK中提供了java集合类,所有java集合类都位于java.util包中,与java数组不同,java集合类不能存放基本数据类型数据,而只能存放对象的引用。 Java集合类分为三种 Set(集合):集合中对象不按特定的方式排序。并且没有重复对象,但它有些实现类中的对象按特定方式排序。--无序,不能重复 List(列表):集合中的对象按照检索位置排序,可以有重复对象,允许按照对象在集中的索引位置检索对象,List和数组有些相似。--有序,可以重复 Map(映射):集合中的每一个元素包含一对键对象和值对象,集合中没有重复的键对象,值对象可以重复,它的有些实现类能对集合中的键对象进行排序。 Java的主要集合类的框架图 Collection和Iterator接口 在Collection接口中声明了适用于java集合(只包括Set和List)通用方法。 Collection接口的方法 方法描述

boolean add(Object o) 向集合中加入一个对象的引用 void clear( ) 删除集合中所有对象,即不再对持有对象的引用boolean contains(Object o) 判断在集合中是否含有特定对象的引用 boolean isEmpty() 判断集合是否为空 Iterator iterator( ) 返回一个Iterator对象,可用它来遍历集合中的元素boolean remove(Object o) 从集合中删除一个对象的引用 int size( ) 返回集合中元素的数目 Object [ ] toArray() 返回一个数组,该数组包含集合中的所有元素 Set接口和List即可都继承了Collection接口,而Map接口没有继承Collection接口,因此可以对Set对象和List对象调用以上方法,但是不能对Map对象调用以上方法。Collection接口的iterator()和toArray()方法多用于获得集合中的所有元素,前者返回一个Iterator对象,后者返回一个包含集合中所有元素的数组。 Iterator隐藏底层集合的数据结构,向客户程序提供了遍历各种类型的集合的统一接口。Iterator接口中声明了如下方法: ●hasNext():判断集合中的元素是否遍历完毕,如果没有,就返回true。 ●next():返回下一个元素 ●remove():从集合中删除上一个由next()方法返回的元素。 注意:如果集合中的元素没有排序,Iterator遍历集合中元素的顺序是任意的,并不一定与像集合中加入的元素的顺序一致。 Set(集) Set是最简单的一种集合,集合中的对象不按特定方式排序,并没有重复对象。Set接口主要有两个实现类:HashSet类还有一个子类LinkedHashSet类,它不仅实现了哈希算法,而且实现了链表数据结构,链表数据结构能提高插入核算出元素的性能。TreeSet类实现了SortedSet接口中,具有排序功能。 List(列表) List的主要特征使其元素已先行方式存储,集合中允许存放重复对象。List接口主要的实现类包括: ●ArrayList—ArrayList代表长度可变的数组。允许对元素进行快速的随机访问,但是向 ArrayList中插入与删除元素的速度较慢。 ●LinkedList—在实现中采用链表数据结构。对顺序访问进行了优化,向List中插入和 删除元素的速度较快,随机访问速度则相对较慢,随机访问是指检索位于特定索引位置元素。 Map(映射) Map(映射)是一种吧键对和值对象进行映射的集合。它的每一个元素都包含一对键对象和值对象,而之对象仍可以是Map类型。以此类推,这样就形成了多级映射。向Map集合中加入元素时,必须提供一对键对象和值对象,从Map集合上检索元素只要给出键对象,就会返回值对象。 实例1 CollectionAll.java

java中常见的几种运算符

Java中常见的几种运算符 第一:算术运算符:{+、-、*、/、%取余或是取模、++与--递增和递减。} 需要注意的几个地方:在进行除法运行时当两个整数相除时结果为整数,若除以一个整数除不尽时,这是就会返回整数部分,小数部分则将省略,这时就要涉及到浮点型数据了!递增和递减应注意的是:++或—写在变量前面,则该式子的值等于变量变化以前的值。2)++或—写在变量后面,则该式子的值等于变量变化以后的值。 第二:关系运算符:{==等于若两个值相等,返回一个真值、!=不等于、<小于、>大于、<=小于等于、>=大于等于}主要用于根据某个变量的值来执行特定的操作,并且返回一个布尔值,一般形式为:做操作数关系运算符右操作数! 第三:位运算符:{“&”代表与运算符两个条件都成立才算成立;“︳”代表或运算符,满足其中一个即可成立,对应的二进制位有一个为1 则为1,否则为0;“?”代表异或运算符,对应的二进制位相同为零,不相同为1}

第四:逻辑运算符:{“&&”代表与逻辑运算符两个条件都成立算成立,“︳︳”代表或逻辑运算符,满足其中一个条件即可,他们的结果都是boolean类型的ture或false} 第五:移位运算符:{“<<”代表向左移多少位;“>>”代表向又移多少位;“>>>”又移补零} 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。 语法格式:需要移位的数字<<(>>)移位的次数 在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2 的1 次方,左移n 位就相当于乘以2 的n 次方;右移n 位相当于除以2 的n 次方。如:b<<8相当于b*16;b>>8相当于b/16. 第六:三元运算符{语法格式:(布尔表达式)?(真值):(假植)}如果布尔表达式的条件为真那么执行的条件位真值,否则反之。【a=a+5等于a+=5】 第七:运算符的优先级: 1 () [] . 从左到右 2 ! +(正) -(负) ~ ++ -- 从右向左 3 * / % 从左向右 4 +(加) -(减) 从左向右 5 << >> >>> 从左向右

JAVA语言中常用的运算符

JAVA中常用的运算符有以下几种 我们日常了解到的运算符有有+(加号)、-(减号)、*(乘号)、/(除号)和%(求余),那么在JAVA中有哪些我们不知晓的运算符呢,下面就介绍下JAVA中的运算符。 一、自增和自减运算符 自增、自减运算符是单目运算符,可以放在操作元之前,也可以放在操作元之后。操作元必须是一个整型或浮点型变量。放在操作元前面的自增、自减运算符,会先将变量的值加1(减1),然后再使该变量参与表达式的运算;放在操作元后面的自增、自减运算符,会先使变量参与表达式的运算,然后再将该变量加1(减1)。 二、算术运算符 ava中的算术运算符主要有+(加号)、-(减号)、*(乘号)、/(除号)和%(求余),它们都是二元运算符。 三、比较运算符 比较运算符属于二元运算符,用于程序中的变量和变量之间、变量和常量之间以及其他类型的信息之间的比较。比较运算符的运算结果是boolean型,当运算符对应的关系成立时,运算结果是true,否则结果是false。比较运算符通常用在条件语句中来作为判断的依据。 四、逻辑运算符 逻辑运算符包括&&(&)(逻辑与)、||(|)(逻辑或)和!(逻辑非),返回值为布尔类型的表达式,操作元也必须是boolean型数据。

和比较运算符相比,逻辑运算符可以表示更加复杂的条件,例如连接几个关系表达式进行判断。在逻辑运算符中,除了“!”是一元运算符之外,其余的都是二元运算符。 五、位运算符 位运算符用于处理整型和字符型的操作数,对其内存进行操作,数据在内存中以二进制的形式表示,例如int型变量7的二进制表示是00000000 00000000 00000000 00000111,-8的二进制表示是111111111 111111111 1111111 11111000,最高位是符号位,0表示正数,1表示负数。 六、运算符优先级 七、三元运算符 三元运算符是Java中唯一一个三目运算符,其操作元有三个,第一个是条件表达式,其余的是两个值,条件表达式成立时运算取第一个值,不成立时取第二个值,示例代码如下所示: boolean b = 20 < 45 ? true : false;

Java上机作业2_运算符和表达式分析

第三章运算符和表达式 一、大纲 1.理解表达式以及其相关概念 2.掌握算术赋值等运算符的使用 二、实验目标: 1.掌握表达式,优先级,结合性的概念。 2.掌握算数,赋值,增减量,逗号表达式的使用。 3.理解类型转换的含义和使用方法。 4.掌握输入输出运算符的使用。 5.能使用输入输出运算符结合变量和算术、赋值等运算符实现一个简单的现实功能。 三、实验方式: 要求学生自己独立完成 四、任务 4.1任务1:使用变量参与各种运算(时间:40分钟) 4.1.1.2(20分钟) 要求从键盘上接收三个整数a,b,c,分别求++a + b + c,a++ + b + c++,a + b++ + ++c 和++a + ++b + ++c的和,并将其输出。 a=1 b=2 c=3

4.1.2 任务目的 (1)理解变量在未被初始化的情况下其值随机。 (2)理解增量运算符的运算规则。 (3)理解优先级的概念。 4.1.3 任务要求 (1)先分析程序的执行结果,以及每一步语句执行后程序中各自变量的变化情况。 (2)如果分析有困难,可以先查看执行结果,再分析程序的执行情况。 4.1.4 难点提示 前++和后++的运算规则,以及优先级概念。 4.2任务2:变量与输入输出运算符的结合使用(时间:70分钟) 4.2.1 任务描述 4.2.1.1(15分钟) (1)分别定义三个int变量,从键盘上接收三个整数,然后对它们求和,输出求和结果。 (2)注意需要将求和的结果另外保存到一个变量中,然后再执行输出操作。 4.2.1.2(20分钟) 定义一个int类型的变量a,并从键盘接收一个整数,将其赋予a,定义一个float类型的变量b,并从键盘接收一个浮点数,将其赋予b,再定义一个float类型的变量c,计算a+b 的值,并将其赋予c。 4.2.1.3(15分钟) 编写一个程序,该程序要求输入一个float类型的数字并打印该数的立方值,并将其立方值赋给一个int类型的变量,打印该int类型的值。

Java集合体系结构分析与比较

Java集合体系结构分析与比较 1. Java集合框架图 Java平台提供了一个全新的集合框架.“集合框架”主要由一组用来操作对象的接口组成.不同接口描述一组不同数据类型. Java集合框架图如下: 集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础. 抽象类:5个抽象类(长虚线表示),对集合接口的部分实现.可扩展为自定义集合类. 实现类:8个实现类(实线表示),对接口的具体实现. 在很大程度上,一旦您理解了接口,您就理解了框架.虽然您总要创建接口特定的实现,但访问实际集合的方法应该限制在接口方法的使用上;因此,允许您更改基本的数据结构而不必改变其它代码. Java集合的顶层接口是Collection,Collection 接口是一组允许重复的对象.Java集合框架主要由以下三个接口组成: (1) Set 接口继承Collection,但不允许重复,使用自己内部的一个排列机制. (2) List 接口继承Collection,允许重复,以元素安插的次序来放置元素,不会重新排列.

(3) Map接口是一组成对的键-值对象,即所持有的是 key-value pairs.Map中不能有重复的key,拥有自己的内部排列机制. 容器中的元素类型都为Object,从容器取得元素时,必须把它转换成原来的类型.简化后的集合框架图如下: 2. 接口Collection 用于表示任何对象或元素组,想要尽可能以常规方式处理一组元素时,就使用这一接口. (1) 单元素添加、删除操作: boolean add(Object o):将对象添加给集合 boolean remove(Object o): 如果集合中有与o相匹配的对象,则删除对象o (2) 查询操作: int size():返回当前集合中元素的数量 boolean isEmpty():判断集合中是否有任何元素 boolean contains(Object o):查找集合中是否含有对象o Iterator iterator():返回一个迭代器,用来访问集合中的各个元素 (3) 组操作:作用于元素组或整个集合 boolean containsAll(Collection c): 查找集合中是否含有集合c 中所有元素 boolean addAll(Collection c) : 将集合c 中所有元素添

java集合-练习题解析

1. 填空 Collection 接口的特点是元素是___无序可重复______; List 接口的特点是元素__有__(有|无)顺序,_可以___(可以|不可以)重复; Set 接口的特点是元素__无___(有|无)顺序,____不可以__(可以|不可以)重复;Map 接口的特点是元素是__key、value映射______,其中__value__可以重复,_key___不可以重复。 2. (List)有如下代码 import java.util.*; public class TestList{ public static void main(String args[]){ List list = new ArrayList(); list.add(“Hello”); list.add(“World”); list.add(1, “Learn”); list.add(1, “Java”); printList(list); } public static void printList(List list){ //1 for(int i = 0; i< list.size();i++){ System.out.println(list.get(i)); } for(Object o : list) { System.out.println(o); } Iterator itor = list.iterator(); while(itor.hasNext()){ System.out.println(itor.next()); } } } 要求: 1) 把//1 处的代码补充完整,要求输出list 中所有元素的内容 2) 写出程序执行的结果Hello Java Learn World 3) 如果要把实现类由ArrayList 换为LinkedList,应该改哪里?ArrayList 和LinkedList 使用上有什么区别?实现上有什么区别? 4) 如果要把实现类由ArrayList 换为Vector,应该改哪里?ArrayList 和Vector 使 用上有什么区别?实现上有什么区别? 3. (List)写出下面程序的运行结果

java运算符基础入门

1 运算符 1:运算 对常量和变量进行操作的过程称为运算。 2:运算符 对常量和变量进行操作的符号称为运算符 3:操作数 参与运算的数据称为操作数 4:用运算符把常量或者变量连接起来符号java语法的式子就可以称为表达式。不同运算符连接的式子体现的是不同类型的表达式。 举例: int a = 3 + 4; 这是做了一个加法运算 +就是运算符,是算术运算符,我们还有其他很多的运算符 3,4就是参与运算的操作数据 3 + 4整体其实就是一个算数表达式

●+,-,*,/都是比较简单的操作,简单演示即可 ●+的几种作用: ?加法 ?正数 ?字符串连接符 ●除法的时候要注意一个问题: ?整数相除,只能得到整数 ?要想得到小数,可以*1.0 ●/和%的区别 ●++和--的应用 ?单独使用效果相同 ?参与运算使用,在操作数的前后效果不同●1:基本小题目 ●int a = 10; ●int b = 10; ●int c = 10; ● a = b++; ● c = --a; ● b = ++a; ● a = c--; ●请分别计算出a,b,c的值 ●2:比较复杂的题目 ●int a = 4; ●int b = (a++)+(++a)+(a*10); ●引出运算符的优先级

2 赋值运算符 ●符号: ?= , +=, -=, *=, /=, %= ?=为基本的赋值运算符,其他的为扩展的赋值运算符 ●如下操作写出结果 ?int a,b; a = b = 10; ?System.out.println(a); System.out.println(b); ?int a = 10; a += 20; System.out.println(a); ●面试题 ?short s=1, s = s+1; short s=1, s+=1; ?上面两个代码有没有问题,如果有,那里有问题 1:= 赋值号 2:+=加赋值 把左边和右边的结果赋值给左边。 注意:左边不能是常量 3:通过面试题引出+=运算符的特点: 有一个隐含的默认转换功能。 实际上等价于: short s = 1; s+=1等价于 s=(s的数据类型)(s+1 关系运算符

Java集合框架的知识总结

Java集合框架的知识总结 说明:先从整体介绍了Java集合框架包含的接口和类,然后总结了集合框架中的一些基本知识和关键点,并结合实例进行简单分析。 1、综述 所有集合类都位于java.util包下。集合中只能保存对象(保存对象的引用变量)。(数组既可以保存基本类型的数据也可以保存对象)。 当我们把一个对象放入集合中后,系统会把所有集合元素都当成Object类的实例进行处理。从JDK1.5以后,这种状态得到了改进:可以使用泛型来限制集合里元素的类型,并让集合记住所有集合元素的类型(参见具体泛型的内容)。 Java的集合类主要由两个接口派生而出:Collection和Map,Col lection和Map是Java集合框架的根接口,这两个接口又包含了一些接口或实现类。

Set和List接口是Collection接口派生的两个子接口,Queue是Java提供的队列实现,类似于List。 Map实现类用于保存具有映射关系的数据(key-value)。 Set、List和Map可以看做集合的三大类。 List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问。 Set集合是无序集合,集合中的元素不可以重复,访问集合中的元素只能根据元素本身来访问(也是不能集合里元素不允许重复的原因)。 Map集合中保存Key-value对形式的元素,访问时只能根据每项元素的k ey来访问其value。 对于Set、List和Map三种集合,最常用的实现类分别是HashSet、ArrayLi st和HashMap三个实现类。(并发控制的集合类,以后有空研究下)。2、Collection接口 Collection接口是List、Set和Queue接口的父接口,同时可以操作这三个接口。Collection接口定义操作集合元素的具体方法大家可以参考API文档,这里通过一个例子来说明Collection的添加元素、删除元素、返回集合中元素的个数以及清空集合元素的方法。 public class TestCollection {

Java类集合之List详解

Java集合框架之List详解 ArrayList 首先我们熟悉下ArrayList类中常用方法的使用。 1)添加:public boolean add(Object e):将指定的元素(对象)添加到此列表的尾部 2)获取:public Object get(int index):返回此列表中指定位置(索引)上的元素。 3)元素的个数:public int size():返回此列表中的元素数。 4)清空:public void clear():移除此列表中的所有元素。此调用返回后,列表将为空。 5)是否为空:public boolean isEmpty():如果此列表中没有元素,则返回 true 6)移除(删除):public E remove(int index):移除此列表中指定位置上的元素。向左移动所有后续元素(将其索引减 1)。 7)移除(重载):public boolean remove(Object o):移除此列表中首次出现的指定元素(如果存在)。如果列表不包含此元素,则列表不做改动。更确切地讲,移除满足 (o==null ? get(i)==null : o.equals(get(i))) 的最低索引的元素(如果存在此类元素)。如果列表中包含指定的元素,则返回 true (或者等同于这种情况:如果列表由于调用而发生更改,则返回 true)。8)获得索引:public int indexOf(Object o): 返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。更确切地讲,返回满足(o==null ? get(i)==null : o.equals(get(i))) 的最低索引 i ,如果不存在此类索引,则返回 -1。 如何使用这些方法,代码如下: import java.util.ArrayList; public class ArrayListTest { public static void main(String[] args) { ArrayList list=new ArrayList(); /* * 添加 */ list.add("hello"); list.add(" world"); list. add(" welcome"); /* * 获得 */ String s1=(String)list.get(0);

相关文档
最新文档