Java's Interface自己的一点理解

CS1237卡尔曼滤波实战:如何用24位ADC实现电子秤级精度? 本文详细介绍了如何利用CS1237 24位ADC芯片结合卡尔曼滤波算法实现电子秤级精度测量。通过解析CS1237硬件特性、卡尔曼滤波原理及STM32驱动优化,提供了一套完整的解决方案,包括多通道支持、驱动代码实现和性能调优技巧,适用于工业测量和嵌入式开发领域。 阅读详情

此文章发表于前博客

 

Interface是程序设计的一种技术,在Java程序设计被大量使用。在Spring中,面向抽象编程的理念也是出自于Interface。

由于Java是完全面向对象的语言,所以学习Interface需要从类说起。

1) Java中如何使用Interface这种独特的类

Interface是一个类(Interface在实际的文件中也是以.java的形式存在的),但是与平时设计的类有所不同。Interface的所有方法均没有实现,直接看来,Interface很接近Abstract Class。

Java不允许一个子类继承多个父类(除非这个子类是Interface,J。Interface是静态的代码,不存在动态调用问题)。所以如果一个子类在继承了父类的所有方法之后仍然需要实现某些父类所没有的功能,要么子类可以自己构造自己的方法;但是如果已经有了一个Interface,子类可以在继承父类的情况下,实现这个接口。在C++等语言中,如果有另一个类有上述Interface的功能方法(即函数),那么子类可以即继承第一个父类,还可以继承第二个甚至第三个父类。

所以Java中用Interface的初衷,是因为曲线地实现多重继承功能。

2) 为什么Java不允许多重继承

       直观地说,如果子类son继承了父类father又继承了父类father2,如果father和father2都有一个方法me(),那么子类中类似super.me()应该是指向哪个方法?

       类似的多重继承一般称为钻石型继承。多重继承,至少在Java语法里,是会引起不确定因素的。Java通过接口的方式曲线实现了多重继承而不担心出现上面的错误,是因为Interface不可以实例化,也就不存在调用的错误可能性了。

       Java的子类的构造方法里,最首先的一句是父类的构造方法(如果有继承的话,其实Java里除了Object,其他所有类都有子类的身份)。所以,子类与父类的关系是“is-a”。因为父类伴随着子类,所以子类有所谓的“动态调用”的能力,因为子类存在的时候,父类也是存在的。

3) 为什么父类不把子类需要的所有方法都包含了

       或者你需要两个子类son和daughter,它们都继承自father,那么father如果包含了son的方法,则daughter也会拥有这样子的方法。这是不符合现实理念的。

       我们也可以把son所需要的father没有的方法写进son类里面,但是如果nephew类也有这些方法的实现,使用Interface就会方便很多。如果一个类动辄几千行,那么至少在查找代码上面这种机制会方便很多。

       而且如果在维护或者更新一个已经运作成功的系统,父类往往在设计的时候没有考虑后继的功能,而一个运作成功的代码,能够不去改动内部当然是好事。

4) Interface和抽象类有什么不一样

      这里讨论的不是继承的时候,用与不用接口;而是讨论,单纯继承去实现派生类的量产和单纯使用接口去实现派生类的量产的区别。

      比如:ClassRedDoor() implements Door&&Class RedDoor() extends Door

      Door即可以作为一个抽象类,也可以是一个接口。

       基本上这两者可以通用。但是理念是很不一样的。如果我们开发的程序需要后面的人研究再开发,是不可以混用这两种机制的。

       比如形状这种抽象的东西,定义了形状所拥有的基本的元素,三角形和四边形可以通过继承形状而实现。但是三角形可以判断是否是直角三角形,我们却不能要求一个形状去判断自己是否拥有直角。这是抽象类的本质,只定义了最本质的东西。

       而Interface是一些方法的集合。如上文所述。

       如果一个门有报警的功能,我们不使用Interface,而考虑在抽象类内定义Alert的抽象方法(你知道,为了重复使用代码,一般把代码写在父类而不是每个派生类自己写出来)。那么应该像这个样子:

       Abstract classDoor{…..alert();}这样就有种误会,这个门,到底是一个门,还是一个报警的门呢?是不是所有的门都有报警功能呢?(在(3)已经讨论过了)

       而如果单纯使用接口类似Interface Door{close();open();alert();}所有的门都可以close和open,那么如果我需要去产生一个类只可以close和open而不可以报警的呢?

       啰嗦了一大堆,其实意思就是,糅合这两种机制,会使得代码更加合理。我们可以让所有的门,不管什么门,都派生自门这一个类,但是部分门拥有的功能,我们可以用接口去概括。这两种机制一起使用,使得编程的灵活性大大增加了。

      备注:仅作为自己的总结。肯定有所错误请见谅。

      增加:抽象类可以有非抽象的方法

YOLOv5_DeepSORT_Pytorch训练自己的多目标跟踪模型 1 准备 环境配置:https://blog.youkuaiyun.com/weixin_50008473/article/details/115250986?spm=1001.2014.3001.5501 YOLOv5_DeepSORT_Pytorch代码地址: https://github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch DeepSORT论文:https://arxiv.org/pdf/1703.07402.pdf 2 训练目标检测模型 训练自己的目标检测模 阅读详情

相关推荐

超过4.2万个AOI(地理围栏),深圳市2025年2月15日更新的全类别AOI,矢量图层(全国22个超大特大城市AOI更新系列)

超过4.2万个AOI(地理围栏),深圳市2025年2月15日更新的全类别AOI,矢量图层(全国22个超大特大城市AOI更新系列)

1071

Java类class isInterface()方法及示例

类的类isInterface()方法 (Class class isInterface() method) isInterface() method is available in java.lang package. isInterface()方法在java.lang包中可用。 isInterface() method is used to check whether this Class o...

1181

基于STM32和K210的自动驾驶小车设计

自动驾驶技术正在迅速发展,成为了汽车行业和智能交通领域的热点之一。随着科技的发展,STM32和K210这两款芯片为自动驾驶小车提供了优秀的硬件支持。本文我们将学习如何使用STM32和K210打造一个简单的自动驾驶小车。提示:以下是本篇文章正文内容,下面案例可供参考通过这篇文章,掌握了如何使用STM32和K210构建一个简单的自动驾驶小车。通过了解基本的电路设计,并编写了STM32和K210的代码。通过这个例子,可以更好地理解如何在嵌入式系统中使用STM32和K210,以及如何实现自动驾驶小车的简单功能。

Kyle_Chan_zMH的博客 2219

Java.lang.Class类 isInterface()方法有什么功能呢?

Java.lang.Class类 isInterface()方法的功能简介说明

qq_25073223的博客 598

SpotBugs实战:10大类Bug检测规则详解与代码优化实例(附避坑清单)

本文深入解析SpotBugs在Java开发中的实战应用,详细讲解10大类Bug检测规则与代码优化实例,包括NPE防御、多线程安全、性能优化等关键问题。通过具体代码示例和避坑清单,帮助开发者提升代码质量,有效集成到CI/CD流程中。

weixin_42665255的博客 196

睿思综述智能体:100篇高质量文献一键生成万字长文,还能联网PubMed,科研效率拉满!

对一个主题进行文献综述,是日常科研人绕不过去的工作,无论是写论文前言,综述论文,或者基金申请书的立项依据,需要根据主题,从海量文献中提取相关信息,梳理出清晰的逻辑线,再组织成流畅的文字。4 一键生成万字全文:大纲确认后,它会基于对所有论文的深度理解,逐个章节进行详细撰写,最终生成一篇逻辑连贯、内容翔实、引用规范的万字综述长文,并直接保存为Word(.docx)文件。3 智能撰写大纲:你可以提供自己的大纲,也可以让它根据所有文献内容,智能生成一个逻辑清晰的综述大纲,并支持你在此基础上修改。

dinaxuejie的博客 821

java.lang.inter,详解java.lang.reflect.Modifier.isInterface()方法

详解java.lang.reflect.Modifier.isInterface()方法java.lang.reflect.Modifier.isInterface(int mod)方法判断如果给定mod参数包含final修饰符,则返回true,否则返回false。声明以下是java.lang.reflect.Modifier.isInterface()方法的声明。public static bo...

weixin_42515448的博客 226

运行stable-diffusion出现的问题

解决:即用 https://github.com/CompVis/taming-transformers/blob/master/taming/modules/vqvae/quantize.py 新文件,替换错误提示文件中的全部内容即可。5.新建文件夹 CompVis/stable-diffusion-safety-checker/将下载的四个文件放入 解决!后面还会遇到'openai/clip-vit-large-patch14离线下载的问题,同样步骤解决。解决:下载后离线,步骤如下。

weixin_52121118的博客 2348

java class interface_Java Class isInterface()用法及代码示例

java.lang.Class类的isInterface()方法用于检查此Class是否是接口。如果此类是接口,则该方法返回true。否则返回false。用法:public boolean isInterface()参数:此方法不接受任何参数。返回值:如果此Class是接口,则此方法返回true。否则返回false。下面的程序演示了isInterface()方法。示例1:// Java progr...

weixin_42389766的博客 509

RAP BDL 里的 field ( readonly ) 到底控制了什么?——从语法到运行时的全景解析

RAP行为定义中的只读字段控制 摘要:该代码片段展示的是RAP(ABAP RESTful Application Programming)行为定义语言(BDL)中的字段控制语法,用于声明业务对象中需由框架自动维护的只读字段。field ( readonly )语句将订单ID和审计字段(CreatedBy/CreatedAt等)标记为只读,确保这些字段在更新阶段不可修改。在managed场景下,RAP框架会自动处理这些行政性数据的写入:创建时填充创建信息,更新时刷新变更记录,并利用LocalLastChang

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

电子图像增稳(EIS)原理详解——从抖动补偿到代码实现

电子图像增稳(EIS)是一种通过软件算法实现视频稳定的技术,广泛应用于GoPro、手机和无人机等设备。与光学防抖(OIS)和机械云台不同,EIS通过图像裁切和运动补偿来消除抖动,具有成本低、补偿范围大的优点,但会损失10-30%的画幅。其核心流程包括运动检测、抖动分离、运动补偿和图像裁切四个步骤。相比硬件方案,纯软件实现的EIS更适合消费级电子产品,已成为移动设备视频拍摄的重要技术。

电脑管家 409

Java Interface用法

Java interface有多种用法,最常见的就是通过interface传递数据 第一种 public interface IData { void value(String str); }public class ClassA { public void sendData(IData idata){ idata.value("This is ClassA'valu

danity 3188

【Flink】FLink session yarn kerberos认证报错 PortUnreachableException: ICMP Port Unreachable

本篇博客是在上一篇博客:【Flink】FLink session yarn kerberos认证报错 KrbException: Cannot locate default realm还没找到原因的时候做的一次尝试。因为项目需要,我们需要对接华为认证的yarn集群,运行flink任务,我们的任务分为两种,yarn pre-job模式和flink session模式。我们在配置文件中配置如下# kerberos认证需要的东西提交任务的脚本如下。

九师兄 1267

CS61B - Lec 11 - Libraries

Lec 11 - LibrariesJava LibrariesInterfaces and Abstract ClassesPackages 这一章好起来了(可能因为马上Midterm了老师讲少了一点) Java Libraries 回忆一下目前我们学了什么。 Java基础入门 引用与迭代 建立IntList 建立SLList 建立AList 建立DequeList Testing Inter...

fourier_transformer的博客 498

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

深度学习工具包 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千百问_05面向对象(006)_is-a,has-a,like-a是什么

点击进入_很多其它_Java千百问 1、is-a,has-a,like-a是什么 在面向对象设计的领域里,有若干种设计思路,主要有例如以下三种: is-a、has-a、like-a java中在类、接口、抽象类中有非常多体现。 了解java看这里:什么是Java 了解类和对象看这里:类、对象究竟有什么秘密 了解接口和抽象类看这里:接口和抽象类有什么差别 ...

weixin_33963189的博客 372

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

原来这就是Java中的接口(Interface),小白也搞懂了 ①

为什么 我们知道,Java中只支持单继承的关系,当满足A is a B的时候,我们就可以限定,子类必须具有父类的通用特征。 什么?有的小萌新伙伴不知道什么事子类和父类,那我们可以这样理解,父类就是爸爸,子类就是儿子。当满足你是你爸的儿子后,那你就必须继承你爹的特性(基因????)可以理解了吧。这就是继承。 此时爱思考的小伙伴就会想问题了。 如何解决一个类型中需要兼容多种类型特征的问题呢? 以及多个不同类型具有相同特征的问题呢? 怎么理解 为了更好理解,我们创建一个场景 描述手机发展史

Slovenia_groot的博客 488

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

JAVA中interface接口的使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、interface是什么?二、关于interface的使用1.接口的格式代码例子12.用登录方法具体实现代码例子2:抽象类和接口之间的区别总结 前言 随着面向对象思想的发展,类的使用越来越方便,但是有时候类却不能实现对于方法的抽象,只能对于自己的属性的抽象。(所谓抽象简单理解为没有具体的实现)于是我们便在java语言中引出了一种接口的方式(interface)。(以下内容基于JAVA语言) 提示:以下是本篇文章正文内容.

ironjam的博客 1万+

Java里的接口的interface 简单介绍.

这是写给我自己和我这种初学者看的. Java作为1个强面向对象语言,  基本上所有东西(成员和方法)都是写在class(类)里面的. 但是也存在一种与class平行的东西, 它就是interface , 中文译成接口.  本屌能力有限在这里这能写写Interface的一些语法规则与存在意义. 一, 什么是接口 Java里的接口, 就是抽象方法和常量值的集合.

nvd11的专栏 1万+

Java中的接口(interface)

文章目录一、接口(interface)是什么?二、接口的定义三、接口的特点四、接口程序示例1.省略关键字2.默认关键字3.示例三4.示例四5.示例五总结 一、接口(interface)是什么? 1)一方面,有时必须从几个类中派生出一个子类,继承它们所有的属性和方法。但是,Java不支持多重继承。有了接口,就可以得到多重继承的效果。 2)另一方面,有时必须从几个类中抽取出一些共同的行为特征,而它们之间又没有is-a的关系,仅仅是具有相同的行为特征而已。例如:鼠标、键盘、打印机、扫描仪、摄像头、充电器、MP3

qq_39816406的博客 8617

java中接口(interface)详解

接口(interface) 有时必须从几个类中派生出一个子类,继承它们所有的属性和方法。但是,Java不支持多重继承。有了接口,就可以得到多重继承的效果。 接口(interface)是抽象方法和常量值的定义的集合。 从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。 接口定义举例 public interface Runner int id =...

sun_shine56的博客 20万+

StringWriter/PrintWriter在Java输出异常信息中的作用

闲来无事,看看JUnit的源代码。刚刚开始看就发现一段有趣的代码: public String trace() { StringWriter stringWriter = new StringWriter(); PrintWriter writer = new PrintWriter(stringWriter); thrownException()

1ouis的专栏 3831

本地Spring容器关闭的时机

一、背景引入 近期开发Spring应用的时候,基本的用户功能逻辑都通过SpringMVC框架铺垫好,通过暴露给前端的API进行功能的实现。但是在设计运营后台部分的时候,由于时间有限,采用了使用Shell脚本调用Java的方式,然后产生了一个让我头痛一阵子的问题:通过Shell调用Java功能,由于需要使用到mybatis操作数据库,mybatis与dao层强绑定,故被Shell脚本调用的Java

1ouis的专栏 3363

Java中equal和"=="的区别

注:本文参考自:http://www.cnblogs.com/zhxhdean/archive/2011/03/25/1995431.html 我在复习Java EE的时候写了一个非常简单的Servlet,只要从前台获取用户名和密码,在Servlet进行比较后得到验证结果并输出到前端。 其中servlet的代码一部分为: if(userName == "caixiaorang" && pas

1ouis的专栏 2745

LongCache机制与Long等值比较

一、背景引入 近期在开发一个项目的后台时,当项目上线后出现了一个测试环境没有出现的问题:部分用户在提交信息时提示了该信息不属于当前用户。 经过对代码的review,发现了出错的代码的开发逻辑是,在用户提交信息之后,将信息更新入数据库之前,首先判断当前的信息是否属于当前的用户;通过信息.account_id == 用户.id进行了判断,两个id都是Long类型。直觉是使用==号出错的问题,于是将

1ouis的专栏 2420

final关键字与Java编译器的小坑

一、背景引入 近期在开发一个项目的后台时,使用到了邮件发送的服务。由于考虑变化的可能性不大,将邮箱地址和发信服务器使用final static修饰符定义在一个util类中,并在发信代码中调用(而没有做成配置文件,其实后来想想,还是需要做成配置文件会更稳妥些),后面升级到服务器时发现邮箱地址需要改动,于是修改了util类中的变量内容,并将编译之后的util类的class文件覆盖到线上,结果发信地址

1ouis的专栏 1808

小谈Java的初始化问题

同学发给我一个代码如下: package hello; public class hello { public static void main(String[] args) { int i, j; int sum; for (i = 1; i <= 1000; i++) { for (j = 1, sum = 0; j <= i / 2; j++) { if (i

1ouis的专栏 1535
上一篇: Java内部类笔记
下一篇: IBM实习生笔试题目(6)
louis9212
博客等级 码龄14年 8粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值