javac(编译)、java(运行)、javap(查看字节码)
a) 配置内容:
i. javac(编译):参数为 -d . $(FileName);初始目录
$(FileDir)
ii. java(运行):参数为 $(CurSel).$(FileNameNoExt);初始
目录:$(FileDir)
iii. javap(查看字节码):参数为 $(FileNameNoExt);初始目录
:$(FileDir)
二、 java初始:
a) 通过HelloWorld类讲解了关键字、命名规范、修饰符;
pubic class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World!");
}
}
b) jdk与jre的区别;内容、范围///开发、运行//里面包含了各
种类库和工具、java程序的运行环境JVM
jar;java下的压缩文件
javac;编译
javadoc;可形成帮助文档
共有:java;运行
native2ascii;本地码改成ASCII码
javap;查看字节码文件
c) 字节码;是java跨平台的一个机制,是一段二进制代码,是一
种包含执行程序、
由一序列 op 代码(操作码)/数据对组成的二进制文件。字节码是
一种中间码,它比机器码更抽象,是包含一个执行程序的二进制
文件(.class)
数据单位的进制;K是千 M是兆 G是吉咖 T是太拉 8bit(位)
=1Byte(字节)
1024Byte(字节)=1KB 1024KB=1MB 1024MB=1GB
1024GB=1TB
java中,字节码是CPU构架(JVM)的具有可移植性的机器语
言。
d) 四个目标;
1、java简介;历史和地位---跨平台纯面向对象的语言--第三
代语言:继承、封装、多态:方法同名,体不同
C++ --- 类函数
.NET---跨语言的平台
SQL--结构化查询语言--第四代语言
Lisp、Prolog人工智能语言---第五代语
implements、import、package、static
8. goto和const用来破坏程序入口,也是关键字
c) 常量与变量
i. 常量:(public static final 常量名;)
1. 定义:始终不变的值,可以是数值、字符、字符串
2. 规则:习惯上命名时要大写
ii. 变量:(type varName [=value];)
1. 注意:局部变量使用前必须先初始化不然编译失败!
iii. 调用格式:
1. 调用同文件中的其他类的变/常量格式为:对象.变量
2. 同类中调用其它函数的实例变/常量格式为:new 对象().变
量名
3. 同类中调用其它函数的类变/常量格式为: 类名.变量名
d) 数据类型
i. 基本数据类型:byte、short、int、long、char、float、
double、boolean
1. 默认值(范围是-2^(n-1)∽2^(n-1)-1)
a) Byte//1、short//2、int//4、long//8------默认值为0
b) char //2--------字符0-----范围是0~65535---unicode编码
c) float//4、double//8--------0.0
d) Boolean//2---------------false
ii. 引用数据类型:数组、类、接口
e) 自动转换(隐式转换)(由小转大)
i. 定义:自动类型转换,也称隐式类型转换,是指不需要书写代
码,由系统自动完成的类型转换
ii. 转换规则:byte?short(char)?int?long?float?double
iii. 示例代码:
1. int i = 4;
2. float n = i;
f) 强制转换(由大转小)
i. 转换规则:double→float→long→int→short(char)→byte
ii. 格式:(转换到的类型)需要转换的数值
iii. 示例代码:
1. double d = 3.10;
2. int n = (int)d;
iv. 注意:强制转换通常都会导致精度的损失
g) 转义字符
i. \b退格
ii. \n换行
iii. \r回车
iv. \’单引号
v. \”双引号
vi. \\反斜杠
h) 运算符------表达式
i. 定义:表达式是由数字、算符、数字分组符号(括号)、自由变
量和约束变量等以能求得数值的有意义排列方法所得的组合。约
束变量在表达式中已被指定数值,而自由变量则可以在表达式之
外另行指定数值
ii. 算术运算符:
1. 单目: ++(自加1)、--(自减1)、+(取正)、-(取负)
2. 双目: + 、- 、* 、/、 %
3. 三目: ?: 如:a>b?a:b
iii. 关系运算符:-------返回结果true/false
1. 等于符号:==
2. 不等于符号:!=
3. 大于符号:>
4. 小于符号:<
5. 大于等于符号:>=
6. 小于等于符号:<=
iv. 逻辑运算符:------返回结果true/false
1. 与(&&):假短路
2. 或(||):真短路
3. 非(!):
v. 位运算符:-----将原数转化为二进制计算
1. 与(&): 如 1100&1010=1000
2. 或(|): 如 1100|1010=1110
3. 非(!): 如 !1100=0011
4. 异或(^): 如 1100^1010=0110
5. << 带符号左移 ------相当于乘以2
6. >>带符号右移 -------相当于除以2
7. >>> 无号右移
8. 异或的规律:
a) a ^ a = 0
b) a ^ b = b ^ a
c) a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;
d) d = a ^ b ^ c 可以推出 a = d ^ b ^ c.
e) a ^ b ^ a = b
vi. 赋值运算符:
1. =、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=
vii. Intanceof:----归属
1. 定义:为双目运算符,左边操作元是一个对象,右边是一个类
。当左边的对象是右边类的对象时,返回true
2. 格式:result = object instanceof class 如:a = b
instaceof B;//true
viii. 优先级:(从高到低、从左到右)
1. () []
2. ! +(正) -(负) ~ ++ --
3. * / %
4. +(加) -(减)
5. << >> >>>
6. < <= > >= instanceof
7. == !=
8. &(按位与)
9. ^(位异或)
10. |(位非)
11. &&
12. ||
13. ?:
14. = += -= *= /= %= &= |= ^= ~= <<= >>=>>>=
四、 流程控制语句(分支、循环)
a) If…else: 例1.1:
i. If(a>b){
ii. System.out.println(a);
iii. }else if(b>c){
iv. System.out.println(b);
v. }else{
vi. System.out.println(b);
vii. }
b) 分支:(switch)
i. 格式:switch(条件语句){
case :
case :
…..
default :
}
ii. 例1.2:switch(month){
case 1:System.out.println(“spring”);break;
case 1:System.out.println(“spring”);break;
case 1:System.out.println(“spring”);break;
case 1:System.out.println(“spring”);break;
default: System.out.println(“spring”);break;//一定会执
行的语句
}
c) For循环
i. 格式:For(初始化语句;条件语句;控制语句){
循环体;
}
ii. 例1.3:for(int i=1;i<101;i++){
int sum = 0;
sum += i;
}
d) while
i. 格式:while(条件语句){
//初始化语句;
循环体;
//控制语句;
}
ii. 例1.4:int i=1;
while(i<101){
int sum=0;
sum += i;
}
e) Do….while()
i. 格式: do{
循环体;
}while(条件语句);
ii. 例1.5:int i =1;
do{
int sum = 0;
sum += i;
}while(i>101);
f) 增强型for循环----------主要用于打印数组元素
i. 格式:for(e:数组名){
循环体
}
ii. 例1.6:int[] a = new int[10];
for(e:a){
System.out.println(e);
}
五、 方法与递归
a) 方法---函数
i. 定义:一段用来完成特定功能的代码片段
ii. 声明格式:【修饰符】返回类型 方法名(形参列表){
方法体;
}
iii. 语法解释:
1. 形式参数:在方法被调用时用于接收外界输入的数据
2. 实参:调用方法时实际传给方法的数据
3. 返回值:方法在执行完毕后返回给调用它的环境的数据
4. 返回值类型:事先约定的返回值的数据类型,无返回值,必须
构造方法,且自动产生
// new DemoMethod().display();
new DemoMethod().visiable(12,"aaa",3.0f);
}
//静态方法的定义【有关键字static修饰的方法】
public static void show(String s){//自定义方法
System.out.println(s);
}
//实例方法的定义【没有关键字static修饰的方法】
public int display(){System.out.println("welcome to
jiangxi");return (85);//返回结果,可以用括弧,也可以不用}
//多个参数的实例方法
public void visiable(int x,String y,float f)
{System.out.println("=======================");}
}
b) 递归----------必须要有出口
i. 定义:递归用于让一个函数从其内部调用其自身
ii. 特点:
1. 程序代码简练,易于理解但浪费内存
2. 一定要有返回类型
3. 一定有if…….else……且if中有终止条件
六、 类(面向对象技术基础、类的声明与使用、对象的声明与使
用、构造方法)
a) 面向对象技术基础
i. 面向对象设计的方法论【OOA(分析)?OOD(设计)?OOP(编程
)?Test(测试)?部署】
ii. 面向对象(Object Oriented,OO)特点:
1. 对象唯一性:每个对象都有自身唯一的标识,通过这种标识,
类的实例的某一属性时的正确调用。
iii. 面向对象(OO)基本特征
1. 封装(package)
2. 继承(inheritance)------关联关系
a) 继承(泛化generalize)
i. 实现继承
ii. 可视继承
b) 组合(聚合)
i. 接口继承
3. 多态(Polymorphism)
a) 重写(override)
i. 方法
ii. 接口(interface)
b) 重载(overload)
i. 同名函数
b) 类的声明和使用
i. 声明格式:
【修饰符】class【类名】{
方法体;
}
ii. 例1:
public static class Demo{
System.out.println();
}
c) 对象的声明与使用
i. 格式:类名 对象的引用变量 = new 类名();
ii. 例2:Demo d = new Demo();
d) 类与对象的比较
i. 类就是对象的模板,对象是类的实例
e) 构造方法
i. 定义:定义在类中,用来初始化对象的成员变量的方法,返回
的是内存地址
ii. 格式:
1. 【修饰符】方法名(){}
2. 例3:public Demo(){}
iii. 要求:
1. 与类同名;2、没有返回值(无void 的修饰);必须要先创建
对象,在对象上进行调用(new)
七、 UML
a) UML定义:(Unified Modeling Language)统一建模语言,一
种用于面向对象的软件工程的分析与设计阶段的一种可视化建模
语言
b) UML关系(类与类之间的关系):关联对属性,依赖对方法
i. 关联关系:菱形指向整体 has a
1. 关联关系------若在逻辑上A是B的“一部分”(a part of)
,则不允许B从A派生,而是要用A和其它东西组合出B
2. 聚合(aggregation)---实线空心菱形
3. 组合---整体与部分不可分开,实线实心菱形
ii. 泛化(Generalization)关系(继承):用实线空心三角形
指向父类 is a
1. 若在逻辑上B是A的“一种”,并且A的所有功能和属性对B而言
都有意义,则允许B继承A的功能和属性
iii. 实现关系(接口):虚线
iv. 依赖(Dependency)关系: A”————>”B(A依赖于B)
use a 虚线箭头
c) 修饰符图形
i. + public - private # protected ~ 默认访问
d) 建模图形(9种):
i. 用例图(Use Case Diagram):展示系统外部的各类执行者与
系统提供的各种用例之间的关系
ii. 类图(Class Diagram):展示系统中类的静态结构(类是指
具有相同属性和行为的对象),类图用来描述系统中各种类之间
的静态结构
iii. 对象图(Object Diagram):是类图中的一种实例化图(是
对类图的实例化)
iv. 顺序图(时序图)序列图(Sequence Diagram):展示对象
之间的一种动态协作关系(一组对象组成,随时间推移对象之间
交换消息的过程,突出时间关系)
v. 协作图(合作图)(Collaboration Diagram):从另一个角
度展示对象之间的动态协作关系(对象间动态协作关系,突出信
息收发关系)
vi. 状态图(Statechart Diagram):描述一类对象具有的所有
可能的状态及其转移关系(展示对象所具有的所有可能的状态以
及特定事件发生时状态的转移情况)
vii. 活动图(Activity Diagram):展示系统中各种活动的执行
流程(各种活动的执行顺序、执行流程)
viii. 构件图(Component Diagram):展示程序代码的物理结构
(描述程序代码的组织结构,各种构件之间的依赖关系)
ix. 部署图(Deployment Diagram):展示软件在硬件环境中(
特别是在分布式及网络环境中)的配置关系(系统中硬件和软件
的物理配置情况和系统体系结构)
八、 自定义类
a) 类的定义:类是具有相同属性和相同操作的对象集合,类是对
方法
g) JavaBean规范:
i. 必须是公共类,并将其访问属性设置为public,如:public
class Stu{}
ii. 必须有一个空的构造方法(public、无参):必须有一个不
带参数的公共构造器
iii. 字段(实例变量)要私有化,首字母要小写,用private修
饰 如:private int id;
iv. 字段应该通过一组存取方法(getter和setter)来访问,一
般是用Eclipse、JBuilder、IDE等工具生成getter和setter方法
v. setter和getter规范:字段首字母小写------如:
1. public class Demo{
a) private String name;
b) public Demo(){}
c) public Demo(){
System.out.println(“不错”);
d) }
e) public void setName(String name){
this.name = name;
f) }
g) public String getName(){
return name;
h) }
}
九、 数组(一维数组、二维数组、排序、Arrays.sort)
a) 一维数组
i. 定义:数组就是相同类型元素的集合
ii. 数组变量是引用类型,栈stack(FILO,自动回收)引用堆
heap(new出来的,树形结构,JVM回收)中的数据;
iii. 格式:int[] a = new int[3];
int[] a = {1,2,4};
iv. 使用for循环遍历输出,获得数组长度length,访问元素
For…each: 增强型for循环
for(String i:a){//增强型for循环System.out.println(i);}
//冒泡排序
public class SortTest {
public void sort(int[] args){
System.out.println("排序前 ");
for(int m : args){System.out.print(args[m]+",");}
int time1 = 0,time2 = 0;
for(int i = 0 ; i < args.length-1 ; i++){for(int j = i+1
;2、重写Object的clone(),调用super.clone()
ii. 代码实现:如
public class Person implements Cloneable{
int as ;
protected Object clone() throws
CloneNotSupportedException{Person p = (Person)
super.clone();
}
}
public class PersonDemo{public static void main()throws
CloneNotSupportedException{Person p = new Person
();p.as=11;System.out.println(“Before
clone”+p.as);Person p1 = (Person)p1.clone
();p1.as=22;System.out.println(“After clone”+p.as);}}
十一、 包装类(Integer)
a) 常用方法:
i. Integer.MAX_VALUE();//获取int的最大值
ii. Integer.MIN_VALUE();//获取int的最小值
iii. toBinaryString()//转二进制
iv. toHexStrng()//转十六进制
十二、 抽象类
a) 抽象类的特点:
i. 抽象方法一定在抽象类中;
ii. 抽象方法和抽象类都必须被abstract关键字修饰;
iii. 抽象类不可以用new创建对象,因为调用抽象方法没意义;
iv. 抽象类中的方法要被使用,必须由子类复写起所有的抽象方
法后,建立子类对象调用;
v. 如果子类只覆盖了部分抽象方法,那么子类还是一个抽象类
b) 格式:【访问控制符】class 类名{
属性;
访问控制符 返回类型 方法名(形参列表){
//方法体;【return 返回值】
}
访问控制符 abstract 返回类型 方法名(形参列表);
}
例:package b;
public class AbstractDemo{
public static void main(String[] args){Chinese c = new
Chinese();}
}
abstract class Chinese{
public abstract void show();
}
abstract class D{
public void show(){System.out.println("213");}
}
十三、 接口(interface)--------不能实例对象,也就是不能
new接口
a) 定义:当抽象类中的方法都是抽象的,那么该类可以通过接口
的形式来表示
b) 格式:
1、 接口中常见定义:常量、抽象方法
2、 接口中的成员都有固定修饰符
常量:public static final
方法:public abstract
接口中的成员都是public的
c) 接口不可以建立对象,需要被子类实现时,子类对接口中的抽
(SubInter.NUM);System.out.println(Inter.NUM);}
}
interface Inter{
public static final int NUM = 3;public abstract void
show();
}
class SubInter implements Inter{//实现接口
public void show(){}
}
十四、 单例设计模式
a) 定义:是对同一种问题的固定解决方式,单例就是只创建一个
对象
b) 想要保证对象唯一:1、为了避免其他程序过多建立该类对象
,先控制其他程序建立该类对象;2、为了让其他程序可以访问,
在本类中自定义该对象;3、为方便访问,提供访问方式
c) 使用场景:仅需要创建一个对象时
d) 定义步骤:
1、private 的构造方法
2、private static 的实例对象
3、public static外界访问方法
i. 代码实现:
1. 第一种:饿汉式-----先初始化
private int a;
private A(){};
private static A a = new A();
public static get(){
Return a;
}
2. 第二种:懒汉式----调用时初始化—延时加载
private int a;
private A(){};
private static A a = new A();
public static get(){
if(a==null){a == new A();
}
return a;
}
e) 好处:
i. 控制资源的使用
ii. 控制实例的产生数量
iii. 让多个不相关的两个线程或进程之间实现通信
十五、 package
a) 定义:就是把字段和方法包裹起来,并用一定的修饰符加以修
饰从而达到对外信息隐藏,并暴露可以暴露的方法
b) Java.lang.*;--------基础包,默认导入
c) 要求:1、必须放在非注释的第一行;2、包名通常是域名的倒
("-------------3------------");}
}
十七、 多态(向上转型)
a) 多态的坏处
i. 向上转型后,会丢掉子类的新方法
ii. 向上转型是安全的,但向下转型却是不安全的
iii. 例:
package a;
//向上转型------------打印的类型看右边
//缺点:损失掉了子类新增的方法、属性
public class A extends Super{
public void f(Super s){System.out.println(s);}public
static void main(String[] args) {//Super a = new A
();//a.A@82764b-----打印出A型变量//System.out.println
(a);/*A a = new A();a.f(a);//a.A@82764b-------向上转型
*///Super[] s = new Super[](new A(),new Super
());//System.out.println(a.length);Super[] s = new Super
[]{new A(),new Super()};System.out.println
(s.length);Object o = new int[3];int[] b = (int[])
o;System.out.println(b.length);//编译出错,损失掉了子类新
增的方法、属性}
}
class Super{}
b) 后期绑定
i. 将一个方法调用同一个方法主体关联起来被称为绑定。若在程
序执行前绑定,叫前期绑定,java中除了static和final方法,其
他所有的方法都是后期
ii. Overload-----前期绑定--------静态绑定------编译阶段
Override-----后期绑定--------动态绑定------运行阶段
例:Super a = new subclass();//向上转型-------overload看
左边,override看右边
c) 实现多态的方式
i. 重写override:指子类重新定义父类的方法的做法
ii. 重载(overload):是指允许存在多个同名函数,而这些函
定----同变量的声明类型绑定
c) 设计原则:
1、开闭原则---对扩展开放,对修改封闭,实现关键在于抽象化
2、里氏代换原则---面向基类原则---任何基类可以出现的地方,
子类一定可以出现
十八、 String(声明,创建,初始化,操作(比较equals/==,
转换,查找,截取,分割,拆分,替换,连接))
a) 在java中使用的是unicode码;字符串的内存空间大小跟它的
属性有关,String创建初始化时在JVM中数据流动,
b) 声明创建初始化
i. 格式:String 变量名 = 初始值;
ii. String 变量名 = new String(初始值);
c) 操作:
i. 比较(equals与==)
1. equals比的是内容,==比的是地址,equalsIgnoreCase()---忽
略大小写
2. 例1:String d = “123”;
String d1 = new String(“123”);
System.out.println(d.equals(d1)); //true
System.out.println(d==d1);//false
ii. charAt(int index)------返回指定索引处的char值
iii. length()--------返回字符串的长度
iv. 转换
1. toString()------返回本身
2. toLowerCase()---将所有字符串转换为小写
3. toUpperCase()---将所有字符串转换为大写
v. 查找
1. indexOf(String key)------从前查找返回的第一个key的索引
2. indexOf(String key,int formindex)----返回从指定位置开
始查找到的第一个key的索引
3. lastIndexOf()---------从后查找返回最后一个key的索引
vi. 截取
1. substring(int bindex,int eindex)----截取源字符串
(begin,end)并返回一个新String
vii. 拆分
1. split(String regex)-----根据regex将源字符串进行分割成
若干个新字符串
viii. 替换
1. replace(char oldchar,char newchar);
ix. 连接
1. + 或concat连接---在源字符串尾部连接新字符串,返回新字
开辟新的空间存放String常量"ABC",
3) 引用str8指向堆中的新String对象
十九、 this
a) this是只指向当前对象的指针;
b) 使用:
i. 如果用在构造方法中,表示当前构造方法正在初始化的对象,
如:
1. Person p = new Person();
2. public Person(int id){
this.id = id;//相当于是p.id = id;
3. }
ii. 如果用在方法中,表示当前正在调用该方法的对象,如:
1. public show(int id){
this.id = id;//相当于是p.id = id;
2. }
------------p.show();
二十、 Static------数据共享
a) Static修饰符可以用于修饰类的成员变量和方法-----只在类
加载时加载一次
i. 修饰成员变量时,该变量成为类变量或静态变量,隶属于类,
类的所有对象共享同一个静态变量(生命周期长,类加载时确立
,保存在方法区中)
ii. 修饰方法时,该方法成为类方法或静态方法,可以直接用类
名.方法名()调用,也可以使用创建对象后通过对象引用名.方
法()调用
iii. 静态方法不能访问非静态方法:
1. 静态方法也称类方法,它在调用时直接使用类名.方法来调用
;非静态方法在调用时必须先创建对象,在对象上调用,格式为
:对象名.方法名();
2. 在静态方法被调用时可能没有实例对象,也就无法调用非静态
方法
二十一、 区别与联系:
a) break与continue与return
i. continue和break都可以结束本轮循环,但continue结束本轮
后继续下一轮循环,break则直接跳出循环
ii. break可以用在多重循环中用来跳出离它最近的循环,也可以
用在多分支语句swtich中用来跳出循环
iii. continue只能用在循环语句中,用于结束本轮循环,执行下
一次循环;
iv. continue与break之后的语句都不执行
v. return是终止方法并返回数据,在方法体内return后的语句都
不执行
b) 类变量(static)、实例变量、局部变量
i. 定义:类变量和实例变量定义在类中方法外,局部变量定义在
方法内、形参、代码块中
ii. 修饰符:类变量必须要用static修饰,实例变量不用static
修饰,类变量和实例变量可以不赋值,局部变量必须要先初始化
iii. 使用:类变量调用格式为:类名.变量名;实例变量调用时
必须要先创建实例对象,在该对象上调用(对象.变量名);局部
变量可以直接使用
iv. 加载:类变量(栈中)在类加载时加载,类结束时结束;实
例变量(堆中)在对象调用时加载,调用结束时结束;局部变量(
栈中)在方法开始调用时开始,方法结束时结束
c) this与super
i. 操作属性--------this.属性:表示调用本类中的属性,如果
本类中的属性不存在,则从父类开始查找;super.属性:表示调
用父类中的属性
ii. 操作方法--------this.方法():表示调用本类中的方法,
如果本类中的方法不存在,则从父类开始查找;super.方法()
:表示调用父类中的方法;
iii. 调用构造方法----this();调用本类中的其他构造方法,
super():表示调用父类的构造方法
iv. 查找范围---------this先从子类查找,如果没有从父类查找
,super不查子类直接查父类;
v. 特殊:this可以表示当前对象
d) String与StringBuffer、StringBuilder
i. String是不可变的对象,每次对String类型进行改变都相当于
产生了一个新的对象,StringBuffer是可变长度的字符序列,修
改后不会产生新对象
ii. StringBuffer的实质是它有容量这个属性,默认容量为16,
当初始化长度大于16时,其容量为初始化长度的2倍。
iii. String操作字符的方法有”+”、concat;StringBuffer操作
字符的方法有insert、append、delete(开始int,endint)
iv. 初始化格式:
1. String st = “234”; String s = new String();
2. StringBuffer sb = new StringBuffer();
v. StringBuffer与StringBuilder都是可变长度的字符序列,在
多线程中,前者是安全的,后者是不安全的
e) equals与==
i. 如果是基本类型比较,那么只能用==来比较,不能用equals;
ii. 对于基本类型的包装类型,比如Boolean、Character、Byte
、Short、Integer、Long、Float、Double等的引用变量,==是比
较地址的,而equals是比较内容的;
iii. 在String或重写equals方法的类中:equals是比内容,==是
比地址
iv. 在其他类中没有重写equals方法时,equals与==用法相同,
都是比地址
f) 重载与重写
i. 重载与重写都是类的多态表现形式,重载是一个类的多态表现
形式,重写是子类继承父类的多态表现形式,重载与重写都是针
对方法;
ii. 重载要求同名不同参数列表(类型、个数、顺序),与返回
类型无关,重写要求同名同参数列表(类型、个数、顺序),同
返回类型(协同----引用数据类型,是其子类或相同,基本数据
类型是相同),访问修饰符大于或等于父类,抛出异常要小于或
等于父类(当抛出的异常是RuntimeException时,则都可以编译通
过)
iii. 重载可以用在构造方法和普通方法中,重写只能用在普通方
法中
g) Integer与int
i. 类型:int是基本数据类型,Integer是引用数据类型;
ii. Integer是对int的包装,属于包装类;
iii. 默认值:int的默认值是0,Integer的默认值是null.
h) 类、抽象类、interface
1、抽象类需要有abstract修饰,类则不需要
2、抽象类中可以有普通方法和抽象方法,但普通类中只能有普通
5、代码分析:例1:----分类
public class Demo2 {
class B{//成员内部类------Demo2$B.class
}
static class A{//静态成员内部类------Demo2$A.class
}
void show(){
class C{//局部内部类-------Demo2$1C.class
}
}
public static void main(String[] args) {
class C{//局部内部类----Demo2$2C.class
}
System.out.println();
}
}
例2:-----匿名内部类
1、 匿名内部类其实就是内部类的简写格式
2、 定义前题必须继承一个类或实现一个接口
3、 匿名内部类的格式: new 父类或接口(){定义子类的内容}
4、 匿名内部类定义的方法最好不要超过三个
public class Test{
public static void main(String[] agrs){
Test t=new Test(); //new了 一个Test对象
t.te(new A(){ //调用实例方法
并且声明一个匿名内部类类作为一个参数传入
public void as(){
System.out.println("我
例3:
class A{
void as(){
System.out.println("我是内部类A");
}
}
class B{
void bs(){
System.out.println("我是内部类B");
}
}
public class MultipleExtends {
private class C extends A{}
private class D extends B{}
public static void main(String[] args) {
MultipleExtends m=new MultipleExtends(); //
声明一个外部类的对象
MultipleExtends.C c=m.new C(); //让外部类对
象持有一个
MultipleExtends.D d=m.new D();//内部类对象
的引用
c.as();
d.bs();
}
}
例4:-----内部类是可以被私有的
public class MemberClass {
private int i=10; //定义一个私有字段
private static int j=20;
public static void main(String[] args) {
MemberClass mc=new MemberClass();//new 一个外部类的对象
A a=mc.new A();//A a=new MemberClass().new A();//new 一个
例5:----静态内部类
public class StaticClass {
private static int i=10; //定义一个私有静态字段
//private int j=7;
public static void main(String[] args) {
StaticClass sc=new StaticClass();//new 一个
外部类的对象
A a=new StaticClass.A(); //new 一个静态内部
类
a.as(); //调用静态内部类的实例方
法
A.at //调用静态内部类的静态方法
}
static class A{
int i=5;
static at(){ //定义静态内部类的静态方法
System.out.println("这里是静态内部类
public class IteratorDemo {
public static void main(String[] args) {
Collection collection = new ArrayList();
collection.add("s1");
collection.add("s2");
collection.add("s3");
Iterator iterator = collection.iterator();//得到一个迭代
器
while (iterator.hasNext()) {//遍历
Object element = iterator.next();
System.out.println("iterator = " + element);
}
if(collection.isEmpty())
System.out.println("collection is Empty!");
else
System.out.println("collection is not Empty!
size="+collection.size());
Iterator iterator2 = collection.iterator();
while (iterator2.hasNext()) {//移除元素
Object element = iterator2.next();
System.out.println("remove: "+element);
iterator2.remove();
}
Iterator iterator3 = collection.iterator();
if (!iterator3.hasNext()) {//察看是否还有元素
System.out.println("还有元素");
}
if(collection.isEmpty())
System.out.println("collection is Empty!");
//使用collection.isEmpty()方法来判断
}
}
程序的运行结果为:
iterator = s1
iterator = s2
iterator = s3
collection is not Empty! size=3
remove: s1
remove: s2
remove: s3
还有元素
collection is Empty!
可以看到,Java的Collection的Iterator 能够用来,:
1)使用方法 iterator() 要求容器返回一个Iterator .第一次调
ListIterator 跌代器,开始位置为startIndex
List subList(int fromIndex, int toIndex) :返回一个子列表
List ,元素存放为从 fromIndex 到toIndex之前的一个元素。
处理 subList() 时,位于 fromIndex 的元素在子列表中,而位
于 toIndex 的元素则不是,提醒这一点很重要。
for-loop :
for (int i=fromIndex; i // process element at position i
}
对子列表的更改(如 add()、remove() 和 set() 调用)对底层
List 也有影响。
我们看一个List的例子:
import java.util.*;
public class ListIteratorTest {
public static void main(String[] args) {
List list = new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
System.out.println("下标0开始:"+list.listIterator