java笔记之static&final&abstract
知识需要不断回顾和重新认识
一:static
static类型变量初始值只能被赋值一次,它的整个生命周期是源程序,程序结束前变量都不会被释放。
例如:
for(int i = 0; i<10; i++)
{
static int a = 0;
a++;
}
循环结束之后a=10.
静态局部变量和静态全局变量,注意作用范围。静态变量存在于内存中,不用实例化对象就可以使用它(静态局部变量走出函数,虽然它还是存在,但是不能使用)
因为static不依赖于实例化对象,它是属于整个类的,即所有对象共享一个静态变量,而如果在某个方法中定义了一个静态变量,它的实际意义不大,因为,这个静态变量只会在实例化了这个对象之后使用,已经变为了归某个对象所有,没有存在的意义。
当然,如果在static前边加上访问权限修饰符,会根据权限决定不同类是否能使用这个static变量。
基本类型的静态局部变量如果声明时没有覆初始值,系统自动赋予0.(使用的时候注意合理使用静态局部变量和全局变量,虽然静态局部变量的作用范围有限,但是可以通过再次调用这个定义它的函数使用这个局部变量,全局变量有时会造成意外的副作用)
so在程序中什么地方可以利用静态字段和静态构造方法?1:对象之间共享值;2:方便访问变量,比如不会经常变化而又频繁使用的数据,例如连接字符串,配置信息等,这样只用进行一次读取,以后就可以方便的使用了,同时也节约了托管资源,因为对一个类无论创建了多少个实例,它的静态字段永远都只有一个副本。而实例变量,每创建一个实例,jvm就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(实例对象.变量)。
static代码块仅在类加载的时候执行一次,所以如果需要通过计算初始化static变量,可以在静态代码块里边做。
static方法通过类名调用,所以,非静态函数可以直接使用静态变量,而static函数不能调用非static的变量,只能调用static类型的变量和函数,并且不能使用this或者super关键字,因为它属于整个类。static方法独立于任何实例,所以它必须被实现,不能是抽象的abstract。
二:final
无法改变的,可以修饰非抽象类、非抽象类成员方法和变量。
final类不能被继承,final类中的方法默认是final的;
final方法不能被子类方法覆盖,但可以被继承;
final成员变量表示常量,只能被赋值一次,赋值后不再改变;
final不能用于修饰构造函数。
note:父类的private成员方法是不能被子类覆盖,所以private类型的方法默认是final类型的。
fianl类:何时需要final类?设计的时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会再被扩展。
final变量:一旦赋值,(可以修饰局部变量,静态变量和实例变量)不可修改,但是可以先声明而不给初始值,这样提高了灵活性,比如一个类中的final变量可以根据实例化的对象不同而有所不同(所以空白final依赖于某个对象使用),但是保持了不变的特征。这种先声明而不初始化叫做final空白,编译器都确保final在使用之前都会被初始化。
final方法:when?如果一个类不允许她的子类覆盖某个方法,则把这个方法定义为final类型。有两种目的:1:锁定方法,防止任何继承类修改她的意义和实现;2:高效:编译器在遇到调用final方法的时候会转入内嵌机制,大大提高执行效率。
三:abstract
抽象类(不可以被实例化,抽象方法描述系统具有什么功能,没有具体实现 )和具体类(可以被实例化,必须有方法体),:
可以修饰类和方法,修饰类时放在类名前;
有抽象方法的类一定是抽象类;(如果子类没有完全实现父类中的所有抽象方法,那么子类也必须被定义为抽象类,否则编译报错)
抽象类不一定有抽象方法,可以全是具体方法;
没有抽象构造方法,也没有抽象静态方法;
abstract修饰类:这个类不能生成对象实例,但可以作为对象变量声明的类型,即编译时类型,抽象类相当于类的半成品,需要子类继承并且覆盖其中的抽象方法。
abstract修饰方法:只有声明,没有实现(实现部分用;代替),需要子类继承实现(override覆盖),这样就可以以多态的方式调用。when?定义标准,方法一时间想不到具体怎么实现,或者需要子类去实现而定义某种标准。实质:制定标准(模版),通过子类实现标准。模板中不允许修改的方法可以用final,不公开的部分用protected。
(父类引用指向子类对象,使用多态,实际调用子类的方法)
java笔记之static&final&abstract的更多相关文章
- 浅析java修饰符之public default protected private static final abstract
浅析java修饰符之public default protected private static final abstract 一 修饰符的作用:用来定义类.方法或者变量,通常放在语句的最前端 ...
- java里的static/final含义
java里的static/final含义 static static可以修饰:属性,方法,代码段,内部类(静态内部类或嵌套内部类) static修饰的属性的初始化在编译期(类加载的时候),初始化后能改 ...
- Java 面向对象之static,final,匿名对象,内部类,包,修饰符
01final关键字概念 A: 概述 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承, 或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这 ...
- 菜鸡的Java笔记 第二十一 final 关键字
使用final定义类,属性,方法 final在一些书中被称为终结器,意思是:利用final定义的类不能够有子类,利用final定义的方法不能够被覆写,利用final定义的变量就成 ...
- 三大修饰符static,final,abstract,接口和抽象类的区别
package com.cityhero.test; public class ThreeModifier { //static静态的 // 概念:static可以修饰方法和属性,被static修的方 ...
- java笔记整理
Java 笔记整理 包含内容 Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...
- Java笔记8-抽象接口
高级特性部分: 抽象(abstract) 接口(interface) 提纲: 抽象类的定义和使用 模板设计模式的使用 接口的定义和使用 回调函数 区别抽象类和接口的异同 软件设计原则--------- ...
- java笔记——Java关键字static、final使用小结
static 1. static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:另一种是没有被static修饰的变量,叫实例变量.两者的 ...
- java修饰符public final static abstract transient
JAVA 修饰符public final static abstract transient 关键字: public final static abstract ... 1.public prot ...
随机推荐
- PostgreSQL备份和恢复数据表
备份数据表: pg_dump -U user_name db_name -t table_name -f /tmp/backup_file.suffix 恢复数据表: 方法1: 登录数据库:\i /t ...
- (6)C#项目结构
一.项目下Properites文件夹 Properties文件夹 定义你程序集的属性 项目属性文件夹 一般只有一个 AssemblyInfo.cs 类文件,用于保存程序集的信息,如名称,版本等,这些信 ...
- Educational Codeforces Round 33 (Rated for Div. 2) C. Rumor【并查集+贪心/维护集合最小值】
C. Rumor time limit per test 2 seconds memory limit per test 256 megabytes input standard input outp ...
- Python的并发并行[4] -> 并发[1] -> concurrent.future 模块
concurrent.future 模块 1 thread模块 / thread Module 1.1 常量 / Constants Pass 1.2 函数 / Function Pass 1.3 类 ...
- 用jmeter进行多用户并发压力测试
测试要求如下,多用户同时登陆web应用程序,并进行操作,查看在多用户操作下,程序的performence.恰好,jemter下有个CSV Data Set Config,它用来设定一组参数,以便在向程 ...
- ZOJ1027 Travelling Fee(DP+SPFA)
给一张有向无环图,边都有花费,从某点到某点走的那条路径上的那一条花费最多的边可以省掉,问从起点到终点的最少花费的多少, 往DP想的话,就可以写出这个状态dp[u][mx],表示到达u点已经省掉的花费为 ...
- ssh框架整合shiro权限
关于整合shiro,首先在ssh整合的基础上进行组合 1.首先,要导入几个依赖(整合ssh与shiro的依赖): <properties><shiro.version>1.3. ...
- redis 安装并且设置开机后台自动启动(转)
1,安装redis wget http://download.redis.io/releases/redis-2.8.8.tar.gz .tar.gz cd redis- make 2,建立Red ...
- 使用net包发送http请求
[java] view plain copy import java.io.BufferedReader; import java.io.InputStream; import java.io.Inp ...
- 自己写Tiny6410的Bootloader总结!
1.由于Tiny6410 2G版的Nand flash(K9GAG08U0E)的页大小是8K的,但是s3c6410芯片设置为nand flash启动时先从nand flash复制8K代码到片内内存中去 ...