导航:首页 > 编程语言 > java调用静态类

java调用静态类

发布时间:2023-04-28 08:58:12

A. java 静态内部类的使用

Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类。内部类又分为:常规内部类、局部内部类、匿名内部类和静态嵌套类四种。

1、静态内部类定义

静态内部类,定义在类中,任何方法外,用static定义;静态内部类只能访问外部类的静态成员。

生成(new)一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成:Outer.Inner in=new Outer.Inner();而不需要通过生成外部类对象来生成。这样实际上使静态内部类成为了一个顶级类。可以定义私有静态内部类。

2、java实现静态内部类注意事项

将某个内部类定义为静态类,跟将其他类定义为静态类的方法基本相同,引用规则也基本一致。不过其细节方面仍然有很大的不同。具体来说,主要有如下几个地方要引起注意。

1)一般情况下,如果一个内部类不是被定义成静态内部类,那么在定义成员变量或者成员方法的时候,是不能够被定义成静态成员变量与静态成员方法的。也就是说,在非静态内部类中不可以声明静态成员

2)一般非静态外部类可以随意访问其外部类的成员变量以及方法(包括声明为private的方法),但是如果一个内部类被声明为static,则其在访问包括自身的外部类会有诸多的限制。静态内部类不能访问其外部类的非静态成员变量和方法

3)在一个类中创建非静态成员内部类的时候,有一个强制性的规定,即内部类的实例一定要绑定在外部类的实例中。然后要在一个外部类中定义一个静态的内部类,不需要利用关键字new来创建内部类的实例。即在创建静态类内部对象时,不需要其外部类的对象

3、静态内部类示例

java在实现LinkedList时使用了如下内部类:

public class LinkedList<E>

extends AbstractSequentialList<E>

implements List<E>, Deque<E>, Cloneable, java.io.Serializable

{

........

private static class Entry<E> {

E element;

Entry<E> next;

Entry<E> previous;

Entry(E element, Entry<E> next, Entry<E> previous) {

this.element = element;

this.next = next;

this.previous = previous;

}

}

private Entry<E> addBefore(E e, Entry<E> entry) {

Entry<E> newEntry = new Entry<E>(e, entry, entry.previous);

newEntry.previous.next = newEntry;

newEntry.next.previous = newEntry;

size++;

modCount++;

return newEntry;

}

........

}

这里即静态内部类的典型用法

B. java本类的静态方法如何直接调用,其他类的静态方法如何调用

java本类的静态方法,直接使用静态的方法名传入参数就可以了,如果是其他类的,权限修饰符必须是public否者无法调用,调用方法是
其他类的类名
.
方法名(参数)

C. JAVA 静态类写法和调用

js?还是指JSP的脚本段。先看一般是如何显示数据吧,最后在介绍js:
我们可以使用JSP页面的脚本段,首先写个Bean类:
public class SomeBean{
public String getName(){return "123";}
public void setName(String name){}
}
<!-- test.jsp-->
<%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
<%
SomeBean bean=new SomeBean();
out.println("Bean-name is "+bean.getName());
%>
就是这样,脚本段里面的东西其实就是java代码,而JSP页面本质就是servlet。我不太清楚你是否了解JSP的编译,如果你不知道的话我建议你到网络搜一下"JSP的java代码"一类的东西看看,这是基础。
你说的静态类应该是指类中包含静态域吧,除了内部类可以是静态的外,别的类都不行。不论是静态域还是普通域,用上面的脚本段都可以搞定。
再看看struts,静态的显示我放在后面了:
首先我们来写一个Action类:
public class LoginAction{
public String execute(){
return SUCCESS;
}
public void setValue(SomeBean value){
this.value=value;
}
public SomeBean getValue(){
return this.value;
}
private SomeBean value;
}
再写出Bean类:
public class SomeBean{
public String getName(){}
public void setName(String name){}
}
配置Action应该不用说了,没什么特别的,不会就上网查吧。
我们现在说方法。
方法一:
使用OGNL表达式。你可以使用struts自带的标签,他们都支持OGNL,比如s:property。举个例子:
<!--test.jsp-->
<%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:property value="value.name"/>

你访问LoginAction的时候s:property标签就会显示getValue().getName();
如果你想了解更多的struts2标签和OGNL表达式建议去找更详尽的资料。
方法二:
当然是使用JSP本身的性质了。通过request和session来获取值。
我们把Action类改一下:
public class LoginAction{
public string execute(){
SomeBean value=new SomeBean();
value.setName("sfsfjsfje");
ActionContext context=ActionContext.getContext();
//往request里放attribute
context.put("value",value);
//往session里放
context.getSession().put("value",value);
return SUCCESS;
}
}
接下来我们改页面:
<!-- test.jsp -->
<%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%= ((SomeBean) request.getAttribute("value")).getName() %>
<%= ((SomeBean) session.get("value")).getName() %>

OGNL也可以显示静态域:
public class SomeBean{
public static String name="123";
public static String getAlias(){return "abc";}
}
public class LoginAction{
public String execute(){return SUCCESS;}
}
配置文件不写了。
页面:
<!--test.jsp-->
<%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!--还是用s:property-->
<s:property value="@SomeBean@name"/>
<s:property value="@SomeBean@getAlias()"/>
当你访问LoginAction时就会显示SomeBean的name和getAlias()。不知道你是不是问的这个。

如果你要在js中调用数据也很容易:

<!-- test.jsp -->
<%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<script language="javascript" type="text/javascript">
var name="<s:property value="@SomeBean@name"/>";
</script>
这样js中就有相应的数据了。

D. java中静态方法只能被静态类调用吗

Java中当然可以在一个类中调用另一个类的静态公有方法。
首先公有方法,其他类是可以访问的。
调用静态方法的语法是,
类名.方法名(参数...)
所以,比如另一个类叫OtherClass,它的静态公有方法是publicMethodA(),假设它还兆谈有返回值,是int类型,

那么在你自己悔猜搜的类里调用的方式就是:
int result = OtherClass.publicMethodA();

另碧历外,调用非静态方法(也叫成员方法),比如方法叫int publicMethodB(),就必须先创建这个对象再调用其方法,例如:
int result2 = new OtherClass().publicMethodB();

E. java本类的静态方法如何直接调用,其他类的静态方法如何调用

java本类的静态方法,直接使用静态的方法咐裤困名传入参数就可以了,如果是其他类的,权限修饰符必须是public否者纯团无法调用,调用方法是 其他类的类名 . 方法名(参数)衡念

F. Java中可以直接调用类中静态方法,不用实例化么,详解!原理

好吧,我来试试看,看答案能不能够让你满意。
先通俗的分析下,我们把类看作是一个房子。房子里面有家具,桌椅板凳之类的,房子里面还有人。
房子里面所有的人都应该是共有一套家具的。也就是说,这些家具是唯一的,如果某个家具坏了,那么大家都用不了。
我们再看一看定义,java的静态变量也叫做类变量,它开始于类的创建,结束于类的消亡。非静态变量叫做实例变量,它开始于类的实例的创建,结束语类的实例的消亡。静态变量被所有实例所共享。也就是如上面的例子,座椅板凳是类变量,它们是在房子被建好了之后就被添加放置进来,而且基本都是唯一的。人就相当于实例,每个人都能用这些家具,但是如果家具一旦损坏,那就是坏了,或者你把某一个家具搬走,那么所有的人都用不了这个家具,房子里也不存在这个家具了。
但是房子里可以进很多人,可以进张三,也可以进李四。所以这些人就是类的实例对象,他们身上穿的衣服就可以叫做实例变量。
那么在内存之中又是如何的呢?当一个类被创建并初始化后,内存中会有两个区域,栈区和堆区。栈中主要存放的是引用变量,堆中主要存放的是真实的被实例化后的类。栈中的引用变量会指向堆中的真实对象地址。比如A a=new A(); a这个变量就会在栈中,实际被new出来的类A的对象会放在堆中,a指向实际被new出来的A对象。
如果一个类中有静态变量的话,程序首先会把该静态变量加载进内存中,也就是在堆中开辟一个区域专门存放。以后不管你new多少个类的对象,该静态变量永远都是在那里的。也就是说,静态变量在类的初始化一次后,系统就不会为该变量开辟新的内存空间。而每new一个类的对象,系统就会重新在
堆内存中开辟一个新空间来存放该类的实例对象,并且栈中也会有一个新的引用变量去指向它。
静态方法也是类似,但是有一点要强调,静态方法只中不能调用非静态方法。因为被static修饰的方法会首先被Classloader对象先加载进内存,而这个时候可能其它的非静态方法或者变量还没有被加载进来。就好比我现在想做包子,现在面粉被static修饰,首先已经拿到你身边,可是因为包子馅不是static修饰的,所以可能包子馅儿还没运过来,你说怎么做的出包子呢。
被static修饰过的都是随着类的初始化后就产生了,在堆内存中都有一块专门的区域来存放,所以只需要类名点方法名或者变量名即可。而非静态的就必须通过类的对象去调相应的。就像是你想要红色的衣服,你必须是从穿红色的衣服的人的身上拿过来才行,所以你必须找到穿红色衣服的人,也就是类的实例对象,而你如果要去找一个桌子,而桌子就在房间里摆着,你只要进到房间里直接走过去拿来就可以了~~

G. java调用某个类的静态方法时会初始化该类本身么会执行该类的无参构造方法么

不会,只有在实例化类时才会调用构造方法。静态方法,也就是脊罩使用static声明的方法,在虚拟机启动加载类的时候就进行了创建,所以使用到静态方法时,直接使用类名点静态氏敏方法即可调用歼野枝。

H. JAVA如果是静态类在另一类调用时候可以直接用类名.方法吗而不用创建对象

你好,首先理解一下静态类。就是类内部的方法和成员变量都是static的。
准确的说,静态类在另一个类调用的时候可以直接用类名.方法还取决于方法的访问修饰符(指散private/包级私有/protected/public)。
而并灶不是静态类,在另一类绝逗扮中调用的时候一定要先创建该类为对象才能调用该类的方法吗?这说法也太决定,如果该类中有一个方法是static的,那么调用这个方法是不需要创建对象的。

I. java调用静态类的方法时是不是可以直接 类名.方法,而调用非静态类方法时候需要new个类再 对象.方法

你好,你的理解大体上是对的。
但是严格的说,上述必须在类外部调用才成立。
而且1.5之后有了静态方法导入,可以不羡悉笑用写类名,直接陆顷调用静态方法。
“调用非静态类方法时候需要new个类再 对象.方法”这句准确的说
“调用非静态类方法时候需要new个对象出来,再 对象.方法”
以上的所有调用必须严格满足访问权限。
也就是私兄含有、包级私有、受保护、公共。

J. 在Java中,使用静态类对象应该用New吗

调用非静态类方法时候需要new个对象出来,再 对象.方法,,如肢野果你要调用父类中被子类重载的绝纯方法,那么就用super.方法名。要是不需要的话,直接调用就可以了。并饥咐

阅读全文

与java调用静态类相关的资料

热点内容
c语言编译的错误提示 浏览:763
验机苹果app哪个最好 浏览:663
光遇国际服安卓如何购买礼包 浏览:52
163app怎么下载 浏览:244
电脑程序员下场 浏览:42
编译原理ll1文法判断 浏览:723
qt用vs2015编译 浏览:547
结婚日子最好的算法 浏览:791
安卓怎么把数据传到苹果里 浏览:501
编译器标识 浏览:789
编程珠玑第三章 浏览:782
windows如何开启tftp服务器 浏览:107
欧姆龙plc编程指令表 浏览:186
程序员远程收入不稳定 浏览:860
算法原理怎么写 浏览:469
有个动漫女主蓝头发是程序员 浏览:998
云服务器资源评估 浏览:882
微云下载文件夹是空的 浏览:3
r9数控车的编程 浏览:403
为什么删不掉ksafe文件夹 浏览:291