得到方法调用者和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中的位运算魔法吗? 定义:按位操作符用于对整数的二进制表示进行位级操作,返回新的整数值。常见操作符按位与按位或按位异或按位非左移无符号右移>>> 阅读详情

相关推荐

别再瞎猜了!三角形接法PMSM的相电流到底怎么算?实测线电流转换公式与避坑指南

本文深入解析三角形接法永磁同步电机(PMSM)在FOC控制中的相电流计算误区,提供实测线电流转换公式与避坑指南。针对矢量控制系统中常见的√3换算错误,详细阐述正确的电流重构算法、硬件采样要点及软件优化技巧,帮助工程师实现精确控制并避免电机损坏。

weixin_30367873的博客 467

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

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

u011159607的博客 5632

matlab电偶极子源码,电偶极子的MATLAB场模拟

电偶极子周围电场电势分布的MATLAB三维模拟Matlab可以用于模拟四维场的效果,本文以电偶极子的电场和电势场为例展示MATLAB在该方面领域的应用。摘要电偶极子由一个正电荷和一个负电荷组成,其电场和空间电势分布与单电荷相比具有一些重要的特性。本文将给出电场和电势场的近似表达式。这两个量的精确表达式是复杂的,不太常用,因此 MATLAB 被采用来操作精确值和绘制三维分布的远区域, 近区域和一侧区...

weixin_35135480的博客 3150

Java 获得方法调用者名称

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

拼命工作,好好玩 795

SAP数据导入工具(LSMW) 超级详细教程(批量导入内部订单)

用户提了个需求,让我批量导入内部订单几百个内部订单。我本打算用写段ABAP 代码来调用 BAPI (BAPI_INTERNALORDER_CREATE)就可以了。但想到我很久没有用过LSMW 了,都快要忘记了。于是我采用LSMW的方式,完成了任务。并把过程记录下来,形成教程方便我以后回头查看,分享出来也希望对大家有帮助。

IT小职员 2万+

FOC观测器之龙伯格观测器

状态观测器: 理论依据:根据控制理论,如果一个系统能够完全通过其检测到的输出值来重构其系统状态,则认为该系统是可观测的。其作用于无传感器转子的位置和速度的检测反馈,再作用到PARK逆变换和转矩磁链控制上。 Luenberger观察器原理图: Luenberger观测器的离散化: (其观测器的闭环参数为经验验证值) 引入估测电流( iα,iβ )的反馈值并离散化(T 为采样时间),可得...

ShawnChan的博客 2万+

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

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

weixin_34129145的博客 2202

Qt自带绘图与GDI+绘图方式比较_gdi+实时绘制qt(2)

2、GDI+是Windows操作系统中的图形设备接口,它提供了一套用于绘制图形的API,包括了图形渲染、图形变换、图形剪切、图形填充等功能,使开发者可以快速地开发出各种类型的图形应用程序。1、Qt是一个跨平台的C++应用程序框架,它提供了一套用于GUI编程的类库,包括了绘图、网络、XML、数据库、多线程等模块,使开发者可以快速地开发出高质量的跨平台应用程序。Qt提供了一套用于绘图的类库,包括了QPainter、QPen、QBrush等类,使开发者可以快速地进行图形绘制。

qq_17136213的博客 917

获取当前最顶层的ViewController

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

王天雨的博客 645

从 Classic ABAP 到 ABAP Cloud:一份面向开发者的 SAP 学习路线图与实战指南

ABAP技术演进路线:从语法到架构思维 本文系统梳理了现代ABAP开发者的能力成长路径。在S/4HANA与云时代,ABAP已从传统过程式语言转变为支持面向对象、测试驱动和云原生开发的现代技术栈。学习路线应围绕四大核心维度展开:1) 语言基础(ABAP OO/Modern ABAP);2) 工程化实践(ABAP Unit/ATC/Clean ABAP);3) 数据建模(CDS/AMDP);4) 服务化架构(Gateway/OData/Fiori)。文章强调以交付形态倒推技术栈,通过真实案例展示了如何将零散技术

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 361

华为面试手撕真题【最长不重复子串】

给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。

MISAYAONE的博客 1万+

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

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

weixin_28694169的博客 322

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

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

一名普通高校生 1457

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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

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

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

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

weixin_39923599的博客 481

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

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

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

weixin_41866473的博客 804

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、付费专栏及课程。

余额充值