面向对象(static关键字)
static关键字:用于修饰成员(成员变量和成员函数)
被修饰后的成员具备以下特点:
随着类的加载而加载
优先于对象存在
被所有的对象共享
可以直接被类名调用
使用注意:
静态方法只能访问静态成员
静态方法中不可以写this,super关键字
主函数是静态的
static关键:
1、被static修饰的成员变量,被所有的对象所共享
2、静态随着类的加载而加载,随着类的消失而消失
3、优先于对象的存在
4、静态成员可以直接被类名所调用
static的使用注意事项:
1、静态方法只能调用静态成员,不能调用非静态成员,非静态方法可以调用静态成员也可以调用非静态成员
2、在静态方法中不允许出现this super关键字,this代表对象,而静态方法执行时还没有对象呢
3.主函数是静态的
4、静态是有访问局限性的,只能访问静态的内容
静态成员变量和非静态成员变量的区别:
1、非静态成员变量又称为实例变量,静态成员变量又称为类变量
2、非静态成员变量随着对象的创建而创建,随着对象的消失而消失,静态成员变量随着类的加载而存在,随着类的消失而消失
3、非静态变量存在于对象堆内存中,静态成员变量存在于方法区中
4、非静态变量只能被对象所调用,而静态变量可以被类名调用也可以被对象调用。
静态什么时候用:
1、成员变量是否需要static修饰呢?该成员变量的值如果每一个对象都相同的话就用static来修 饰,如果不是的话就不用static来修饰了,让这些不相同的存储到每个对象中。
2、成员函数是否需要被静态修饰呢?
当函数中访问到了对象中的特有属性时,该函数不能被静态修饰,如果函数中没有访问到对象的特有属性,就可以被静态修饰。如果方法没有访问过特有属性那么可以直接被静态化。简单的说,如果函数中访问了成员变量(实例变量),不能静态,否则可以静态,直接被类名所调用。如果一个类中定义的方法都是静态的,说明这个类是不需要对象的。
静态代码块:
随着类的加载而执行,而且只执行一次
优先于主函数执行
package com_package2; public class StaticCode
{
private String name;
private static String country;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static String getCountry() {
return country;
}
public static void setCountry(String country) {
StaticCode.country = country;
}
public void show()
{
System.out.println("name="+name);
System.out.println("country="+country); } }
package com_package2;
public class StaticCodeDemo {
public static void main(String[]args)
{
StaticCode p = new StaticCode();
p.setName("hejinjin");
p.setCountry("cn");
//StaticCode p1 = new StaticCode();
//p1.setCountry(country)
p.show();
}
}
package com_package2; public class StaticCode
{
private String name;
private static String country="cn";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static String getCountry() {
return country;
}
public static void setCountry(String country) {
StaticCode.country = country;
}
public void show()
{
System.out.println("name="+name);
System.out.println("country="+country); } }
package com_package2;
public class StaticCodeDemo {
public static void main(String[]args)
{
//StaticCode p = new StaticCode();
//p.setName("hejinjin");
//p.setCountry("cn");
//StaticCode p1 = new StaticCode();
//p1.setCountry(country)
//p.show();
System.out.println(StaticCode.getCountry());没有创建对象就可以调用静态的对象,由此可以看出,静态成员变量随着类的加载而存在。
}
}
package com_package2; public class StaticCode
{
private String name;
private static String country="cn";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static String getCountry() {
return country;
}
public static void setCountry(String country) {
StaticCode.country = country;
}
public static void show()
{
System.out.println("name="+name);//这样是不对的因为静态方法无法访问非静态变量
System.out.println("country="+country); } }
package com_package2; public class StaticCode
{
private String name="kakaka";
private static String country="cn";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static String getCountry() {
return country;
}
public static void setCountry(String country) {
StaticCode.country = country;
}
public void show()
{
System.out.println("name="+name);
System.out.println("country="+country); }
public static void function()
{ System.out.println("kokokookokok");
}
public static void guojia()
{
System.out.println("country"+country); } }
package com_package2;
public class StaticCodeDemo {
public static void main(String[]args)
{
//StaticCode p = new StaticCode();
//p.setName("hejinjin");
//p.setCountry("cn");
//StaticCode p1 = new StaticCode();
//p1.setCountry(country)
//p.show();
System.out.println(StaticCode.getCountry());
speak();
}
public static void speak()
{
StaticCode p = new StaticCode();
p.setName("hejinjinhaha");
System.out.println(p.getName());
StaticCode.function();//这两个方法没有访问到静态成员变量,所以直接静态化
StaticCode.guojia();//这两个方法没有访问到静态成员变量,所以直接静态化
}
}
静态代码块
package com_package2; public class StaticCode
{
static
{
System.out.println("A"); }
public void show()
{
System.out.println("run"); }
}
package com_package2;
public class StaticCodeDemo {
static
{
System.out.println("B");
}
public static void main(String[]args)
{
StaticCode p = new StaticCode();
p.show();
}
static
{
System.out.println("C");
}
}
B
C
A
run
注意执行顺序,先从带主函数的类进入,由于静态代码块随着类的创建而创建,所以优先于主函数执行,然后再执行主函数,在执行主函数的时候用到了StaticCode类,StaticCode类中也有静态代码块,而这个静态代码块也是随着类的建立而存在,所以比show()要执行的早。
静态代码块的特点就是:随着类的加载而执行并且只执行一次,优先于主函数执行
面向对象(static关键字)的更多相关文章
- Java面向对象-static关键字、静态方法与普通方法、静态成员变量
Java面向对象-static关键字.静态方法与普通方法 static关键字的基本作用:方便在没有创建对象的情况下来进行调用(方法/变量). 很显然,被static关键字修饰的方法或者变量不需要依赖于 ...
- 面向对象-static关键字实战案例
面向对象-static关键字实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.static关键字概述 1>.static的功能 static关键字用于修饰成员变量和 ...
- Java基础语法 - 面向对象 - static 关键字
使用static关键字修饰的变量.常量和方法分别被称作静态变量.静态常量和静态方法,也被称作类的静态成员 静态变量 使用static修饰过的类变量称为静态变量 该变量需要使用类名.变量名进行调用,不能 ...
- PHP面向对象static关键字
1.静态属性用于保存类的公有数据 2.静态方法里面只能访问静态属性 3.静态成员不需要实例化就可以访问 4.类的内部可以通过self或者static关键字访问自身的静态成员 5.可以通过parent关 ...
- Java面向对象--static关键字
- 2017.10.23 Java 面向对象深入学习---final 关键字、static关键字、匿名对象等
今日内容介绍 1.final 关键字 2.static 关键字 3.匿名对象 4.内部类 5.包的声明与访问 6.访问修饰符 7.代码块 第一节课 01(面向对象)final关键字概念.avi 02: ...
- Java第7次作业:造人类(用private封装,用static关键字自己造重载输出方法)什么是面向对象程序设计?什么是类和对象?什么是无参有参构造方法 ?什么是封装?
什么是面向对象程序设计? 我们称为OOP(Object Oriented Programming) 就是非结构化的程序设计 要使用类和对象的方法来进行编程 什么是类,什么是对象 类就是封装了属性和 ...
- 面向对象编程(二)封装--构造方法,this关键字,static关键字,方法重载
面向对象三大特点:封装.继承.多态 封装概念 ① 将东西包装在一起,然后以新的完整形式呈现出来: 将方法和字段一起包装到一个单元中,单元以类的形式实现; ② 信息隐藏,隐藏对象的实现细节,不让 ...
- Java学习笔记之面向对象、static关键字
一周Java学习总结 今天就总结理清一下关于面向对象和面向过程的程序设计的一些不同特点,以及讲下static关键字. 面向对象 现在接触的Java是面向对象的,现在的程序开发几乎都是以面向对象为基础的 ...
- 094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 04 static关键字(续)
094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
随机推荐
- ASP.NET动态网站制作(12)-- JQ(4)
前言:这节课接着上次课的继续讲. 内容:接上--> 1.jq元素样式设置: (4)某个元素中是否含有某个css类别,返回布尔型:$("li:last").hasClass( ...
- Java 学习 day01
1. 基本常识 2. Java的跨平台性 3. Java环境搭建(安装) 4. Java环境搭建(环境变量配置) 5. Java环境搭建(环境变量配置技巧) 6. Java环境搭建(环境变量临时配置方 ...
- Error -27728: Step download timeout (120 seconds)的解决方法(转)
LR中超时问题解决方法 超时错误在LoadRunner录制Web协议脚本回放时超时经常出现. 现象1:Action.c(16): Error -27728: Step download timeout ...
- css position 几种定位
绝对定位:position:absolute 绝对定位使元素的位置与文档流无关,因此不占据空间. 绝对定位的元素的位置相对于最近的已定位祖先元素(absoulte.relative),如果元素没有已定 ...
- 九度OJ 1145:Candy Sharing Game(分享蜡烛游戏) (模拟)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:248 解决:194 题目描述: A number of students sit in a circle facing their teac ...
- 如何利用Windows System Image Manager制作一个answer file
打开Windows System Image Manager 从菜单中创建一个新的Answer File 在窗体左下部的Windows Image处右键,选择菜单Select Windows Imag ...
- Java for LeetCode 122 Best Time to Buy and Sell Stock II
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- 实例化Flask的参数和对app的配置
Flask 是一个非常灵活且短小精干的web框架 , 那么灵活性从什么地方体现呢? 有一个神奇的东西叫 Flask配置 , 这个东西怎么用呢? 它能给我们带来怎么样的方便呢? 首先展示一下: from ...
- 20145239杜文超 实验五 Java网络编程
20145239 实验五 Java网络编程 实验内容 组队,一人服务器,一人客户端. 下载加解密代码,先编译运行代码,一人加密一人解密,适当修改代码. 然后集成代码,一人加密后通过TCP发送,加密使用 ...
- <JAVA图像学习笔记>关于Graphics/Graphics2D以及简单的几何图像制作(一个简单钟表的实现)
题外话:正好赶上OperatingSystem的作业要做一个模拟线程/进程调度的问题,决定用JAVA实现才发现这些内容和之前学过的GUI制作是两码事儿- -b 通过学习java.swing库的Acti ...