java从入门到精通学习笔记(二)——类与接口
来源:互联网 发布:上海淘宝公司招人 编辑:程序博客网 时间:2024/06/02 01:47
10、类与对象
(1)静态成员:静态常量、静态变量、静态方法
静态成员是属于类所有的,区别于个别对象。访问方式:类名.静态类成员
静态成员是为了提供两个类可以在同一个内存区域共享数据,因此静态常量和静态变量并没有存储在为每个类分配的内存空间。
静态方法中不可以使用this关键字,不可以直接调用非静态方法,只能访问静态成员。
方法体中的局部变量是不能声明为static的。
(2)修饰符:private、protected、public
如果一个类没有声明自己的修饰符,则默认这个类的变量和方法只被该包中的类访问。
(3)this关键字
this可以用于调用对象的成员变量或成员方法,还可以作为方法的返回值。
实际上,this引用就是对一个对象的引用。
(4)对象
每个对象是相互独立的,在内存中占据独立的内存空间(静态成员除外)。每个对象有自己的生命周期,生命周期结束时,对象变成了垃圾,由java虚拟机的垃圾回收机制自动回收。
对象的比较:equals()比较的是两个对象所指的内容是否相同
== 比较的是两个对象引用的地址是否相等。
对象的销毁机制:java虚拟机的垃圾回收器只能回收由new创建的对象。
一、java中类与接口的访问权限
1. 类和接口的访问权限种类相同
default:只能在本包内访问
publish:任何地方都可以访问,不同包的访问要先import。
2. 类中成员或方法的访问权限
当前类 同包内 子孙类 不同包
public √ √√ √
protected √ √ √
default √ √
private √
3. 抽象类和接口中成员和方法的访问权限
因为抽象类就是让子类去继承自己,所以不可能设置为private权限,因此只有public、protected、default。
接口中所有成员的属性都为public static final,即接口中声明的变量都是常量,不能被继承。
接口中所有方法都为public属性,所以实现接口中的方法也必须为public,否则出错。
二、接口
1. 接口的定义: //接口文件的文件名必须和接口名相同
[public] interface 接口名 [extends 父接口列表]{
[public] [static] [final] 变量;
[public] [abstract] 方法; ///方法只有定义没有实现
}
接口是不能被实例化的,接口压根就没有构造函数。
2. 接口的实现:
[public/abstract/final] class 类名 [extends 父类名] [implements 接口列表]{
}
(1) 在类中实现接口时,方法名、返回值类型及参数必须和接口一样,并且必须实现接口中的所有方法。
(2) 在类的继承中,只能是单继承,所以extends 后面最多只有一个父类名;
但一次可以实现多个接口,implements后面接多个接口时用逗号隔开。
不同接口间出现变量名冲突时,用接口名.变量名的方法访问;出现方法冲突时,只实现一个方法即可。
三、类
1. 继承
(1) 实现
[public/abstract/final] class 类名 extends 父类名{
}
(2) 继承中的重写
(3) 使用super:在子类中访问被隐藏的父类成员变量或成员方法。
在子类中调用父类的构造函数:super([参数列表])
在子类中调用隐藏的父类方法:super.方法名([参数列表])
在子类中访问隐藏的父类成员变量:super.变量名
2. 多态
类的多态体现在方法的重载和重写。
在进行方法的重载时,方法的返回值不能作为区分方法的标志。
3. 抽象类
(1) 实现
abstract class 类名{
} ///抽象类有构造函数,但是无法通过new来创建一个抽象类的对象。但是可以通过将一个抽象类的引用指向子类来实现一个父类对象的创建。
(2) 抽象方法
public abstract 返回值类型 方法名(参数列表); ///抽象方法不能使用private或static修饰
含有抽象方法的类必须被声明为抽象类。
4. 内部类
(1) 成员内部类
在内部类中可以随意使用外部类的成员变量和方法(包括private修饰的)。
内部类的成员只有在内部类的范围是可知的,不能被外部类使用。
如果外部类中定义的成员变量和内部类成员变量名称相同,可是使用this区别访问。[this.变量名]访问内部类的变量;[外部类名.this.变量名]访问外部类变量。
(2) 局部内部类:指在类的成员方法中定义的内部类,作用范围也是这个方法内。
局部内部类是所在方法的一部分,并非外部类的一部分,因此在该方法外不能访问该内部类。
该内部类可以访问当前代码块的常量以及外部类的所有成员。
(3) 匿名内部类
return new A(){ //A表示的是一个对象名
/// 该类的实现代码全部需要在大括号之间编写
// 由于匿名内部类没有类名,所以匿名内部类的构造函数是使用的默认构造函数
}; //注意最后要加分号
(4) 静态内部类:即在内部类前加static修饰符
一个静态内部类中可以声明静态成员,但是一个非静态内部类中不能声明静态成员。
静态内部类不能访问外部类的非静态成员。
5. Java反射机制:java.lang.reflect包
可以通过该包中的函数查看某个类的信息,包括其构造函数、成员变量、成员方法等。
四、Java集合类 (java.util包)
1. List 接口
list列表是以线性的方式存储对象的,所以可以通过对象的索引来操作对象。
list列表中允许有重复的元素存在。
(1) 常用方法:
add(int index,Object obj)
addAll(int index,Collection coll)
remove(int index)
get(int index)
indexOf(Object obj)
lastIndexOf(Object obj)
subList(int fromIndex,int toIndex)
set(int index,E element)
listIterator()
(2) 实现类:
ArrayList类:List list=new ArrayList (); ///ArrayList索引查找效率高,删、增效率低
LinkedList类:List list=new LinkedList (); ///LinkedList查找效率低,删、增效率高
2. Set接口
set集合中不允许有重复的元素存在,且元素是无序的。
(1) 常用方法:
add(Object obj)
addAll(Collection coll) ///全add进去之后会自动有去重操作
remove(Object obj)
retainAll(Collection c)
removeAll(Collectino c)
clear()
iterator()
size()
isEmpty()
(2) 实现类:
HashSet: Set collSet=new HashSet (); ////集合内元素无顺序,允许有null值
TreeSet: Set collSet=new TreeSet (); ///集合内元素是自动排好序的,不允许有null值
3. Map接口
一个映射内不能包括重复的键,每个键最多映射到一个值。
(1) 常用方法:
put(Key k,Value v)
putAll(Map map)
get(Object key)
containkey(Object key)
containValue(Object Value)
keySet()
values()
size()
isEmpty()
clear()
(2) 实现类:
HashMap: Map map=new HashMap (); ///查找、删、增效率高,但每对映射无顺序,允许null值和null键
TreeMap: Map map=new TreeMap (); ///查找、删、增效率低,但每对映射可保持插入时的顺序,不允许null键
4. 迭代器
iterator.hasNext();
iterator.next(); ///迭代器会自动向后移一个元素
iterator.remove();
List接口中的listIterator迭代器特有:
iterator.hasPrevious();
iterator.previous();
iterator.add(Object obj);
iterator.set(Object obj);
(1)静态成员:静态常量、静态变量、静态方法
静态成员是属于类所有的,区别于个别对象。访问方式:类名.静态类成员
静态成员是为了提供两个类可以在同一个内存区域共享数据,因此静态常量和静态变量并没有存储在为每个类分配的内存空间。
静态方法中不可以使用this关键字,不可以直接调用非静态方法,只能访问静态成员。
方法体中的局部变量是不能声明为static的。
(2)修饰符:private、protected、public
如果一个类没有声明自己的修饰符,则默认这个类的变量和方法只被该包中的类访问。
(3)this关键字
this可以用于调用对象的成员变量或成员方法,还可以作为方法的返回值。
实际上,this引用就是对一个对象的引用。
(4)对象
每个对象是相互独立的,在内存中占据独立的内存空间(静态成员除外)。每个对象有自己的生命周期,生命周期结束时,对象变成了垃圾,由java虚拟机的垃圾回收机制自动回收。
对象的比较:equals()比较的是两个对象所指的内容是否相同
== 比较的是两个对象引用的地址是否相等。
对象的销毁机制:java虚拟机的垃圾回收器只能回收由new创建的对象。
一、java中类与接口的访问权限
1. 类和接口的访问权限种类相同
default:只能在本包内访问
publish:任何地方都可以访问,不同包的访问要先import。
2. 类中成员或方法的访问权限
当前类 同包内 子孙类 不同包
public √ √√ √
protected √ √ √
default √ √
private √
3. 抽象类和接口中成员和方法的访问权限
因为抽象类就是让子类去继承自己,所以不可能设置为private权限,因此只有public、protected、default。
接口中所有成员的属性都为public static final,即接口中声明的变量都是常量,不能被继承。
接口中所有方法都为public属性,所以实现接口中的方法也必须为public,否则出错。
二、接口
1. 接口的定义: //接口文件的文件名必须和接口名相同
[public] interface 接口名 [extends 父接口列表]{
[public] [static] [final] 变量;
[public] [abstract] 方法; ///方法只有定义没有实现
}
接口是不能被实例化的,接口压根就没有构造函数。
2. 接口的实现:
[public/abstract/final] class 类名 [extends 父类名] [implements 接口列表]{
}
(1) 在类中实现接口时,方法名、返回值类型及参数必须和接口一样,并且必须实现接口中的所有方法。
(2) 在类的继承中,只能是单继承,所以extends 后面最多只有一个父类名;
但一次可以实现多个接口,implements后面接多个接口时用逗号隔开。
不同接口间出现变量名冲突时,用接口名.变量名的方法访问;出现方法冲突时,只实现一个方法即可。
三、类
1. 继承
(1) 实现
[public/abstract/final] class 类名 extends 父类名{
}
(2) 继承中的重写
(3) 使用super:在子类中访问被隐藏的父类成员变量或成员方法。
在子类中调用父类的构造函数:super([参数列表])
在子类中调用隐藏的父类方法:super.方法名([参数列表])
在子类中访问隐藏的父类成员变量:super.变量名
2. 多态
类的多态体现在方法的重载和重写。
在进行方法的重载时,方法的返回值不能作为区分方法的标志。
3. 抽象类
(1) 实现
abstract class 类名{
} ///抽象类有构造函数,但是无法通过new来创建一个抽象类的对象。但是可以通过将一个抽象类的引用指向子类来实现一个父类对象的创建。
(2) 抽象方法
public abstract 返回值类型 方法名(参数列表); ///抽象方法不能使用private或static修饰
含有抽象方法的类必须被声明为抽象类。
4. 内部类
(1) 成员内部类
在内部类中可以随意使用外部类的成员变量和方法(包括private修饰的)。
内部类的成员只有在内部类的范围是可知的,不能被外部类使用。
如果外部类中定义的成员变量和内部类成员变量名称相同,可是使用this区别访问。[this.变量名]访问内部类的变量;[外部类名.this.变量名]访问外部类变量。
(2) 局部内部类:指在类的成员方法中定义的内部类,作用范围也是这个方法内。
局部内部类是所在方法的一部分,并非外部类的一部分,因此在该方法外不能访问该内部类。
该内部类可以访问当前代码块的常量以及外部类的所有成员。
(3) 匿名内部类
return new A(){ //A表示的是一个对象名
/// 该类的实现代码全部需要在大括号之间编写
// 由于匿名内部类没有类名,所以匿名内部类的构造函数是使用的默认构造函数
}; //注意最后要加分号
(4) 静态内部类:即在内部类前加static修饰符
一个静态内部类中可以声明静态成员,但是一个非静态内部类中不能声明静态成员。
静态内部类不能访问外部类的非静态成员。
5. Java反射机制:java.lang.reflect包
可以通过该包中的函数查看某个类的信息,包括其构造函数、成员变量、成员方法等。
四、Java集合类 (java.util包)
1. List 接口
list列表是以线性的方式存储对象的,所以可以通过对象的索引来操作对象。
list列表中允许有重复的元素存在。
(1) 常用方法:
add(int index,Object obj)
addAll(int index,Collection coll)
remove(int index)
get(int index)
indexOf(Object obj)
lastIndexOf(Object obj)
subList(int fromIndex,int toIndex)
set(int index,E element)
listIterator()
(2) 实现类:
ArrayList类:List list=new ArrayList (); ///ArrayList索引查找效率高,删、增效率低
LinkedList类:List list=new LinkedList (); ///LinkedList查找效率低,删、增效率高
2. Set接口
set集合中不允许有重复的元素存在,且元素是无序的。
(1) 常用方法:
add(Object obj)
addAll(Collection coll) ///全add进去之后会自动有去重操作
remove(Object obj)
retainAll(Collection c)
removeAll(Collectino c)
clear()
iterator()
size()
isEmpty()
(2) 实现类:
HashSet: Set collSet=new HashSet (); ////集合内元素无顺序,允许有null值
TreeSet: Set collSet=new TreeSet (); ///集合内元素是自动排好序的,不允许有null值
3. Map接口
一个映射内不能包括重复的键,每个键最多映射到一个值。
(1) 常用方法:
put(Key k,Value v)
putAll(Map map)
get(Object key)
containkey(Object key)
containValue(Object Value)
keySet()
values()
size()
isEmpty()
clear()
(2) 实现类:
HashMap: Map map=new HashMap (); ///查找、删、增效率高,但每对映射无顺序,允许null值和null键
TreeMap: Map map=new TreeMap (); ///查找、删、增效率低,但每对映射可保持插入时的顺序,不允许null键
4. 迭代器
iterator.hasNext();
iterator.next(); ///迭代器会自动向后移一个元素
iterator.remove();
List接口中的listIterator迭代器特有:
iterator.hasPrevious();
iterator.previous();
iterator.add(Object obj);
iterator.set(Object obj);
阅读全文
0 1
- java从入门到精通学习笔记(二)——类与接口
- Java从入门到精通学习笔记---第八章 接口、继承与多态
- 《Java从入门到精通》第一、二章学习笔记
- Java学习从入门到精通(二)
- 《Java从入门到精通》学习笔记
- 《C#入门到精通》学习笔记 -- 抽象类 与 接口
- java从入门到精通学习笔记(一)——基础篇
- java从入门到精通学习笔记(三)——IO
- java从入门到精通学习笔记(四)——多线程
- java从入门到精通学习笔记(五)——数据库
- java从入门到精通学习笔记(六)——网络编程
- java从入门到精通学习笔记(七)——异常处理
- Java学习从入门到精通 ()
- 《PHP从入门到精通》学习笔记二
- java从入门到精通——第三章学习笔记
- java学习笔记《java从入门到精通》
- 孙鑫视频教程《Java从入门到精通》学习笔记
- 《JAVA从入门到精通》学习笔记1-9章
- C/C++面试软件开发工程师遇到的一道关于循环的笔记题
- linux下面安装redis,我只是留个印象,免得下次又忘了
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student"
- Ubuntu 14.04 Gerrit 数据库迁移: H2 迁移为 Mysql(包括 changes/group/account/permissions):
- 用例图中三种关系
- java从入门到精通学习笔记(二)——类与接口
- 14.8.2.2 InnoDB索引的物理结构
- tweepy 爬去twitter数据
- Spring学习笔记之二: Spring MVC
- leetcode-7:Reverse Integer
- 结构型模式之组合模式
- 动态sql
- Oracle EBS Interface/API(8)-标准展BOM存储过程
- UnityShader实例06:UV动画