java静态方法this
静态方法是:类名.方法名()
一般的方法是:对象的引用.方法名()【这种方法也可以调用静态方法,但是非常不推荐】
静态方法是跟实例无关的方法,只跟类有关,在类没有实例的时候就可以使用其静态方法。静态方法不能操作非静态变量,因为非静态变量是跟实例相关的,每个实例的非静态变量都不同,而类的静态变量是所有实例共有的。this是跟实例相关的,它就是当前调用该方法的实例的引用,这跟静态方法矛盾。而一般的方法可以操作静态变量,虽然允许这样做,但是不推荐。一般的方法必须由类的实例的引用调用,在没有实例的时候是没法调用的。好好体会一下吧
② java静态方法
静态方法不可以,但是如果main函数不是静态函数就可以引用this和super。如果main函数是静态函数,方法内不能使用super,也不可以使用static。
1。this和super是针对一个类实例,创建一块内存区域,当条用方法时会获得实例的数据,而static没有这样的实例,所以static方法里不可以有this和super。
2。static方法里不可以有static是因为,要是你在一个类里申明了static方法,里面的static变量是可以申明成类static成员的,为了规范代码,Java规定不可以这样。
③ this可用于静态方法中,对吗java
不可以,this指向所在类的当前对象,静态方法是归属于类本身,没有对象与其关联,所以不能在静态方法中使用this
④ java中静态方法中为什么不能使用this,super和直接调用非静态方法
静态方法是在类里面的,是由类直接调用的.
this指的是调用该方法的对象.
熟读上面两点,然后看;例子
calss A{
static void add(){
this.go();
}
void go(){}
}
如果用A.add(); 我们说add里面的this指的是调用当前add方法的对象,
可是add是由类A直接调用的,不是由对象调用的,所以这里的this是谁?
由于可能有这种情况发生,所以不能在static中用this.
应为你不知道在用的时候,到底有没有创建对象.
super指的是父类对象,同理.你不能保证静态方法被调用时,有创建对象,如果没创建,this,super有指代谁?
⑤ Java中,static方法就是没有this的方法,怎么理解这句话
你好。
我的理解如下。首先你要知道static变量的初始化时间
这是一个子类创建的时候初始化过程:
这是之前写的博客:
网页链接
结论是: 父类static ->子类static->父类普通赋值语句->子类普通赋值语句->父类构造->子类构造
也就是说。一个类的static方法会先于类的任何一个对象之前初始化。
而this是当前对象。所以static初始化之后。this才会被创建。显然static方法是没有this的(它初始化的时候还没有this对象)
希望对你有所帮助。如果有错误欢迎指出。
⑥ java:在java中为什么静态变量没有this引用
1. this是指当前对象自己。
当在一个类中要明确指出使用对象自己的的变量或函数时就应该加上this引用。如下面这个例子中:
public class Hello {
String s = "Hello";
public Hello(String s)
{
System.out.println("s = " + s);
System.out.println("1 -> this.s = " + this.s);
this.s = s;
System.out.println("2 -> this.s = " + this.s);
}
public static void main(String[] args) {
Hello x=new Hello("HelloWorld!");
}
}
运行结果:
s = HelloWorld!
1 -> this.s = Hello
2 -> this.s = HelloWorld!
在这个例子中,构造函数Hello中,参数s与类Hello的变量s同名,这时如果直接对s进行操作则是对参数s进行操作。若要对类Hello的成员变量s进行操作就应该用this进行引用。运行结果的第一行就是直接对构造函数中传递过来的参数s进行打印结果; 第二行是对成员变量s的打印;第三行是先对成员变量s赋传过来的参数s值后再打印,所以结果是HelloWorld!
2. 把this作为参数传递
当你要把自己作为参数传递给别的对象时,也可以用this。如:
public class A {
public A() {
new B(this).print();
}
public void print() {
System.out.println("Hello from A!");
}
}
public class B {
A a;
public B(A a) {
this.a = a;
}
public void print() {
a.print();
System.out.println("Hello from B!");
}
}
运行结果:
Hello from A!
Hello from B!
在这个例子中,对象A的构造函数中,用new B(this)把对象A自己作为参数传递给了对象B的构造函数。
3. 注意匿名类和内部类中的中的this。
有时候,我们会用到一些内部类和匿名类,如事件处理。当在匿名类中用this时,这个this则指的是匿名类或内部类本身。这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名。如下面这个例子:
public class A {
int i = 1;
public A() {
Thread thread = new Thread() {
public void run() {
for(;;) {
A.this.run();
try {
sleep(1000);
} catch(InterruptedException ie) { }
}
}
}; //注意这里有;
thread.start();
}
public void run() {
System.out.println("i = " + i);
i++;
}
public static void main(String[] args) throws Exception {
new A();
}
}
在上面这个例子中, thread 是一个匿名类对象,在它的定义中,它的 run 函数里用到了外部类的 run 函数。这时由于函数同名,直接调用就不行了。这时有两种办法,一种就是把外部的 run 函数换一个名字,但这种办法对于一个开发到中途的应用来说是不可取的。那么就可以用这个例子中的办法用外部类的类名加上 this 引用来说明要调用的是外部类的方法 run。
4。在构造函数中,通过this可以调用同一class中别的构造函数,如
public class Flower{
Flower (int petals){}
Flower(String ss){}
Flower(int petals, Sting ss){
//petals++;调用另一个构造函数的语句必须在最起始的位置
this(petals);
//this(ss);会产生错误,因为在一个构造函数中只能调用一个构造函数
}
}
值得注意的是:
1:在构造调用另一个构造函数,调用动作必须置于最起始的位置。
2:不能在构造函数以外的任何函数内调用构造函数。
3:在一个构造函数内只能调用一个构造函数。
⑦ java中this的用法
1. this指当前对象。
当在一个类中要明确指出使用对象变量或函数时加上this引用。如下面例子中:
public class Hello {
String s = "Hello";
public Hello(String s){
System.out.println("s = " + s);
System.out.println("1 -> this.s = " + this.s);
this.s = s;
System.out.println("2 -> this.s = " + this.s);
}
public static void main(String[] args) {
Hello x=new Hello("HelloWorld!");
}
}
运行结果:
s = HelloWorld!
1 -> this.s = Hello
2 -> this.s = HelloWorld!
在这个例子中,构造函数Hello中,参数s与类Hello的变量s同名,这时直接对s进行操作则是对参数s进行操作。对类Hello的成员变量s进行操作就应该用this进行引用。运行结果的第一行就是直接对构造函数中传递过来的参数s进行打印结果;
第二行是对成员变量s的打印;第三行是先对成员变量s赋传过来的参数s值后再打印,所以结果是HelloWorld!
2. this作为参数传递
当你要把自己作为参数传递给别的对象时如:
public class A {
public A() {
new B(this).print();
}
public void print() {
System.out.println("Hello from A!");
}
}
public class B {
A a;
public B(A a) {
this.a = a;
}
public void print() {
a.print();
System.out.println("Hello from B!");
}
}
运行结果:
Hello from A!
Hello from B!
在这个例子中,对象A的构造函数中,new
B(this)把对象A作为参数传递给了对象B的构造函数。
⑧ Java static方法里为什么不能使用this关键字
java中的static是类区域,换句话说就是所有该类的所有实例共享的区域,而this指的是当前的类实例索引。在类区域中是无法确定某个类实例的。
eg。
class A
{
private static Stirng Static = "123";
}
这个字符串Static所有A的实例都可以访问到。
反过来,
class A
{
public static void fun()
{
this // 这里不能使用 因为 static区域内不能确定是某个特定的A的实例
}
}
⑨ 在java面向对象中this能调动静态方法吗
肯定能调用了。你首先要清楚,对象是可以调用方法的(不管是静态的还是非静态的)。其次,this指的是当前对象,既然是对象,当然能调用了。只是java中不建议用对象来调用静态方法,推荐用类。
最简单就是做个测试。
class Demo{
public Demo(){
this.test(); //这里不就调用了。自己编译一下,看看报不报错。(可能会有警告,警告可以忽略,它一样可以运行)
}
private static void test(){
}
}
⑩ java "静态的方法不能存取“this”所引用的对象。"这句话怎么理解
静态方法也叫类方法。在类被加载的时候被初始化,可以通过类名和对象名进行调用,在类内部可以直接调用。仅该方法不需要实例化对象,即可调用。
在静态的方法中不能以任何形式引用this,因为this默认的对象引用,静态方法被调用时,this所引用的对象并没有产生,this无所指向.