final关键字

fianl关键字可以修饰类、成员变量、和方法中的局部变量。

(java中的局部变量?定义在方法中的变量都是局部变量,使用前必须初始化)

1.fianl类

Final类不能被继承,即可以看成为终结类。

如:

final class A{

}

2.final方法

若用final修饰父类中的一个方法,那么不允许子类隐藏可以继承的fianl方法。 //有点不懂?

3.常量

用fianl定义的变量可以看为常量,且在运行期间不会发生变化,在声明时候不指定初始值,在

使用之前,必须对其赋值,而且不能再重新赋值。

Circle.java
public class Circle{
final double PI=3.1415926;
//声明名字是PI的final常量,其值为3.1415926 double radius;
public void setRadius(fianl double r){
radius=r;
}
public fianl double getArea(){
return PI*radius*radius;
//定义计算面积是double getArea()方法,该方法必须是final
}
}
Application5_7.java
public class Application5_7{
public static void main(String[] args) {
Circle c=new Circle();
c.setRadius(38.26);
System.out.println("面积%5.3f\n",c.getArea());
}
}

  

Static关键字主要有两种作用:

1.为特定对象或数据分配特定空间。

2.在不创建对象的情况下就可以通过类来直接调用类的方法或属性。

static主要有4种使用情况:成员变量、成员方法、代码块和内部类;

1)static成员变量

通过static来达到全局变量的效果;

用static修饰的变量叫静态变量,也叫类变量,没static修饰的叫实例变量;

static变量被分配到同一块内存中,用法:类名.静态变量 或对象.静态变量;

实例变量只有在创建对象时候才能够被分配内存,并且存在多个复制,只能用对象.静态变量;

2)static方法

它只能访问属于类的static方法它的内存块是同一块(即会随着改变而改变,且以最后一次修改为主)

而普通成员方法或实例方法,它们的对象的变量的内存块有多块,某个对象的改变不会影响其它的改变,

因为它们在不同的内存块,彼此相互独立。

public class TestStatic1{
public static void main(String[] args) {
/*Dog d=new Dog();
d.setName("j dog");
d.setAge(100); Dog d1=new Dog();
d.setName("c dog");
d.setAge(10);*/ Dog d=new Dog();
d.Strs[0]="a";
d.Strs[2]=“b”;
d.Strs[0]="hello";
d.Strs[2]="go"; //d=d1;
System.out.println(d1.strs[0]);//hello
System.out.println(d.strs[2]);//go
}
public static void main(String[] args){
testDog();
}
}

  

总结:

从内存来看静态区和对象区;

加载类对象的时候,静态去自动加载;

非静态语句块随着对象的创建而创建(默认调用)

静态语句块,类加载的时候被调用执行,仅有一次(默认调用)

//两个静态对象共享变量,对象区域的两个对象共享一个静态方法,以最后一个修改的值为主,前一个被覆盖了

//先申明后创建对象

总结:

在创建对象的同时

1.静态块

2.非静态块

3.构造器

//调用非静态方法,通过对象调用(对象必须不为空)

2.实例变量与类变量的区别

1)不同的实例变量互不相同(在内存中的位置不同,且互不影响)

2)所有的对象共享类变量:若类中有类变量,当new出多个对象时,这些对象的类变量占有

相同的一处内存,改变其中一个对象的类变量会影响其它对象的这个类变量,即共享该类变量。

(占有内存中同一位置,多个对象共享它,任意一个对象改变它都会影响)

3)通过类名直接访问类变量(要写代码来测试或感受一下)

一个类创建一个对象,对应的实例变量就会分配一块内存,多个实例变量会分配不同内存,

如果是类变量,不在重新分配内存,所有对象共享类变量,即所有的对象的类变量是相同的一处

内存空间,类变量共享,所有的对象的类变量是相同的一处内存空间,直到程序退出,才释放

内存空间;

另外如果改变其中一个对象的类变量,其它的类变量也就改变了,因为共用一块内存空间。

综上所述,易得,可以通过类变量来访问类名所在的变量,因为空间固定,且由类而来,而实例变量只能通过对象来访问,

因为它们对象在不同的内存空间,所以要精确到具体的对象名。

4)static内部类

static内部类是指被声明为static的内部类,它可以不依赖于外部类的实例对象而被

实例化,而通常的内部类需要外部类实例化后才能被实例化,静态内部类不能与外部类有相同的名字,不能访问

外部类的普通成员变量,只能访问外部类中的静态成员和静态方法

public class Outer {
static int n=5;
static class Inner {
void accessAttrFromOuter() {
System.out.println("Inner:Outer.n=" + n);
}
}
public static void main(String[] args) {
Outer.Inner nest=new Outer.Inner();
nest.accessAttrFromOuter();
} }

  

内部类才能够用static修饰,还有静态变量或者说类变量要定义在开头;

20180112final和static的更多相关文章

  1. static,你还敢用吗?(二)

    为了压系统,昨天小组在测试环境模拟了一大批订单数据.今天上午查看记录的账单计息日志,发现了一大堆的MySqlException MySql.Data.MySqlClient.MySqlExceptio ...

  2. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  3. const extern static 终极指南

    const extern static 终极指南 不管是从事哪种语言的开发工作,const extern static 这三个关键字的用法和原理都是我们必须明白的.本文将对此做出非常详细的讲解. co ...

  4. PHP static静态属性和静态方法

    这里分析了php面向对象中static静态属性和静态方法的调用.关于它们的调用(能不能调用,怎么样调用),需要弄明白了他们在内存中存放位置,这样就非常容易理解了.静态属性.方法(包括静态与非静态)在内 ...

  5. static,你还敢用吗?

    我用火狐的HttpRequester测试开发组里一个同学发布的Web API接口,遇到了一个奇怪的问题. 我测试边界情况时,第一次调用响应的结果是正常的,但当再次及以后的请求时,却返回了异常“Syst ...

  6. Java关键字:static

    通常,当创建类时,就是在描述那个类的外观和行为.只有用new创建类的对象时,才分配数据存储空间,方法才能被调用.但往往我们会有下面两种需求: 1.我想要这样一个存储空间:不管创建多少对象,无论是不创建 ...

  7. Android 中关于static的使用问题

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5251564.html 项目中,在不停地接收串口数据很长一段时间(几小时)后,会偶然性的报错.初步排除了oom ...

  8. iOS: 在UIViewController 中添加Static UITableView

    如果你直接在 UIViewController 中加入一个 UITableView 并将其 Content 属性设置为 Static Cells,此时 Xcode 会报错: Static table ...

  9. 浅谈Static关键字

    1.使用static关键字声明的属性为全局属性 未使用static关键字指定city之前,如果需要将Tom,Jack,Mary三人的城市均改成Beijing,需要再次声明三次对象的city为Beiji ...

随机推荐

  1. 金字塔原理——MECE(Mutually Exclusive Collectively Exhaustive)

    一.金字塔原理 它的样子: 一个中心思想,分出下面2到N个思想支撑,每个分论点下面又有2到N个思想(事实或数据)支撑,以此类推,形状如金字塔.原则是以终为始(先结果后原因),以上统下,归纳分组,逻辑递 ...

  2. Centralized Cache Management in HDFS

    Overview(概述) Centralized cache management in HDFS is an explicit caching mechanism that allows users ...

  3. maven项目创建

    一.搭建步骤 ♦首先创建一个Maven的Project,如下图: ♦点击Next,勾选 Create a simple project ♦点击Next,注意Packing要选择war,因为我们创建的是 ...

  4. [目标检测]SSD原理

    1 SSD基础原理 1.1 SSD网络结构 SSD使用VGG-16-Atrous作为基础网络,其中黄色部分为在VGG-16基础网络上填加的特征提取层.SSD与yolo不同之处是除了在最终特征图上做目标 ...

  5. RGB颜色参考

    实色效果 英文名称 R.G.B 16色 实色效果 英文名称 R.G.B 16色   Snow 255 250 250 #FFFAFA   PaleTurquoise1 187 255 255 #BBF ...

  6. 解压赋值及python的一些基础运算

    #解压赋值lis=[11,22,33,44,55] money1,money2,money3,money4,money5=lis print(money1,money2,money3,money4,m ...

  7. 万恶之源 - Python基础知识补充

    编码转换 编码回顾: 1. ASCII : 最早的编码. ⾥⾯有英⽂⼤写字⺟, ⼩写字⺟, 数字, ⼀些特殊字符. 没有中⽂, 8个01代码, 8个bit, 1个byte 2. GBK: 中⽂国标码, ...

  8. ppt插入声音

    1:点击插入>音频>文件中的音频 2:插入成功后,会出现一个声音的图表 3:对播放格式进行设置,设置循环播放等. 4:双击对声音进行编辑 ,会出现右边的各个组件, 5:点击下拉框>效 ...

  9. [py][mx]django通过邮箱找回密码

    忘记密码处理流程 注意: 这个文章里的找回密码页面截取有问题. 找回密码页应该是让输入邮箱 直接上代码 class ActiveView(View): # 主要功能是修改user_profile里的i ...

  10. R之ddlpy函数学习[转载]

    转自:https://www.cnblogs.com/aloiswei/p/6032513.html 1.函数 ddply(.data, .variables, .fun = NULL, ..., . ...