• 关于

    static方法

    的搜索结果

回答

sstatic表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象市,不生成static变量的副本,而是类的所有实例共享同一个static变量。static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用--废话),但是不能在其他类中通过类名来直接引用,这一点很重要。实际上你需要搞明白,private是访问权限限定,static表示不要实例化就可以使用,这样就容易理解多了。static前面加上其它访问权限关键字的效果也以此类推。

蛮大人123 2019-12-02 02:07:54 0 浏览量 回答数 0

问题

使用static声明的方法可以调用非static声明的方法。

游客pklijor6gytpx 2019-12-01 22:02:27 2 浏览量 回答数 1

问题

非static声明的方法可以调用static声明的属性或方法。

游客pklijor6gytpx 2019-12-01 22:02:27 2 浏览量 回答数 1

阿里云高校特惠,助力学生创业梦!0元体验,快速入门云计算!

学生动手场景应用,快速了解并掌握云服务器的各种新奇玩法!

回答

final: 1、final变量即为常量,只能赋值一次。 2、final方法不能被子类重写。 3、final类不能被继承。 static: 1、static变量:对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存, 在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。 2、static代码块 static代码块是类加载时,初始化自动执行的。 3、static方法 static方法可以直接通过类名调用,任何的实例也都可以调用,因此static方法中不能用this和super关键字, 不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。

剑曼红尘 2020-04-10 12:54:47 0 浏览量 回答数 0

问题

java中static变量和static方法以及普通方法在哪个内存中存储?

蛮大人123 2019-12-01 19:55:20 1383 浏览量 回答数 1

问题

Java 堆栈有关的问题

蛮大人123 2019-12-01 20:03:52 783 浏览量 回答数 1

问题

JAVA基础中的关键字

montos 2020-05-18 21:11:29 3 浏览量 回答数 1

问题

CGLIB无法拦截静态方法问题

蛮大人123 2019-12-01 20:02:33 2445 浏览量 回答数 2

问题

static变量内存释放问题

a123456678 2019-12-01 20:27:40 868 浏览量 回答数 1

回答

static的主要意义是在于创建独立于具体对象的域变量或者方法。以致于即使没有创建对象,也能使用属性和调用方法! static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。 为什么说static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次。因此,很多时候会将一些只需要进行一次的初始化操作都放在static代码块中进行。

问问小秘 2020-03-27 16:47:49 0 浏览量 回答数 0

回答

骚年,你的理解偏颇了。。。单例模式,顾名思义,就是在某个环境里,不管怎么实例化,只能产生唯一对象。static方法只是个特殊的动作(特殊在于它是类(不是对象的)的动作),这个动作可以被执行多次,并且没有限制里面处理内容,所以完全可以产生多个对象(你无法阻止),static方法跟产生几个对象没有直接关系。所以说,static方法或变量都只是一种手段,用这种手段的组合判断,就可以生成单例模式,也就是说static方法或变量或许是必要条件,但绝对不是充分条件。至于达到单例模式效果的方法,有很多。详细参照如下:http://www.runoob.com/design-pattern/singleton-pattern.html

蛮大人123 2019-12-02 02:23:06 0 浏览量 回答数 0

回答

如果需要在子类方法中调用父类被覆盖的实例方法,则可使用super限定来调用父类被覆盖的实例方法。super是Java提供的一个关键字,super用于限定该对象调用它从父类继承得到的Field或方法。正如this不能出现在static修饰的方法中一样,super也不能出现在static修饰的方法中。static修饰的方法是属于类的,该方法的调用者可能是一个类,而不是对象,因而super限定也就失去了意义。

星尘linger 2020-04-07 12:43:48 0 浏览量 回答数 0

回答

public class B { public static Double average; public static void main(String[] args){ average = getAverage(); System.out.println(getLevel(average)); } /** * 计算平均分 * @return */ public static Double getAverage(){ return 0.0; } /** * 根据平均分评级 * @param average * @return */ public static String getLevel(Double average){ //TODO 根据平均分评级 return "level1"; } } 用这种方法其实可以不用定义average或者average定义在main内也可以。如果不在main内调用,要把方法的static去掉

蛮大人123 2019-12-02 02:15:13 0 浏览量 回答数 0

问题

关于java类初始化顺序的问题

蛮大人123 2019-12-01 20:20:53 1191 浏览量 回答数 1

回答

应该指的是类方法,实例方法吧。 类方法是指使用static修饰的方法,而实例方法则为未使用static修饰的方法。最大差异就是类方法不需要实例化类就可直接调用,而实例方法顾名思义需要先实例化类。

骑老虎放羊 2019-12-02 01:02:32 0 浏览量 回答数 0

回答

总的结论:java是线程安全的,即对任何方法(包括静态方法)都可以不考虑线程冲突,但有一个前提,就是不能存在全局变量。如果存在全局变量,则需要使用同步机制。 如下通过一组对比例子从头讲解: 在多线程中使用静态方法会发生什么事?也就是说多线程访问同一个类的static静态方法会发生什么事?是否会发生线程安全问题? public class Test { public static void operation(){ // ... do something } } 事实证明只要在静态函数中没有处理多线程共享数据,就不存在着多线程访问同一个静态方法会出现资源冲突的问题。下面看一个例子: public class StaticThread implements Runnable { @Override public void run() { // TODO Auto-generated method stub StaticAction.print(); } public static void main(String[] args) { for (int i = 0; i < 100; i++) { new Thread(new StaticThread()).start(); } } } public class StaticAction { public static int i = 0; public static void print() { int sum = 0; for (int i = 0; i < 10; i++) { System.out.print("step " + i + " is running."); sum += i; } if (sum != 45) { System.out.println("Thread error!"); System.exit(0); } System.out.println("sum is " + sum); } } 实际执行的结果显示各个线程对静态方法的访问是交叉执行的,但是这并不影响各个线程静态方法print()中sum值的计算。也就是说,在此过程中没有使用全局变量的静态方法在多线程中是安全的,静态方法是否引起线程安全问题主要看该静态方法是否对全局变量(静态变量static member)进行修改操作。 在多线程中使用同一个静态方法时,每个线程使用各自的实例字段(instance field)的副本,而共享一个静态字段(static field)。所以说,如果该静态方法不去操作一个静态成员,只在方法内部使用实例字段(instance field),不会引起安全性问题。 但是,如果该静态方法操作了一个静态变量,则需要静态方法中采用互斥访问的方式进行安全处理。我们来看一下没有使用互斥访问的话会产生怎样的问题:public class StaticAction { public static int i = 0; public static void incValue() { int temp = StaticAction.i; try { Thread.sleep(1); } catch (Exception e) { e.printStackTrace(); } temp++; StaticAction.i = temp; } } 答案来源于网络

养狐狸的猫 2019-12-02 02:18:23 0 浏览量 回答数 0

回答

"Collections提供了如下几个方法用于对List集合元素进行排序。 static void reverse(List list):反转指定List集合中元素的顺序。 static void shuffle(List list):对List集合元素进行随机排序(shuffle方法模拟了“洗牌”动作)。 static void sort(List list):根据元素的自然顺序对指定List集合的元素按升序进行排序。 static void sort(List list,Comparator c):根据指定Comparator产生的顺序对List集合元素进行排序。 static void swap(List list,int i,int j):将指定List集合中的i处元素和j处元素进行交换。 static void rotate(List list,int distance):当distance为正数时,将list集合的后distance个元素“整体”移到前面;当distance为负数时,将list集合的前distance个元素“整体”移到后面。该方法不会改变集合的长度。 "

星尘linger 2020-04-12 09:58:24 0 浏览量 回答数 0

回答

"EnumSet类没有暴露任何构造器来创建该类的实例,程序应该通过它提供的static方法来创建EnumSet对象。EnumSet类它提供了如下常用的static方法来创建EnumSet对象。 static EnumSet allOf(Class elementType):创建一个包含指定枚举类里所有枚举值的EnumSet集合。 static EnumSet complementOf(EnumSet s):创建一个其元素类型与指定EnumSet里元素类型相同的EnumSet集合,新EnumSet集合包含原EnumSet集合所不包含的、此枚举类剩下的枚举值(即新EnumSet集合和原EnumSet集合的集合元素加起来就是该枚举类的所有枚举值)。 static EnumSet copyOf(Collection c):使用一个普通集合来创建EnumSet集合。 static EnumSet copyOf(EnumSet s):创建一个与指定EnumSet具有相同元素类型、相同集合元素的EnumSet集合。 static EnumSet noneOf(Class elementType):创建一个元素类型为指定枚举类型的空EnumSet。 static EnumSet of(E first,E...rest):创建一个包含一个或多个枚举值的EnumSet集合,传入的多个枚举值必须属于同一个枚举类。 static EnumSet range(E from,E to):创建一个包含从from枚举值到to枚举值范围内所有枚举值的EnumSet集合。"

星尘linger 2020-04-12 00:05:22 0 浏览量 回答数 0

问题

使用static方法和从Spring IOC 容器里面取出的方法有什么区别?

蛮大人123 2019-12-01 20:18:07 828 浏览量 回答数 1

回答

这就要从原理说起了,cglib生成的代理对象只是单纯的继承被代理对象,然后重写每个方法去调用MethodInterceptor的intercept()方法,继承嘛,只能重写普通方法,而不能对final方法和static方法进行操作还有那位说单纯的AspectJ不能处理static方法是错误的,单纯的AspectJ可通过后编译织入处理static方法(post compile weaving),你用的使用是spring aop(即不单纯的AspectJ),他是通过动态代理实现的,也就是jdk代理或者cglib代理,此时又绕回上述1中了

游客qvodddxyww5ru 2020-08-15 10:46:55 0 浏览量 回答数 0

回答

直接上代码: public class YourJFinalConfig extends JFinalConfig { public static String email_server; public static String email_user_name; public static String email_password; public static String email_acceptor; public void configConstant(Constants me) throw{ Properties props = loadPropertyFile("my_context_config.txt"); InitialContext ctx = new InitialContext(props); loadPropertyFile("a_little_config.txt"); me.setDevMode(getPropertyToBoolean("devMode")); email_server = getProperty("email_server"); email_user_name = getProperty("email_user_name"); email_password = getProperty("email_password"); } // other code } 在controller 中这么使用: public class MyController extends Controller { public void index() { String email_user_name = YourJFinalConfig.email_user_name; String email_password = YourJFinalConfig.email_password; // .... } } YourJFinalConfig 中定义了 public static 属性是从属性文件中得到的,可以在系统的其它地方使用,如果不想使用 public static,可以使用 getter 方法来做。此例中` loadPropertyFile `方法被调用了两次,第一次加载得到一个 Properties 对象供` InitialContext`使用,后面的一次调用供后面的` getPorperty`系列方法来用。

小旋风柴进 2019-12-02 02:39:35 0 浏览量 回答数 0

回答

静态方法和实例方法的区别主要体现在两个方面: 在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。 静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。 下面几个例子展示了这一区别。 1、调用静态方法示例。 //-----------hasStaticMethod.java----------------- public class hasStaticMethod{ //定义一个静态方法 public static void callMe(){   System.out.println("This is a static method."); } } 下面这个程序使用两种形式来调用静态方法。 //-----------invokeStaticMethod.java----------------- public class invokeStaticMethod{   public static void main(String args[]){   hasStaticMethod.callMe(); //不创建对象,直接调用静态方法   hasStaticMethod oa = new hasStaticMethod(); //创建一个对象   oa.callMe(); //利用对象来调用静态方法 } } 程序两次调用静态方法,都是允许的,程序的输出如下: This is a static method.This is a static method. 允许不创建对象而调用静态方法,是Java为了减少程序员调用某些常用方法时的麻烦,而允许程序员按照传统的C语言中使用函数的方式来使用方法。典型的例子是前面某些程序中使用"Math.ramdon()"来获取随机数。 还有一个很典型的代表就是数组的处理工具Arrays 2、静态方法访问成员变量示例。 //-----------accessMember.java----------------- class accessMember{ private static int sa; //定义一个静态成员变量 private int ia; //定义一个实例成员变量 //下面定义一个静态方法 static void statMethod(){   int i = 0; //正确,可以有自己的局部变量sa = 10;   //正确,静态方法可以使用静态变量   otherStat();   //正确,可以调用静态方法   ia = 20; //错误,不能使用实例变量   insMethod(); //错误,不能调用实例方法 } static void otherStat(){} //下面定义一个实例方法 void insMethod(){   int i = 0; //正确,可以有自己的局部变量   sa = 15; //正确,可以使用静态变量   ia = 30; //正确,可以使用实例变量   statMethod(); //正确,可以调用静态方法 } } 本例其实可以概括成一句话:静态方法只能访问静态成员,实例方法可以访问静态和实例成员。之所以不允许静态方法访问实例成员变量,是因为实例成员变量是属于某个对象的,而静态方法在执行时,并不一定存在对象。同样,因为实例方法可以访问实例成员变量,如果允许静态方法调用实例方法,将间接地允许它使用实例成员变量,所以它也不能调用实例方法。基于同样的道理,静态方法中也不能使用关键字this。 main()方法是一个典型的静态方法,它同样遵循一般静态方法的规则,所以它可以由系统在创建对象之前就调用。

景凌凯 2020-03-27 17:58:10 0 浏览量 回答数 0

回答

一个内部类可以定义在另一个类里,可以定义在函数里,甚至可以作为一个表达式的一部分。  Java中的内部类共分为四种:  静态内部类static inner class (also called nested class)  成员内部类member inner class  局部内部类local inner class  匿名内部类anonymous inner class静态内部类Static Inner Class  最简单的内部类形式。  类定义时加上static关键字。  不能和外部类有相同的名字。  被编译成一个完全独立的.class文件,名称为OuterClass$InnerClass.class的形式。  只可以访问外部类的静态成员和静态方法,包括了私有的静态成员和方法。  生成静态内部类对象的方式为:  OuterClass.InnerClass inner = new OuterClass.InnerClass();成员内部类Member Inner Class  成员内部类也是定义在另一个类中,但是定义时不用static修饰。  成员内部类和静态内部类可以类比为非静态的成员变量和静态的成员变量。  成员内部类就像一个实例变量。  它可以访问它的外部类的所有成员变量和方法,不管是静态的还是非静态的都可以。  在外部类里面创建成员内部类的实例:  this.new Innerclass();  在外部类之外创建内部类的实例:  (new Outerclass()).new Innerclass();  在内部类里访问外部类的成员:  Outerclass.this.member局部内部类Local Inner Class  局部内部类定义在方法中,比方法的范围还小。是内部类中最少用到的一种类型。  像局部变量一样,不能被public, protected, private和static修饰。  只能访问方法中定义的final类型的局部变量。  局部内部类在方法中定义,所以只能在方法中使用,即只能在方法当中生成局部内部类的实例并且调用其方法。匿名内部类Anonymous Inner Class  匿名内部类就是没有名字的局部内部类,不使用关键字class, extends, implements, 没有构造方法。  匿名内部类隐式地继承了一个父类或者实现了一个接口。  匿名内部类使用得比较多,通常是作为一个方法参数。

蛮大人123 2019-12-02 02:12:37 0 浏览量 回答数 0

问题

在“内部”方法内引发异常后,如何停止Java方法执行?

垚tutu 2019-12-01 22:06:36 3 浏览量 回答数 1

问题

java中位于相同目录下类的静态导入问题 报错

因为相信,所以看见。 2020-05-26 13:56:28 15 浏览量 回答数 1

问题

jfinal调用save方法主键冲突的问题,是我使用方法不对??报错

爱吃鱼的程序员 2020-06-12 14:16:21 0 浏览量 回答数 1

问题

java中非static方法内部能否嵌套非static方法?

蛮大人123 2019-12-01 19:54:58 1010 浏览量 回答数 2

回答

public static void main(String args[])public :main方法的访问权限为公共的static : main 方法 为静态方法,属于类公共方法void : 不需要返回值。main: java中 执行 run (java application)中设定的方法名。String args :方法的执行参数, 在 (eclipse)run -》 configurations -> arguments 中设定,或直接由 java 命令后 附带的参数

蛮大人123 2019-12-02 02:45:10 0 浏览量 回答数 0

回答

"Collections还提供了如下用于查找、替换集合元素的常用方法。 static int binarySearch(List list,Object key):使用二分搜索法搜索指定的List集合,以获得指定对象在List集合中的索引。如果要使该方法可以正常工作,则必须保证List中的元素已经处于有序状态。 static Object max(Collection coll):根据元素的自然顺序,返回给定集合中的最大元素。 static Object max(Collection coll,Comparator comp):根据Comparator指定的顺序,返回给定集合中的最大元素。 static Object min(Collection coll):根据元素的自然顺序,返回给定集合中的最小元素。 static Object min(Collection coll,Comparator comp):根据Comparator指定的顺序,返回给定集合中的最小元素。 static void fill(List list,Object obj):使用指定元素obj替换指定List集合中的所有元素。 static int frequency(Collection c,Object o):返回指定集合中指定元素的出现次数。 static int indexOfSubList(List source,List target):返回子List对象在父List对象中第一次出现的位置索引;如果父List中没有出现这样的子List,则返回-1。 static int lastIndexOfSubList(List source,List target):返回子List对象在父List对象中最后一次出现的位置索引;如果父List中没有出现这样的子List,则返回-1。 static boolean replaceAll(List list,Object oldVal,Object newVal):使用一个新值newVal替换List对象的所有旧值oldVal。"

星尘linger 2020-04-12 09:59:18 0 浏览量 回答数 0

回答

(一)java 静态代码块 静态方法区别 一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用 比如main方法就必须是静态的 这是程序入口 两者的区别就是:静态代码块是自动执行的; 静态方法是被调用的时候才执行的. 静态方法 (1)在Java里,可以定义一个不需要创建对象的方法,这种方法就是静态方法。要实现这样的效果,只需要在类中定义的方法前加上static关键字。例如: public static int maximum(int n1,int n2) 使用类的静态方法时,注意: a在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。 b 静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引用的对象根本没有产生。 (2)静态变量是属于整个类的变量而不是属于某个对象的。注意不能把任何方法体内的变量声明为静态,例如: fun() { static int i=0;//非法。 } (3)一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化。例如: static { } 类装载步骤 在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的,各个步骤的主要工作如下: 装载:查找和导入类或接口的二进制数据; 链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的; 校验:检查导入类或接口的二进制数据的正确性; 准备:给类的静态变量分配并初始化存储空间; 解析:将符号引用转成直接引用; 初始化:激活类的静态变量的初始化Java代码和静态Java代码块。 初始化类中属性是静态代码块的常用用途,但只能使用一次。 (二)静态代码块的初始化顺序 class Parent{ static String name = "hello"; { System.out.println("parent block"); } static { System.out.println("parent static block"); } public Parent(){ System.out.println("parent constructor"); } } class Child extends Parent{ static String childName = "hello"; { System.out.println("child block"); } static { System.out.println("child static block"); } public Child(){ System.out.println("child constructor"); } } public class StaticIniBlockOrderTest { public static void main(String[] args) { new Child();//语句(*) } } 问题:当执行完语句()时,打印结果是什么顺序?为什么? 解答:当执行完语句()时,打印结果是这样一个顺序 : parent static block child static block parent block parent constructor child block child constructor 行完毕之后,接着去执行子类(自己这个类)里面的静态代码块,当子类的静态代码块执行完毕之后,它接着又去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法,这个就是一个对象的初始化顺序。 总结: 对象的初始化顺序:首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法。总之一句话,静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。 注意:子类的构造方法,不管这个构造方法带不带参数,默认的它都会先去寻找父类的不带参数的构造方法。如果父类没有不带参数的构造方法,那么子类必须用supper关键子来调用父类带参数的构造方法,否则编译不能通过。 原文链接:https://www.cnblogs.com/jiangyi666/p/5665130.html

问问小秘 2020-07-01 18:00:51 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站