static方法(与隐式static方法)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

 static方法就是没有this的方法.在static方法的内部不能调用非静态方法,反过来,非静态方法倒是可以调用static方法.
值得注意的是:这里说的是在static方法内部,不能直接调用非static方法,但可以通过生成对象来调用非静态方法.
在static方法内部,也不可以调用非static变量,其实道理很简单,因为static是面向全局的,相当于全局方法,不可能只针对某个类中的一般变量而使用.
在static与非static方法内部都不能声明static变量(全局变量),因为在方法内声明的变量都是局部变量,不可能在里面定义一个全局变量.

了解上面的知识后,你可能会发现有一个特例:在编程思想第四版P157上,构造器隐式的就是static的!然而在构造器内部为什么可以直接调用非静态方法??
所谓显式隐式static,是指类在实例化时,系统会执行的代码
比如

 

class StaticTest{   //这样没有static关键字的,叫隐式static,系统执行完显式static后会接着执行隐式static的代码 
    {
        System.out.println(
"hide static"); 
        show(); 
// 这个方法不是static的,但是在这里不会出错 
    }
 
    
static{   //这样有static关键字的叫显式static,系统会先执行显式static的代码 
        System.out.println("static"); 
        
//show(); //这个方法不是static的,所以会出错 
    }
 
    
public StaticTest(){   //执行完显式和隐式static后,系统会执行构造器的代码,因为构造器没有static,但也会被执行,跟隐式static一样,所以书上就把它说成隐式static了 
        System.out.println("constuctor"); 
    }
 
    
public void show()
        System.out.println(
"show"); 
    }
 
    
public static void main(String[] args) 
        
new StaticTest(); 
    }
 
}
 
所以所谓显式隐式static,只是对于类实例化执行代码的先后顺序而言的,从某种意义上说,不带static的都可以叫隐式static,隐式static可以调用非static成员.
C++类型转换全解析:从陷阱到显安全编程实践 类型转换是编程语言中处理不同数据类型间运算赋值的基础机制,其核心原理在于编译器或运行时系统按照特定规则将一种类型的值映射为另一种类型。在C++这类强类型语言中,理解类型转换的技术价值至关重要,它直接关系到代码的正确性、性能安全性。不当的转换可能导致难以察觉的精度丢失、性能损耗或逻辑错误,而显转换则赋予开发者精确的控制权。在实际应用场景中,无论是算术运算、类层次结构导航还是遗留API交互,都需要根据具体需求选择合适的转换策略。本文聚焦于C++中的**转换****显转换**两大主题,深入剖析 阅读详情

相关推荐

C++中的类型转换操作符:static_cast && reinterpret_cast &&const_cast && dynamic_cast(重要)

(operator +类型名)

m0_73975164的博客 1196

static用法

如果一个类中的方法全都是静态的,那么这个类中的方法就全都可以被类名直接调用,由于调用起来常方便,就像一个工具一样,所以把这样的类就叫做工具类。2.实例方法static修饰的方法,需要创建对象后才能调用,是因为实例方法中可能会访问实例变量,而实例变量需要创建对象后才存在。再补充一点,工具类里的方法全都是静态的,推荐用类名调用为了防止使用者用对象调用。1.类方法static修饰的方法,可以被类名调用,是因为它是随着类的加载而加载的;无static修饰的方法,是属于对象的,称为实例方法

weixin_47878012的博客 1122

Static方法的使用

如果使用public修饰某个类中的static方法,那么访问这个方法时,既可以使用“类名.方法名”的方访问,又可以使用“对象.方法名”的方访问。而没有static修饰的成员变量,则需要首先由类实例化对象,再通过对象访问该成员变量才可以。从上面的例子,不难发现:使得static修饰的方法成为类的方法,使用时通过“类名.方法名”的方就可以方便的使用了,相当于定义了一个全局的函数(只要导入该类所在的包即可)。所以,相应的,静态方法则还是要通过实例化对象,再通过“对象.方法名”的方访问了。

weixin_52689367的博客 1213

详解:static属性和方法的调用

静态成员(包括静态常量和静态方法)是类本身相关联的,而不是类的实例相关联的。因此,静态成员可以通过类名直接访问,也可以通过子类(或实现接口的类)的引用来间接访问。

阿鹏的博客 1515

Java_Static方法的使用

目录 前言: Static 静态内容调用 1.使用类名直接调用2.使用对象名调用 Static静态内容特性 1.任何静态内容,在程序运行前已经存在(不需要对象支持; ​ 2.静态内容只有一份(每次调用时只调用静态区域内容 前言: 在java中,存在一个静态区域,专门存放静态的属性和方法;在static类中,只也引用静态的属性和方法,因为静态在代码运行前已存在,所以静态的属性和方法均不可在静态区域内使用。 本文章以该类为例。 Static 静态内容调用 ...

m0_65592409的博客 1109

java static方法

static方法 1、static方法的作用 访问static变量和static方法 2、static方法的调用方 通过类名调用、通过对象名来访问 3、不可以 静态方法中不可以访问静态变量 静态方法中不可以访问静态方法 静态方法中不可以访问this 原因:加载类的时候就加载静态变量和静态方法,此时可能还没有创建对象,所以 静态变量和静态方法还没有分配空间,无法访问 4、可以 静态方法可以访问静态变量 静态方法中可以访问静态方法 原因和上面不可以类似 /** * 静

是猛男|二次元|玩原神|含盐量极高|不是GAY|不玩币|不接单 481

Java类对象(Java显参数和参数、静态方法+main方法、Java访问修饰符、static关键字、Java的包、对象数组)第三辑

Java的静态方法是定义在类中的一种特殊类型的方法。这些方法类本身相关,而不是类的实例相关。可以通过类名直接调用静态方法,而无需创建类的实例。

m0_74154295的博客 2334

static 和 interface的关系

static 和 interface的关系:1)内部接口是的静态的,不管你是不是用static来修饰注意:内部接口很少用到2)外部接口不能是静态的,就像外部类3)接口的所有的成员(属性方法)的public的。4)接口中所有的属性是static和final的5)接口中所有的方法不能定义为static6)接口中所有的被定义的类都是static

可乐的专栏 1919

【C++】类型转换详解:显转换的艺术

类型转换(也称为强制类型转换)是程序员通过特定语法明确请求的转换。显转换可以实现转换不允许的转换,但其安全性需要程序员自己保证。需要使用转换运算符或 C 风格转换。通常较安全,只允许 "扩展" 转换。代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。

2509_93923260的博客 317

第18天:C++ 类型转换全解析 —— 从到强制转换的实战指南

类型转换是 C++ 开发中绕不开的重要主题,尤其在嵌入系统、跨平台接口、底层驱动封装等场景中,不同类型间的转换需求频繁且复杂。C++ 提供了四种强制类型转换机制(`static_cast`、`reinterpret_cast`、`const_cast`、`dynamic_cast`),以区别于早期 C 风格的“不安全”强制转换方。本文将结合实际工程案例,深入剖析类型转换的潜在风险、强制类型转换的适用原则语义边界,并提供类型转换在嵌入平台(如 STM32、ESP32)中的常见用法优化建议,助力开发

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1354

Java static final 详解(简单易懂)

摘要: 本文详细解析Java中staticfinal的用法区别(2025-2026版)。static表示类级别共享(如全校饮水机),用于变量、方法、代码块和内部类;final表示不可修改(如焊死的电池),用于变量、方法和类。重点对比了两者的特性:static变量可修改且类加载时初始化,final变量必须一次性赋值。特别说明static final组合是常量最佳写法,并列举了常见易错点(如static方法不能用this、final数组内容可改)。最后通过口诀总结核心概念,帮助开发者快速掌握关键区别。

likuoelie的博客 975

C++类型转换详解:从到显的安全实践

类型转换是编程中的基础概念,指将数据从一种类型转换为另一种类型的过程。其核心原理涉及内存布局调整和语义映射,在C++中尤为复杂。合理的类型转换能提升代码灵活性,但不当使用会导致数据丢失或内存安全问题。在工程实践中,C++提供了static_cast、dynamic_cast等安全转换操作符,配合类型特征(type traits)和移动语义等现代特性,可构建更健壮的系统。特别是在模板编程和多态场景下,理解dynamic_cast的RTTI机制和转换构造函数的使用规范尤为重要。开发中应当优先使用C++风格转换而

weixin_33834075的博客 1283

09、关键字 this、static、super、final 等

【abstract 不能 final 方法同时出现】。Abstract final 永远互斥。对于 abstract 方法来说,该方法应该有子类重写,final 方法不能被重写。对于 abstract 类来说,该类主要用于派生子类。final 类不能被派生。【abstract static 不能同时修饰方法static 修饰方法的时候用类来调用方法。用类调用 abstract 方法没有意义,所以会出错。【abstract private 不能同时修饰方法

butingdejiaobu的专栏 1106

JavaSE this关键字和static关键字

1.局部变量,形参或者其他,属性,方法或者其他重名导致直接通过名字访问出现歧义(用this) 2.关键字 this 1.通过this全名称访问属性,方法 2.通过this调用其它的构造方法 但this的调用,必须出现在构造方法的第一行 3. this代表的就是这个对象本身 3.static关键字的用法 1.修饰属性 2.修饰方法 3.修饰内部类 4.静态代码块 5.import static 包...

LiAphrodite的博客 233

C++各种转换

1. 和显初始化1.1 C++初始化int ival(1024);string hello("Hello world.")1.2 C++显初始化int ival = 1024;string hello = "Hello world."  *PS: 注意这里"=" 语法是拷贝构造函数而不是赋值运算! 因为一个新对象被定义一定要有一个构造函数而不不是一个赋值操作 str

江湖菜鸟的专栏 664

为什么 PHP 闭包要加 static

PHP闭包在实例方法中会自动绑定$this,即使未使用也会导致对象无法及时释放。通过static关键字可以禁止这种绑定,避免内存泄漏。最佳实践是:当闭包不需要$this时显声明为static,这能明确意图并优化内存管理。PHP 8.6将引入自动推断优化,使未使用$this的闭包默认变为静态,但保持显声明仍有助于代码可读性和版本兼容性。

qq_31470439的博客 431

dart学习记录5(类、对象)

每个类都地定义了一个接口,该接口包含该类的所有实例成员以及它所实现的任何接口的实例成员。如果你想创建一个支持类 B 的应用程序编程接口(API)但又不继承 B 的实现的类 A,那么类 A 应该实现 B 接口。final的实例变量,以及未初始化的late final实例变量,都会生成一个的setter方法。使用方法:在类定义时,运用 implements 关键字,后面紧跟一个或多个接口名,若有多个接口,用逗号分隔。类借助 implements 关键字来实现接口时,就必须实现接口里定义的所有方法

菜鸟的博客 571

PHP闭包中static关键字的核心作用底层原理解析

PHP闭包中的static关键字,并简单的语法修饰,而是解决实例方法中闭包绑定$this的核心底层手段。其本质是通过切断闭包当前对象的引用绑定,避免内存泄漏和对象生命周期异常,同时也是一种显的代码声明,明确闭包的作用域边界。在PHP现代化开发中,闭包的使用频率越来越高,尤其是在框架开发、异步编程、函数编程等场景中,理解static闭包的底层原理,遵循其使用规范,是每个PHP开发者的必备能力。实例方法中的闭包,“不用$this就加static”,这一简单的规则,能解决绝大多数闭包引发的藏问题。

dsgdauigfs的博客 585

static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较

转载于:http://www.cnblogs.com/jerry19880126/archive/2012/08/14/2638192.html 转换(implicit conversion) short a=2000; int b; b=a; short是两字节,int是四字节,由short型转成int型是宽化转换(bit位数增多),编译器没有w

晚晴小筑 907
上一篇: 关于"多态"static方法的理解
下一篇: Java代码执行顺序-样例
ForWayfarer
博客等级 码龄20年 60粉丝 96原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值