得到方法调用者和java中的位操作符

别再死记位操作符了,用一个故事搞懂 Java 和 Python 的位运算 位操作符听起来很底层,却常常在面试和高性能代码中“突然出现”。它就像二进制世界里的仓库管理员,默默控制着每一盏灯的开与关。本文从故事出发,对比 Java 和 Python 中的位操作符,用生活化的比喻把抽象的 0 和 1 讲清楚,带你真正看懂位运算的力量。 阅读详情

获取方法的调用者

如果你写了一个超级复杂超级大的项目,在项目后期调试修改的时候,突然想知道到底是哪些类调用了ImportantClass中的Important方法,你会怎么做呢?

首先,你可能说:我用不到!如果这样的话,到这里你就可以return了。
做法一:最常规有效的做法,使用IDE的全目录全文搜索方法名。当然这样是最有效快速的。但是如果有很多别的类中也定义了Important方法,你就会得到很多垃圾搜索结果。同时你只能搜索到目录下的结果,而对于运行时调用Important方法的地方你就无所适从了。

做法二:这就是我要说的,编写程序,获取方法调用者。最直观的例子就是我们每天都在用了log4j。在执行log.debug或者别的输出日至的操作的时候,它都会按照设定的格式输出类名、方法名、甚至所在的行数。如果我们在Important方法中插入这么一段,就可以知道到底是谁在运行期调用了Important方法了。

在demo程序中有详细的注释和一个完整的例子。我们知道把那段代码拷贝到关系的程序中,修改一下fullClassName就可以了。 

/**
 * 
 
*/


/**
 * 
@author zangmeng
 * 
 * 
 * 如果我们注意观察一下异常时的输出,我们就知道java调用栈的结构了
 * 最后被调用的方法在栈顶。
 * 我们这个方法的工作过程就是首先得到调用栈,然后从栈顶向下搜索
 * 直到搜索到我们关心的Important类。
 * 然后,在这个类的方法后面的,就是我们关心的Important类的important方法的调用者了
 * 这时候我们检测第一个不是Important类的类,则这个类必定是调用Important类中
 * important方法的类和方法。
 * 然后我们将之打印出来,就可以了。
 * 同样的道理,我们也可以得到更上一层的调用关系。
 * 一直追述到线程的启动方法。
 * 
 
*/

public   class  Important  {
    
public void important() {
        String fullClassName 
= "Important";
        
// 首先得到调用栈
        StackTraceElement stack[] = (new Throwable()).getStackTrace();
        
// 然后从栈中向上搜索,直到搜索到我们的Important类。
        int ix = 0;
        
while (ix < stack.length) {
            StackTraceElement frame 
= stack[ix];
            String cname 
= frame.getClassName();
            
if (cname.equals(fullClassName)) {
                
break;
            }

            ix
++;
        }

        
// 此时ic位置放置的是Important类。
        while (ix < stack.length) {
            StackTraceElement frame 
= stack[ix];
            String cname 
= frame.getClassName();
            
if (!cname.equals(fullClassName)) {
                
//第一个费Important类的类就是调用者
                System.out.println("调用者此方法的类名:"+cname);
                System.out.println(
"在"+cname+"中调用次方法的方法名:"+frame.getMethodName());
            }

            ix
++;
        }

        
/**
         * some important operation is followed :)
         
*/


        System.out.println(
"__This is an important method,and I care for the infor of the invoker!__");
    }

}

 

java中的位操作符


因为不常用,所以经常忘记。索性抽时间总结一下,备忘。
对于java这种语言来说,位操作符比较少用到
&:按位与。
|:按位或。
^:按位异或。
~:按位取反。
<<:左移,高位插0,否则插1;
>>:右移,高位插0,否则插1;
>>>:无符号右移,无论正负,高位插0
令人奇怪的是java似乎好像大概说不定没有同或操作符,why?莫非是想让我们把~和^组合一下代替同或操作符?
http://www.matrix.org.cn/resource/article/43/43978_Java_Bitfields_Bitboards.html 这篇文章讲的是相当不错,看了个开头,感觉很有水平,不过篇幅太长,不宜上班时阅读,留作备忘以后慢慢读之。

【Java学习】按位操作符:5个关键点,你真的掌握了Java中的位运算魔法吗? 定义:按位操作符用于对整数的二进制表示进行位级操作,返回新的整数值。常见操作符按位与按位或按位异或按位非左移无符号右移>>> 阅读详情

相关推荐

Silvaco 学习笔记——物理模型:载流子产生复合模型

对载流子的复合机制进行总结

reactortiger的博客 1万+

得到当前方法的名字Thread.currentThread().getStackTrace()[1].getMethodName();

一个thread就是一个线程,当你编程使用多线程的时候,用currentthread()这个method来获取当前运行线程,以便对其进行操作。 简单来说就是 Tthread类(线程类) 中的一个方法 Thread.currentThread() 是指获取当前运行的线程对象 例如: Thread.currentThread().getName() 就是获取当前运行的线程的名称

u011159607的博客 5632

Silvaco TCAD仿真例库——肖特基二极管正向特性(例子)

此示例演示了肖特基二极管正向特性的仿真。 展示了: 使用 Atlas 语法形成二极管结构 设置阳极的肖特基势垒高度 正向偏置阳极 代码 第一部分:描述设备 mesh(网格) electrodes locations(电极位置) doping distribution(掺杂分布) 这是位于结构左侧和右侧的,2维n型器件,具有重掺杂浮动 p 型保护环区域, (2D n-type device with heavily doped floating p-type guard ring regio.

weixin_41788560的博客 2万+

Java 获得方法调用者名称

网上查到的,留下参考备用 [code="java"] public static void getCaller() { StackTraceElement[] stack = (new Throwable()).getStackTrace(); for (int i = 0; i < stack.length; i++) { StackTraceElement ste = sta...

拼命工作,好好玩 795

Tera Term介绍和使用指南

Tera Term 是一个用于 Windows 操作系统的免费终端模拟器和串口通信软件。它主要用于在计算机和其他设备之间建立串口通信连接,例如通过串行线缆连接到设备如路由器、开发板或嵌入式系统。Tera Term 支持多种通信协议和功能,包括 Telnet、SSH 和串口通信。提供了一个终端窗口,模拟了常见的终端类型,如VT100。支持通过串口与设备进行通信,可用于与嵌入式系统、微控制器等设备进行连接。提供 Telnet 和 SSH 功能,可用于通过网络连接到远程主机。

weixin_49423593的博客 1万+

SpringBoot SSE避坑指南:当客户端突然断开时服务端SseEmitter的正确回收姿势

本文深入探讨了SpringBoot中SSE连接的生命周期管理,特别是客户端主动断开连接时服务端SseEmitter的正确回收机制。文章重点分析了客户端调用eventSource.cancel()等场景下,如何利用onCompletion()回调进行可靠的资源清理,避免内存泄漏,并提供了防御式编程策略和实战优化建议。

mm9012的博客 778

如何在java中获取一个方法的调用者

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34129145的博客 2202

【Altium designer】如何添加过孔阵列

按下图1指示,执行【Tool】菜单栏下【Via Stitching/Shielding】选项卡中的【Add Stitching to Net...】选项 图1 “添加过孔阵列”选项 点击【Add Stitching to Net...】选项后,会跳出一个窗口,让我们设置过孔阵列的参数信息,如下图2所示。 图2 过孔阵列参数设置 过孔阵列区域:勾选该选项框,即可绘制多边形区域; 过孔内径与焊盘直径:比如内径 【Hole Size】设为12mil,焊盘直径【Diameter】设为24mil; .

夜半少年的博客 2万+

获取当前最顶层的ViewController

前言在iOS中开放中,我们可能会遇到需要通过代码获取当前显示在屏幕最顶层的ViewController,比如我们需要在最顶层的ViewController上展示一个UIAlertController的时候。本文将介绍如何获取最顶层的ViewController

王天雨的博客 645

redhawk:Low Power Analysis

1.rush current与switch cell 在standby状态下为了控制leakage power我们选择power gating的设计方式,使用power switch cell关闭block/power domain的电源。 power switch的基本介绍可见: 低功耗设计-Power Switch power switch的table中有四种状态,对应block工作、待机和上电,下电。low power analysis主要分析上电的过程。 上电过程可以看做mos电容

m0_61544122的博客 3206

PyTorch 面试题及详细答案120题(54-70)-- 模型训练与评估

本文介绍了PyTorch模型训练的基本流程和核心概念。主要内容包括: 模型训练基本流程:通过代码示例展示了数据准备、模型定义、损失函数和优化器选择、训练循环(前向传播、反向传播、参数更新)的完整过程,并包含验证集评估的实现。 训练过程中的关键概念: Epoch:完整遍历一次训练集 Batch:将数据分成小批次 Iteration:一个Batch的参数更新过程 三者关系:1 Epoch = N/B Batch = N/B Iteration(N为样本数,B为batch_size) PyTorch数据加载机制:

大剑师兰特的GIS世界 489

java 感知调用者_得到方法调用者和java中的位操作符

获取方法的调用者如果你写了一个超级复杂超级大的项目,在项目后期调试修改的时候,突然想知道到底是哪些类调用了ImportantClass中的Important方法,你会怎么做呢?首先,你可能说:我用不到!如果这样的话,到这里你就可以return了。做法一:最常规有效的做法,使用IDE的全目录全文搜索方法名。当然这样是最有效快速的。但是如果有很多别的类中也定义了Important方法,你就会得到很多垃...

weixin_28694169的博客 322

UNet改进(19):基于残差注意力模块Residual Attention的高效分割网络设计

本文提出一种结合注意力机制的改进UNet网络,通过引入残差注意力模块(ResidualAttentionBlock)增强医学图像分割性能。该网络在传统UNet的U型结构基础上,创新性地将轻量级注意力机制与残差连接相结合,在编码器-解码器各层级实现特征重标定。改进后的网络具有三方面优势:通过注意力机制自适应聚焦关键特征区域,利用残差连接缓解梯度消失问题,采用模块化设计灵活配置注意力位置。

2501_91516851的博客 780

《深入探索位操作符:Python、Java与C语言的实现与应用》

深入探索位操作符:Python、Java与C语言的实现与应用

一名普通高校生 1457

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java位操作符_详解Java的位操作符

Java的位操作符用来操作整数基本数据类型中的单个“比特”(bit),即代进制位。而我们知道比特就是0和1,那么,位操作就是对这些数据进行基本的操作。如果基本类型是char、byte或者short类型的数值进行移位处理,那么会转化成int类型,再进行移位的处理Java的按位操作符按位操作符会对两个参数对应的位执行布尔代数运算,并最终生成一个结果。这个操作符有与(&)、非(~)、或(|)、异...

weixin_39923599的博客 481

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

java基础-操作符-按位操作符

java中的操作符:1.操作符接收一个或多个参数,并生成一个新值; 2.有些操作符可以改变操作数本身的值,这被称为副作用,例如自增,自减操作符,这类带有副作用的操作符 的最普遍的用途就是用来产生副作用。但是使用此类操作符生成的值,与没有副作用的操作符生成的值没有什么区别。 3....

weixin_41866473的博客 804

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java位操作符_java位操作符是什么

java位操作符是什么Java的算数操作符与其它大多数程序设计语言都是相同的,以下是小编为大家搜索整理的java位操作符是什么,希望能给大家带来帮助!更多精彩内容请持续关注我们应届毕业生考试网!二进制负数以它正值的'补码形式表达补码:反码+1等于补码比如:System.out.println(Integer.toBinaryString(-5));打印:1111 1111 1111 1111 11...

weixin_36278243的博客 93

JAVA学习-操作符.按位操作符

按位操作符用于对整数类型的数据进行位级别的操作。

weixin_69763181的博客 996

位操作符(bitwise operator)

位操作符允许我们操作一个基本数据类型中的整数型值的单个“比特(bit)”,即二进制位。 位操作符会对两个参数对应的位执行布尔代数运算,并最终生成一个结果。 位操作符来源于 C 语言面向底层的操作,那时我们经常需要直接操纵硬件,设置硬件寄存 器内的二进制位。Java 的设计初衷是嵌入电视机顶盒内,所以这种低级操作仍被保留了下来。 但是,我们可能不会过多地使用到位运算符。

u011282051的专栏 9501

Java按位操作符记录

介绍 按位操作符用来操作整数基本数据类型中的单个“比特”(bit),即二进制位。按位操作符 会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果。 按位操作符来源于C语言面向底层的操作,在这种操作中经常需要直接操纵硬件,设置硬件 寄存器内的二进制位。Java的设计初衷是嵌入电视机机顶盒内,所以这‘种面向底层的操作仍被 保留了下来。但是,人们可能不会过多地用到位操作符。 &操作符 如果...

kim 228

java中单&,单|的意思,按位操作符详述

从事java多年,日常多用&&,||这类逻辑操作符进行业务的编码使用,也是孤陋寡闻,偶然发现还有单&,单|等操作符的使用。查阅资料后得知其就是按位操作符,下面就是Java设计思想中对于这部分描述的原文。 按位操作符用来操作整数基本数据类型中的单个“比特”(bit),即二进制。按位操作符会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果。 按位操作符来源于C语言面向底层的操作,在这种操作中经常需要直接操纵硬件,设置硬件寄存器内的二进制位。Java设计的初衷是嵌入电视机机顶盒内,

httpmc2018的博客 1497

java 位操作符

位操作符有以下6种     & :按位“与”(AND);     | :按位“或”(OR);     ^ :按位“异或”(XOR);     ~ :“取反” (NOT);     》 :数据右移;   《 :数据左移;     1) 按位“与”运算     按位“与”运算符 & 的作用是对运算符两侧以二进制表达的操作数按位分别进行“与”运算,而这一运算是以数中相同的位(bit)

德瑞雨的专栏 734

java位操作符_Java位操作符(总结)

整理一下,以前写的关于Java位操作符的内容。原码:符号位用0表示正号,用1表示负号,数值一般用二进制形式表示。反码:机器数的反码可由原码得到。如果机器数是正数,则该机器数的反码与原码一样;如果机器数是负数,则该机器数的反码是对它的原码(符号位除外)各位取反而得到的。补码:机器数的补码可由原码得到。如果机器数是正数,则该机器数的补码与原码一样;如果机器数是负数,则该机器数的补码是对它的原码(除符号...

weixin_39645268的博客 139
上一篇: 正则表达式
下一篇: Array类对数组的操作
DeepNightTwo
博客等级 码龄21年 3粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值