Java Object有哪些公用方法?

protected Object clone()

创建并返回此对象的一个副本。


boolean equals(Object obj)

指示某个其他对象是否与此对象“相等”。


protected void finalize()

当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。


Class<? extends Object> getClass()

返回一个对象的运行时类。


int hashCode()

返回该对象的哈希码值。


void notify()

唤醒在此对象监视器上等待的单个线程。


void notifyAll()

唤醒在此对象监视器上等待的所有线程。


String toString()

返回该对象的字符串表示。


void wait()

导致当前的线程等待,直到其他线程调用此对象的notify()方法或notifyAll()方法。


void wait(long timeout)

导致当前的线程等待,直到其他线程调用此对象的notify()方法或notifyAll()方法,或者超过指定的时间量。


void wait(long timeout, int nanos)

导致当前的线程等待,直到其他线程调用此对象的notify()方法或notifyAll()方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量。


源码:

/** Copyright (c) 1994, 2012, Oracle and/or its affiliates. All rights reserved.* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.*********************/package java.lang;/*** Class {@code Object} is the root of the class hierarchy.* Every class has {@code Object} as a superclass. All objects,* including arrays, implement the methods of this class.** @author  unascribed* @see     java.lang.Class* @since   JDK1.0*/
public class Object {private static native void registerNatives();static {registerNatives();}/*** Returns the runtime class of this {@code Object}. The returned* {@code Class} object is the object that is locked by {@code* static synchronized} methods of the represented class.** <p><b>The actual result type is {@code Class<? extends |X|>}* where {@code |X|} is the erasure of the static type of the* expression on which {@code getClass} is called.</b> For* example, no cast is required in this code fragment:</p>** <p>* {@code Number n = 0;                             }<br>* {@code Class<? extends Number> c = n.getClass(); }* </p>** @return The {@code Class} object that represents the runtime*         class of this object.* @jls 15.8.2 Class Literals*/public final native Class<?> getClass();/*** Returns a hash code value for the object. This method is* supported for the benefit of hash tables such as those provided by* {@link java.util.HashMap}.* <p>* The general contract of {@code hashCode} is:* <ul>* <li>Whenever it is invoked on the same object more than once during*     an execution of a Java application, the {@code hashCode} method*     must consistently return the same integer, provided no information*     used in {@code equals} comparisons on the object is modified.*     This integer need not remain consistent from one execution of an*     application to another execution of the same application.* <li>If two objects are equal according to the {@code equals(Object)}*     method, then calling the {@code hashCode} method on each of*     the two objects must produce the same integer result.* <li>It is <em>not</em> required that if two objects are unequal*     according to the {@link java.lang.Object#equals(java.lang.Object)}*     method, then calling the {@code hashCode} method on each of the*     two objects must produce distinct integer results.  However, the*     programmer should be aware that producing distinct integer results*     for unequal objects may improve the performance of hash tables.* </ul>* <p>* As much as is reasonably practical, the hashCode method defined by* class {@code Object} does return distinct integers for distinct* objects. (This is typically implemented by converting the internal* address of the object into an integer, but this implementation* technique is not required by the* Java™ programming language.)** @return  a hash code value for this object.* @see     java.lang.Object#equals(java.lang.Object)* @see     java.lang.System#identityHashCode*/public native int hashCode();/*** Indicates whether some other object is "equal to" this one.* <p>* The {@code equals} method implements an equivalence relation* on non-null object references:* <ul>* <li>It is <i>reflexive</i>: for any non-null reference value*     {@code x}, {@code x.equals(x)} should return*     {@code true}.* <li>It is <i>symmetric</i>: for any non-null reference values*     {@code x} and {@code y}, {@code x.equals(y)}*     should return {@code true} if and only if*     {@code y.equals(x)} returns {@code true}.* <li>It is <i>transitive</i>: for any non-null reference values*     {@code x}, {@code y}, and {@code z}, if*     {@code x.equals(y)} returns {@code true} and*     {@code y.equals(z)} returns {@code true}, then*     {@code x.equals(z)} should return {@code true}.* <li>It is <i>consistent</i>: for any non-null reference values*     {@code x} and {@code y}, multiple invocations of*     {@code x.equals(y)} consistently return {@code true}*     or consistently return {@code false}, provided no*     information used in {@code equals} comparisons on the*     objects is modified.* <li>For any non-null reference value {@code x},*     {@code x.equals(null)} should return {@code false}.* </ul>* <p>* The {@code equals} method for class {@code Object} implements* the most discriminating possible equivalence relation on objects;* that is, for any non-null reference values {@code x} and* {@code y}, this method returns {@code true} if and only* if {@code x} and {@code y} refer to the same object* ({@code x == y} has the value {@code true}).* <p>* Note that it is generally necessary to override the {@code hashCode}* method whenever this method is overridden, so as to maintain the* general contract for the {@code hashCode} method, which states* that equal objects must have equal hash codes.** @param   obj   the reference object with which to compare.* @return  {@code true} if this object is the same as the obj*          argument; {@code false} otherwise.* @see     #hashCode()* @see     java.util.HashMap*/public boolean equals(Object obj) {return (this == obj);}/*** Creates and returns a copy of this object.  The precise meaning* of "copy" may depend on the class of the object. The general* intent is that, for any object {@code x}, the expression:* <blockquote>* <pre>* x.clone() != x</pre></blockquote>* will be true, and that the expression:* <blockquote>* <pre>* x.clone().getClass() == x.getClass()</pre></blockquote>* will be {@code true}, but these are not absolute requirements.* While it is typically the case that:* <blockquote>* <pre>* x.clone().equals(x)</pre></blockquote>* will be {@code true}, this is not an absolute requirement.* <p>* By convention, the returned object should be obtained by calling* {@code super.clone}.  If a class and all of its superclasses (except* {@code Object}) obey this convention, it will be the case that* {@code x.clone().getClass() == x.getClass()}.* <p>* By convention, the object returned by this method should be independent* of this object (which is being cloned).  To achieve this independence,* it may be necessary to modify one or more fields of the object returned* by {@code super.clone} before returning it.  Typically, this means* copying any mutable objects that comprise the internal "deep structure"* of the object being cloned and replacing the references to these* objects with references to the copies.  If a class contains only* primitive fields or references to immutable objects, then it is usually* the case that no fields in the object returned by {@code super.clone}* need to be modified.* <p>* The method {@code clone} for class {@code Object} performs a* specific cloning operation. First, if the class of this object does* not implement the interface {@code Cloneable}, then a* {@code CloneNotSupportedException} is thrown. Note that all arrays* are considered to implement the interface {@code Cloneable} and that* the return type of the {@code clone} method of an array type {@code T[]}* is {@code T[]} where T is any reference or primitive type.* Otherwise, this method creates a new instance of the class of this* object and initializes all its fields with exactly the contents of* the corresponding fields of this object, as if by assignment; the* contents of the fields are not themselves cloned. Thus, this method* performs a "shallow copy" of this object, not a "deep copy" operation.* <p>* The class {@code Object} does not itself implement the interface* {@code Cloneable}, so calling the {@code clone} method on an object* whose class is {@code Object} will result in throwing an* exception at run time.** @return     a clone of this instance.* @throws  CloneNotSupportedException  if the object's class does not*               support the {@code Cloneable} interface. Subclasses*               that override the {@code clone} method can also*               throw this exception to indicate that an instance cannot*               be cloned.* @see java.lang.Cloneable*/protected native Object clone() throws CloneNotSupportedException;/*** Returns a string representation of the object. In general, the* {@code toString} method returns a string that* "textually represents" this object. The result should* be a concise but informative representation that is easy for a* person to read.* It is recommended that all subclasses override this method.* <p>* The {@code toString} method for class {@code Object}* returns a string consisting of the name of the class of which the* object is an instance, the at-sign character `{@code @}', and* the unsigned hexadecimal representation of the hash code of the* object. In other words, this method returns a string equal to the* value of:* <blockquote>* <pre>* getClass().getName() + '@' + Integer.toHexString(hashCode())* </pre></blockquote>** @return  a string representation of the object.*/public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());}/*** Wakes up a single thread that is waiting on this object's* monitor. If any threads are waiting on this object, one of them* is chosen to be awakened. The choice is arbitrary and occurs at* the discretion of the implementation. A thread waits on an object's* monitor by calling one of the {@code wait} methods.* <p>* The awakened thread will not be able to proceed until the current* thread relinquishes the lock on this object. The awakened thread will* compete in the usual manner with any other threads that might be* actively competing to synchronize on this object; for example, the* awakened thread enjoys no reliable privilege or disadvantage in being* the next thread to lock this object.* <p>* This method should only be called by a thread that is the owner* of this object's monitor. A thread becomes the owner of the* object's monitor in one of three ways:* <ul>* <li>By executing a synchronized instance method of that object.* <li>By executing the body of a {@code synchronized} statement*     that synchronizes on the object.* <li>For objects of type {@code Class,} by executing a*     synchronized static method of that class.* </ul>* <p>* Only one thread at a time can own an object's monitor.** @throws  IllegalMonitorStateException  if the current thread is not*               the owner of this object's monitor.* @see        java.lang.Object#notifyAll()* @see        java.lang.Object#wait()*/public final native void notify();/*** Wakes up all threads that are waiting on this object's monitor. A* thread waits on an object's monitor by calling one of the* {@code wait} methods.* <p>* The awakened threads will not be able to proceed until the current* thread relinquishes the lock on this object. The awakened threads* will compete in the usual manner with any other threads that might* be actively competing to synchronize on this object; for example,* the awakened threads enjoy no reliable privilege or disadvantage in* being the next thread to lock this object.* <p>* This method should only be called by a thread that is the owner* of this object's monitor. See the {@code notify} method for a* description of the ways in which a thread can become the owner of* a monitor.** @throws  IllegalMonitorStateException  if the current thread is not*               the owner of this object's monitor.* @see        java.lang.Object#notify()* @see        java.lang.Object#wait()*/public final native void notifyAll();/*** Causes the current thread to wait until either another thread invokes the* {@link java.lang.Object#notify()} method or the* {@link java.lang.Object#notifyAll()} method for this object, or a* specified amount of time has elapsed.* <p>* The current thread must own this object's monitor.* <p>* This method causes the current thread (call it <var>T</var>) to* place itself in the wait set for this object and then to relinquish* any and all synchronization claims on this object. Thread <var>T</var>* becomes disabled for thread scheduling purposes and lies dormant* until one of four things happens:* <ul>* <li>Some other thread invokes the {@code notify} method for this* object and thread <var>T</var> happens to be arbitrarily chosen as* the thread to be awakened.* <li>Some other thread invokes the {@code notifyAll} method for this* object.* <li>Some other thread {@linkplain Thread#interrupt() interrupts}* thread <var>T</var>.* <li>The specified amount of real time has elapsed, more or less.  If* {@code timeout} is zero, however, then real time is not taken into* consideration and the thread simply waits until notified.* </ul>* The thread <var>T</var> is then removed from the wait set for this* object and re-enabled for thread scheduling. It then competes in the* usual manner with other threads for the right to synchronize on the* object; once it has gained control of the object, all its* synchronization claims on the object are restored to the status quo* ante - that is, to the situation as of the time that the {@code wait}* method was invoked. Thread <var>T</var> then returns from the* invocation of the {@code wait} method. Thus, on return from the* {@code wait} method, the synchronization state of the object and of* thread {@code T} is exactly as it was when the {@code wait} method* was invoked.* <p>* A thread can also wake up without being notified, interrupted, or* timing out, a so-called <i>spurious wakeup</i>.  While this will rarely* occur in practice, applications must guard against it by testing for* the condition that should have caused the thread to be awakened, and* continuing to wait if the condition is not satisfied.  In other words,* waits should always occur in loops, like this one:* <pre>*     synchronized (obj) {*         while (<condition does not hold>)*             obj.wait(timeout);*         ... // Perform action appropriate to condition*     }* </pre>* (For more information on this topic, see Section 3.2.3 in Doug Lea's* "Concurrent Programming in Java (Second Edition)" (Addison-Wesley,* 2000), or Item 50 in Joshua Bloch's "Effective Java Programming* Language Guide" (Addison-Wesley, 2001).** <p>If the current thread is {@linkplain java.lang.Thread#interrupt()* interrupted} by any thread before or while it is waiting, then an* {@code InterruptedException} is thrown.  This exception is not* thrown until the lock status of this object has been restored as* described above.** <p>* Note that the {@code wait} method, as it places the current thread* into the wait set for this object, unlocks only this object; any* other objects on which the current thread may be synchronized remain* locked while the thread waits.* <p>* This method should only be called by a thread that is the owner* of this object's monitor. See the {@code notify} method for a* description of the ways in which a thread can become the owner of* a monitor.** @param      timeout   the maximum time to wait in milliseconds.* @throws  IllegalArgumentException      if the value of timeout is*               negative.* @throws  IllegalMonitorStateException  if the current thread is not*               the owner of the object's monitor.* @throws  InterruptedException if any thread interrupted the*             current thread before or while the current thread*             was waiting for a notification.  The <i>interrupted*             status</i> of the current thread is cleared when*             this exception is thrown.* @see        java.lang.Object#notify()* @see        java.lang.Object#notifyAll()*/public final native void wait(long timeout) throws InterruptedException;/*** Causes the current thread to wait until another thread invokes the* {@link java.lang.Object#notify()} method or the* {@link java.lang.Object#notifyAll()} method for this object, or* some other thread interrupts the current thread, or a certain* amount of real time has elapsed.* <p>* This method is similar to the {@code wait} method of one* argument, but it allows finer control over the amount of time to* wait for a notification before giving up. The amount of real time,* measured in nanoseconds, is given by:* <blockquote>* <pre>* 1000000*timeout+nanos</pre></blockquote>* <p>* In all other respects, this method does the same thing as the* method {@link #wait(long)} of one argument. In particular,* {@code wait(0, 0)} means the same thing as {@code wait(0)}.* <p>* The current thread must own this object's monitor. The thread* releases ownership of this monitor and waits until either of the* following two conditions has occurred:* <ul>* <li>Another thread notifies threads waiting on this object's monitor*     to wake up either through a call to the {@code notify} method*     or the {@code notifyAll} method.* <li>The timeout period, specified by {@code timeout}*     milliseconds plus {@code nanos} nanoseconds arguments, has*     elapsed.* </ul>* <p>* The thread then waits until it can re-obtain ownership of the* monitor and resumes execution.* <p>* As in the one argument version, interrupts and spurious wakeups are* possible, and this method should always be used in a loop:* <pre>*     synchronized (obj) {*         while (<condition does not hold>)*             obj.wait(timeout, nanos);*         ... // Perform action appropriate to condition*     }* </pre>* This method should only be called by a thread that is the owner* of this object's monitor. See the {@code notify} method for a* description of the ways in which a thread can become the owner of* a monitor.** @param      timeout   the maximum time to wait in milliseconds.* @param      nanos      additional time, in nanoseconds range*                       0-999999.* @throws  IllegalArgumentException      if the value of timeout is*                      negative or the value of nanos is*                      not in the range 0-999999.* @throws  IllegalMonitorStateException  if the current thread is not*               the owner of this object's monitor.* @throws  InterruptedException if any thread interrupted the*             current thread before or while the current thread*             was waiting for a notification.  The <i>interrupted*             status</i> of the current thread is cleared when*             this exception is thrown.*/public final void wait(long timeout, int nanos) throws InterruptedException {if (timeout < 0) {throw new IllegalArgumentException("timeout value is negative");}if (nanos < 0 || nanos > 999999) {throw new IllegalArgumentException("nanosecond timeout value out of range");}if (nanos > 0) {timeout++;}wait(timeout);}/*** Causes the current thread to wait until another thread invokes the* {@link java.lang.Object#notify()} method or the* {@link java.lang.Object#notifyAll()} method for this object.* In other words, this method behaves exactly as if it simply* performs the call {@code wait(0)}.* <p>* The current thread must own this object's monitor. The thread* releases ownership of this monitor and waits until another thread* notifies threads waiting on this object's monitor to wake up* either through a call to the {@code notify} method or the* {@code notifyAll} method. The thread then waits until it can* re-obtain ownership of the monitor and resumes execution.* <p>* As in the one argument version, interrupts and spurious wakeups are* possible, and this method should always be used in a loop:* <pre>*     synchronized (obj) {*         while (<condition does not hold>)*             obj.wait();*         ... // Perform action appropriate to condition*     }* </pre>* This method should only be called by a thread that is the owner* of this object's monitor. See the {@code notify} method for a* description of the ways in which a thread can become the owner of* a monitor.** @throws  IllegalMonitorStateException  if the current thread is not*               the owner of the object's monitor.* @throws  InterruptedException if any thread interrupted the*             current thread before or while the current thread*             was waiting for a notification.  The <i>interrupted*             status</i> of the current thread is cleared when*             this exception is thrown.* @see        java.lang.Object#notify()* @see        java.lang.Object#notifyAll()*/public final void wait() throws InterruptedException {wait(0);}/*** Called by the garbage collector on an object when garbage collection* determines that there are no more references to the object.* A subclass overrides the {@code finalize} method to dispose of* system resources or to perform other cleanup.* <p>* The general contract of {@code finalize} is that it is invoked* if and when the Java™ virtual* machine has determined that there is no longer any* means by which this object can be accessed by any thread that has* not yet died, except as a result of an action taken by the* finalization of some other object or class which is ready to be* finalized. The {@code finalize} method may take any action, including* making this object available again to other threads; the usual purpose* of {@code finalize}, however, is to perform cleanup actions before* the object is irrevocably discarded. For example, the finalize method* for an object that represents an input/output connection might perform* explicit I/O transactions to break the connection before the object is* permanently discarded.* <p>* The {@code finalize} method of class {@code Object} performs no* special action; it simply returns normally. Subclasses of* {@code Object} may override this definition.* <p>* The Java programming language does not guarantee which thread will* invoke the {@code finalize} method for any given object. It is* guaranteed, however, that the thread that invokes finalize will not* be holding any user-visible synchronization locks when finalize is* invoked. If an uncaught exception is thrown by the finalize method,* the exception is ignored and finalization of that object terminates.* <p>* After the {@code finalize} method has been invoked for an object, no* further action is taken until the Java virtual machine has again* determined that there is no longer any means by which this object can* be accessed by any thread that has not yet died, including possible* actions by other objects or classes which are ready to be finalized,* at which point the object may be discarded.* <p>* The {@code finalize} method is never invoked more than once by a Java* virtual machine for any given object.* <p>* Any exception thrown by the {@code finalize} method causes* the finalization of this object to be halted, but is otherwise* ignored.** @throws Throwable the {@code Exception} raised by this method* @see java.lang.ref.WeakReference* @see java.lang.ref.PhantomReference* @jls 12.6 Finalization of Class Instances*/protected void finalize() throws Throwable { }
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【翻译】.NET Core3.1发布

.NET Core3.1发布我们很高兴宣布.NET Core 3.1的发布。实际上&#xff0c;这只是对我们两个多月前发布的.NET Core 3.0的一小部分修复和完善。最重要的是.NET Core 3.1是长期支持&#xff08;LTS&#xff09;版本&#xff0c;并且将支持三年。和过去一样&#xff0c;我们希望花…

JVM(1)——JVM内存分区

一、JVM简介 JVM&#xff0c;即Java虚拟机&#xff08;Java Virtual Machine&#xff09;&#xff0c;一种能够运行Java bytecode的虚拟机&#xff0c;是Java实现跨平台的基础。 引入Java语言虚拟机后&#xff0c;Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚…

使用Azure Pipelines从GitHub发布NuGet包

[本文目录]ps: 阅读本文大概需要20分钟欢迎大家点击上方公众号链接关注我&#xff0c;了解新西兰码农生活什么是 YAML?name/value 名称/值collections 集合multiple data types 复合数据类型comments 注释Pipelines 的 YAML 结构在 Azure DevOps Pipelines 中创建第一个任务为…

JVM(2)——JVM类加载机制

一、JVM类加载机制简介 虚拟机把描述类的数据从Class文件加载到内存&#xff0c;并对数据进行校验、转换解析和初始化&#xff0c;最终形成可以被虚拟机直接使用的Java类型&#xff0c;这就是虚拟机的类加载机制。 在Java语言里面&#xff0c;类型的加载和连接过程都是在程序运…

PYPL 12月榜单发布,编程语言、IDE与数据库市场如何?

PYPL&#xff08;PopularitY of Programming Language&#xff0c;编程语言流行指数&#xff09;12 月份的榜单已经发布了。PYPL 是非常流行的参考指标&#xff0c;其榜单数据的排名均是根据榜单对象在 Google 上相关的搜索频率进行统计排名&#xff0c;原始数据来自 Google Tr…

JVM(3)——JVM类加载器

一、类加载器简介 虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现&#xff0c;以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块被称为“类加载器”。 类加载器虽然只用于实现类的…

.NET Core应用框架AA介绍(二)

AA的开源地址https://github.com/ChengLab/AAFrameWork AA框架是一个基础应用框架&#xff0c;是建立在众多大家熟知的流行工具之上并与之集成。比如&#xff1a;ASP.NET Core、Automapper、Dapper、Dapper-FluentMap、RabbitMQ、Redis、MassTransit、Log4net等等大家可以很方便…

JVM(4)——对象访问

一、对象创建过程在Java语言中&#xff0c;对象是如何访问的呢&#xff1f;对象访问在Java语言中无处不在&#xff0c;是最普通的程序行为&#xff0c;但即使是最简单的访问&#xff0c;也会涉及Java虚拟机栈、Java堆区、方法区。 对于下面这行代码&#xff0c; Object obj ne…

Java BIO、NIO、AIO的区别

一、基础概念 同步&#xff1a;是指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪。 异步&#xff1a;是指用户进程触发IO操作以后便开始做自己的事情&#xff0c;而当IO操作已经完成的时候会得到IO完成的通知&#xff08;异步的特点就是通知&#xff09;。&…

鹅厂后台开发工程师的工作日常

写在前面 &#xff1a;本故事纯属虚构&#xff0c;如有雷同&#xff0c;不负责任。为了整理 Linux 开发和日常使用的常用命令&#xff0c;想了好几天才串了这么个故事。虽然有点牵强&#xff0c;但是内容还是挺干的~欢迎大家点评。在很久很久以前&#xff0c;鹅厂开发类工程师职…

.NET Core开发的iNeuOS工业互联网平台,发布 iNeuDA 数据分析展示组件,快捷开发图形报表和数据大屏...

经过一段时间的努力&#xff0c;iNeuDA产品组件已经开发和测试完成&#xff0c;现在正式上线。现在iNeuOS工业互联网操作系统的技术体系和产品体系更佳完善&#xff0c;为中小企业提供更佳全面解决方案。如下图&#xff1a;iNeuDA 一站式大数据分析平台作为国内领先的新一代自助…

asp.net core 从 3.0 到 3.1

asp.net core 从 3.0 到 3.1Intro今天 .net core 3.1 正式发布了&#xff0c;.net core 3.1 正式版已发布&#xff0c;3.1 主要是对 3.0 的 bug 修复&#xff0c;以及一些小优化&#xff0c;而且作为 LTS 版本&#xff0c;建议大家升级。值得一提的是.net core 2.2 这个月就要寿…

Mac(OS X)必备软件

常有人说Mac上面软件少&#xff0c;没有Windows上面软件丰富&#xff0c;其实除了少数特定基于Windows平台的软件除外&#xff0c;其他软件都能在Mac上找到其相应版本或其他替代软件。本篇就Mac上常用软件做一下总结。 第一类&#xff1a;聊天/通讯 1、QQ QQ for Mac保留和QQ一…

身边的设计模式(三):抽象工厂 与 依赖注入

上篇文章&#xff0c;我们说到了简单工厂和工厂方法&#xff0c;如果没看过的&#xff0c;请先看上篇&#xff0c;不然的话&#xff0c;可能有些吃力&#xff0c;或者直接点击阅读原文&#xff0c;查看我博客园的对应详细版的文章。大家学到了这里&#xff0c;我建议自己可以练…

Java基础知识——Java集合详解

数组是Java很常见的一种数据结构&#xff0c;能够快速地进行存取。但是当遇到下面几种情况&#xff1a; ①我们需要存储的数据集数目是不定的 ②我们希望数据集能够自动排序 ③我们需要以键值对的方式存储数据 … 数组就不能满足我们的需求了。这时候&#xff0c;我们就需要使用…

边缘计算与云计算的不同,这篇说明白了!

术语“边缘计算”是指一种分布式计算&#xff0c;是将数据存储和计算带到需要它的站点或设备附近&#xff0c;这种分配设置消除了滞后时间并节省了带宽。与“物联网”相比&#xff0c;这是一种针对云环境的优化方法。它在数据源附近&#xff08;即网络的“边缘”&#xff09;处…

经典排序算法(12)——总结

一、排序算法简介 排序算法&#xff08;Sorting algorithm&#xff09;是一种能将一串数据&#xff0c;依照特定排序方式&#xff08;依照其中的某个或某些关键字的大小&#xff09;进行排列的一种算法。 常见的排序算法有&#xff1a;交换排序&#xff08;冒泡排序、快速排序&…

在Asp.Net Core MVC 开发过程中遇到的问题总结

1. Q: Razor视图中怎么添加全局模型验证消息A&#xff1a;使用ModelOnly<div asp-validation-summary"ModelOnly" class"text-danger"></div>2.Q&#xff1a;树形表格&#xff0c;使用的是bootstrap-tablejquery.treegridA&#xff1a;效果参考…

为什么子线程中不能直接更新UI

点击上方“dotNET全栈开发”&#xff0c;“设为星标”加“星标★”&#xff0c;每天11.50&#xff0c;好文必达全文约4000字&#xff0c;预计阅读时间8分钟当初有同事就碰到类似的问题&#xff0c;于是就总结了一些&#xff0c;那时写这篇文章是我还在第一家公司。今天有人提到…