首页 Java java教程 Java 基础入门随笔(8) JavaSE版——静态static

Java 基础入门随笔(8) JavaSE版——静态static

Dec 22, 2016 pm 01:08 PM

面向对象(2)

this:代表对象。代表哪个对象呢?当前对象。

当成员变量和局部变量重名,可以用关键字this来区分。

this就是所在函数所属对象的引用。(简单说:哪个对象调用了this所在的函数,this就代表哪个对象。)

this也可以用于在构造函数中调用其他构造函数。注意:只能定义在构造函数的第一行。因为初始化动作要先执行。

        例如:person(String name){this.name = name;}

                  person(String name,int age){this(name);this.age = age;}

一般在本类对象中用到了本类的对象,通常都是用this。

static:

特点:1.static是一个修饰符,用于修饰成员。

          2.static修饰的成员为所有的对象所共享的。

          3. static优先于对象存在,因为static的成员随着类的加载就已经存在了。

          4.static修饰的成员多了一种调用方式,就是可以直接被类名所调用,如:类名.成员变量。

          5.static修饰的数据是共享数据,对象中的存储的时特有数据。

注意:成员变量也称实例变量;static修饰的变量称为静态变量或叫类变量。

 

成员变量与静态变量的区别:

1.两个变量的生命周期不同。

   成员变量随着对象的创建而存在,随着对象的回收而被回收释放;

   静态变量随着类的加载而存在,随着类的消失而消失。

2.调用方式不同。

   成员变量只能被对象调用;

   静态变量可以被对象调用,还可以被类名调用(推荐)。

3.别名不同。

   成员变量称为实例变量;

   静态变量称为类变量。

4.数据存储位置不同。

成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据。

静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。

 

静态使用的注意事项:

1.静态方法只能访问静态成员。(非静态既可以访问静态,又可以访问非静态)(说明:注意此处针对同一个类的环境下,静态方法只能调用本类中的静态成员)

2.静态方法中不可以使用this或者super关键字。

3.主函数是静态的。

静态什么时候用?

1.静态变量。

   当分析对象中所具备的成员变量都是相同的,这时这个成员变量可以被静态修饰。

   只要数据在对象中都是不同的,那就是对象的特有数据,必须存储在对象中,是非静态的。

   如果是相同的数据,对象不需要做修改,只需要使用即可,不需要存储在对象中,定义成静态的。

2.静态函数。

函数是否用静态修饰,只要参考一点,就是该函数功能是否有访问到对象中的特有数据。

简单点说,从源代码看,该功能是否需要访问非静态的成员变量,如果需要,该功能就是非静态的,如果不需要,就可以将功能定义为静态的。

当然,也可以将该功能定义成非静态,但是非静态需要被对象调用,而仅创建对象调用非静态的没有访问特有数据的方法,该对象的创建时没有意义的。

 

主函数特殊之处:

1.格式是固定的;2.被jvm所识别和调用。

public:因为权限必须是最大的。

static:不需要对象的,直接用主函数所属类名调用即可。

void:主函数没有具体的返回值。

main:函数名,不是关键字,只是一个jvm识别的固定的名字。

String[] args:这是主函数的参数列表,是一个数组类型的参数,而且元素都是字符串类型。(可在调用主函数时传入,例如:java mainDemo xx yy zz 即为传入了3个元素的字符串数组)

静态代码块\构造代码块\局部代码块:

静态代码块:随着类的加载而执行。而且只执行一次。作用:用于给类进行初始化。

构造代码块:随着对象的创建而执行,对象创建几次即调用几次。作用:可以给所有对象进行初始化的。(与构造函数的区别:构造函数是给对应的对象进行针对性的初始化。而构造代码块对象初始化的通用性。)

局部代码块的作用:限定局部变量的生命周期。

三者的调用顺序如下:

class StaticCode
{
    static int num ;
    //静态代码块 (首先执行)
    static
    {
        num = 10;
//      num *=3;
        System.out.println("hahahah");
    }
    StaticCode(){}
 
    static void show()
    {
        System.out.println(num);
    }
}
 
class Person
{
    private String name;
     
     
 
    {//构造代码块。可以给所有对象进行初始化的。(如有调用对象,即其次调用,与局部代码块视情况而定)
 
        System.out.println("constructor code ");
//      cry();
    }
     
    static
    {
        System.out.println("static code");
    }
     
    Person()//是给对应的对象进行针对性的初始化。 
    {
        name = "baby";
//      cry();
    }
    Person(String name)
    {
        this.name  = name;
//      cry();
    }
    public void cry()
    {
        System.out.println("哇哇");
         
    }
 
    public void speak()
    {
        System.out.println("name:"+name);
    }
 
    static void show()
    {
        System.out.println("show run");
    }
}
 
 
class StaticCodeDemo 
{
    static
    {
//      System.out.println("a"); //先执行
    }
    public static void main(String[] args) 
    {
 
//      Person p = null;
//      p.speak();
 
//      Person.show();
//      Person p1 = new Person();
//      p1.speak();
//      Person p2 = new Person("旺财");
//      p2.speak();
//      new Person();
         
 
//      new StaticCode().show();
//      new StaticCode().show();
//      StaticCode.show();
//      System.out.println("b");    //后执行
    }
}
登录后复制

 以上就是Java 基础入门随笔(8) JavaSE版——静态static的内容,更多相关内容请关注PHP中文网(www.php.cn)!


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Java 中的史密斯数 Java 中的史密斯数 Aug 30, 2024 pm 04:28 PM

Java 史密斯数指南。这里我们讨论定义,如何在Java中检查史密斯号?带有代码实现的示例。

Java Spring 面试题 Java Spring 面试题 Aug 30, 2024 pm 04:29 PM

在本文中,我们保留了最常被问到的 Java Spring 面试问题及其详细答案。这样你就可以顺利通过面试。

突破或从Java 8流返回? 突破或从Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一种强大且表达力丰富的处理数据集合的方式。然而,使用Stream时,一个常见问题是:如何从forEach操作中中断或返回? 传统循环允许提前中断或返回,但Stream的forEach方法并不直接支持这种方式。本文将解释原因,并探讨在Stream处理系统中实现提前终止的替代方法。 延伸阅读: Java Stream API改进 理解Stream forEach forEach方法是一个终端操作,它对Stream中的每个元素执行一个操作。它的设计意图是处

Java 中的时间戳至今 Java 中的时间戳至今 Aug 30, 2024 pm 04:28 PM

Java 中的时间戳到日期指南。这里我们还结合示例讨论了介绍以及如何在java中将时间戳转换为日期。

Java程序查找胶囊的体积 Java程序查找胶囊的体积 Feb 07, 2025 am 11:37 AM

胶囊是一种三维几何图形,由一个圆柱体和两端各一个半球体组成。胶囊的体积可以通过将圆柱体的体积和两端半球体的体积相加来计算。本教程将讨论如何使用不同的方法在Java中计算给定胶囊的体积。 胶囊体积公式 胶囊体积的公式如下: 胶囊体积 = 圆柱体体积 两个半球体体积 其中, r: 半球体的半径。 h: 圆柱体的高度(不包括半球体)。 例子 1 输入 半径 = 5 单位 高度 = 10 单位 输出 体积 = 1570.8 立方单位 解释 使用公式计算体积: 体积 = π × r2 × h (4

PHP与Python:了解差异 PHP与Python:了解差异 Apr 11, 2025 am 12:15 AM

PHP和Python各有优势,选择应基于项目需求。1.PHP适合web开发,语法简单,执行效率高。2.Python适用于数据科学和机器学习,语法简洁,库丰富。

PHP:网络开发的关键语言 PHP:网络开发的关键语言 Apr 13, 2025 am 12:08 AM

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

创造未来:面向零基础的 Java 编程 创造未来:面向零基础的 Java 编程 Oct 13, 2024 pm 01:32 PM

Java是热门编程语言,适合初学者和经验丰富的开发者学习。本教程从基础概念出发,逐步深入讲解高级主题。安装Java开发工具包后,可通过创建简单的“Hello,World!”程序实践编程。理解代码后,使用命令提示符编译并运行程序,控制台上将输出“Hello,World!”。学习Java开启了编程之旅,随着掌握程度加深,可创建更复杂的应用程序。

See all articles