java中三大修饰符
一、static
1、属性:类变量 定义在类以内,方法以外,全类有效,全类公共一个属性
类变量与创建对象无关,有默认值0
使用方式 类名.类变量 System.out.println();
作用:计数器 生成id
class User{
static int count;
public User(){
count++;
}
}
Class Account{
long id;
static long num = 10000L;
public Account(){
id = num++;
}
}
public class TestStatic{
public static void main(String[] args){
new User();
new User();
new User();
System.out.println(User.cout);
Account a1 = new Account();
Account a2 = new Account();
System.out.println(a1.id);
System.out.pringln(a2.id);
}
}
/*
new Account(); 调用构造方法 给id属性赋值 id 10000L num++ 10001L
new Account(); id 10001L num++ 10002L
id 10002L num++
*/
2、方法:静态方法
加了static的普通方法,工具方法,全类共用一个功能
自己定义静态方法的可能性不大,一般都是使用jdk中写好的静态方法
使用方式:类名.静态方法名称() Math.sqrt();
注意:
1》覆盖 方法名,返回值,参数表一样。修饰符和父类一样或者比父类的更宽泛
2》静态方法只能被静态方法覆盖,并且没有多态,
引用类型是什么类型,调用的就是什么类型的方法
3、初始化代码块
静态初始化代码库
作用:给静态属性赋值
类加载时被执行一次,只有一次
类加载:在虚拟机第一次使用一个类的时候,需要类的相关信息加载到内存中并保存起来的过程
类加载时,初始化静态属性,执行静态初始化代码块
类加载时机:
new对象进行类加载,访问静态成员,子类对象类加载触发父类对象先类加载
二、final 最终的,最后的
变量: 常量 不能修改变量中存储的值 (基本类型值不能变,引用类型地址不能变)
final修饰实例变量和类变量时没有默认值,需要手动赋值
实例变量 构造方法赋值或者初始值
类变量 初始值或者静态初始化代码块里赋值
public static final 好伙伴
方法: 不能被覆盖(可继承,可调用,可重载)
类: 不能被继承
三、abstract 抽象的(约束多态语法的正确使用)
类 不能new对象
方法 没有实现部分 只有声明部分
注意:有抽象方法的类一定是抽象类
子类继承抽象类,要么选择把所有的抽象方法都实现,
如果没有实现相应的抽象方法,要求该类也必须是抽象类
接口
语法:
特殊的抽象类,为多态服务,只能声明引用,不能new对象
关键字 interface
实现接口(继承抽象类一样) implements
所有属性 public static final(默认)
所有方法 public abstract(默认)
没有构造方法
作用:
支持多继承
接口和接口直接多继承 extends
类和接口直接多继承 implements
注意:一个类只能继承一个父类,可以实现多个接口(降耦合工具)
标准:(多态)
接口回调:在定义了接口之后,现有的接口使用者,然后在定义接口的实现者
====================================================
===============接口和抽象类的区别============================================================
- 抽象类和接口的相同点
①.在java语言中,接口和抽象类都不能被实例化,都位于继承树的顶端,用于被其他类实现和继承。
②.接口和抽象类都可以包含抽象方法。
③.实现接口或继承抽象类的普通子类都必须实现这些抽象方法。
- 抽象类和接口的不同点
1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;
2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。
5)接口里不能定义静态方法;抽象类里可以定义静态方法。
6)接口里不包含构造器,抽象类可以包含构造器。抽象类里的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作。接口里不能定义任何构
造方法,系统也不会提供默认构造方法。
7)接口里不能包含初始化块,但抽象类可以包含初始化块。
- 应用(适配器模式)
目的:
将一个类的接口转换成客户希望的另外一个接口。A d a p t e r 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
原理:
目标接口(Target):客户所期待的接口。
需要适配的类(Adaptee):需要适配的类或适配者类。
适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。

实例:
如果一个普通类要实现一个接口,则要覆盖此接口中的所有抽象方法。如果一个接口中定义的方法过多,但是在子类中又用不到这么多的抽象方法 ,则肯定很麻烦,所以此时需
要一个中间的过度,但是过度类又不希望被直接使用,所以将此过度类定义成抽象类最合适(适配器),并在此抽象类中实现接口中的所有方法,方法体为空,则以后的子类直接继承
此 抽象类,就可以根据需要选择性的覆盖父类的方法。
java中三大修饰符的更多相关文章
- Java中的 修饰符
java中的修饰符分为类修饰符,字段修饰符,方法修饰符. 根据功能的不同,主要分为以下几种. 1.权限访问修饰符 访问权限的控制常被称为具体实现的隐藏 把数据和方法包进类中,以及具体实现的隐藏,常共 ...
- Java中final修饰符深入研究
一.开篇 本博客来自:http://www.cnblogs.com/yuananyun/ final修饰符是Java中比较简单常用的修饰符,同时也是一个被"误解"较多的修饰符.对很 ...
- Java中各种修饰符与访问修饰符
Java中各种修饰符与访问修饰符 类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 名称 说明 备 ...
- Java中访问修饰符public、private、protecte、default
Java中访问修饰符public.private.protecte.default的意义讲解:public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”.被其修饰的类.属性以及方法不 仅 ...
- java中的修饰符和基本数据类型
1.java中的修饰符 java中的修饰符主要是用来对类资源进行一个权限控制,上面表格表现的很清晰,无需多言. 2.java中的基本数据类型 java中的数据类型分为引用类型和基本类型.基本数据类型有 ...
- 对于Java中权限修饰符的理解
老是把Java中权限修饰符给忘记,写一个博客加深印象吧 权限分为四个作用域:当前类,同一个包,其他包的子类,其他包的类. 首先要知道包的概念,Java中一个包是指一个package下的所有文件. pr ...
- Java中常用修饰符使用汇总
修饰符汇总: 一:public protected default private 修饰类,修饰方法,修饰属性,修饰代码块. 类: 顶级类只能用public 修饰,顶级类不能使用private 和p ...
- Java中的修饰符
-----------------------------------------------01----------------------------------------------- 类,方 ...
- java中权限修饰符protected的使用注意事项
java中四种权限修饰符, 平时编码中最常用的其实public和private, 虽然对protected的概念一直都知道, 但真正使用时才发现有些偏差. protected表示被其修饰的成员可以被本 ...
随机推荐
- IOS GCD图片数据异步下载,下载完成后合成显示
关于GCD使用详解,请看我的上一篇blog:http://www.cnblogs.com/xin-lang/p/6278606.html 前段时间遇到个需要异步下载,下载完成后再组合显示的东西.这里我 ...
- Attribute value is quoted with " which must be escaped when used within the value 问题解决
访问JSP时,报错:Attribute value is quoted with " which must be escaped when used within the value .相信 ...
- [coding horror] 1 - sum 2
sum 2 描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 对应每个测试案例,输出两个数,小的先输出. codi ...
- 升级ruby
1.安装 RVM RVM:Ruby Version Manager,Ruby版本管理器,包括Ruby的版本管理和Gem库管理(gemset) $ curl -L get.rvm.io | bash - ...
- 将JSON对象转化为数组对象
package web.helper; import java.util.ArrayList; import net.sf.json.JSONArray; import web.model.Abstr ...
- AndroidStudio0.5.2 BUG 导致 menu 菜单键崩溃
郁闷了半天,今天发现一点击手机 menu 键应用就崩溃了,记得之前都是好好的,调试了半天代码还是搞不定,于是网上google了一番,发现仅国外有一两篇文章有提到类似问题,据说是 0.5.2 版本的 B ...
- Two Pointers - leetcode [两指针问题]
125. Valid Palindrome consider only alphanumeric characters and ignore cases. transform(s.begin(), s ...
- Oracle 中的Top写法
由于Oracle不支持select top 语句,所以在Oracle中经常是用order by 跟rownum的组合来实现select top n的查询.简单地说,实现方法如下所示:select 列名 ...
- DUIlib使用Fastreport--报表简单使用
fastreport是一个简单优秀的报表,fastreport更多是和delphi联合使用预览和打印数据的.我在开始使用duilib做项目时,打印和数据预览都是自己绘制的,这样不仅绘制麻烦费事费事,而 ...
- wall time
"showing elapsed time and wall clock time correspondingly." what's difference between elap ...