当前位置:首页 » 编程语言 » java内部类this

java内部类this

发布时间: 2023-08-07 13:51:25

‘壹’ java中类名.this和这个类的对象有区别吗

一般用于内部类需要使用其外部类的实例对象时候使用 ClassName.this 代表其外部类对象。
直接写this则代表内部类本身对象 。
这种用法也用于匿名类

‘贰’ Java:关于Java中的this,这里为什么加不加都一样呢

this指直译是“这个”,在java中指“当前的”。不管在哪里,只要用到this,指的一定就是当前的这个对象。最常见的用法是在写java bean中。比如下面的代码

publicclassStudent{
privateStringname;
privateintage;
publicStudent(){}
publicStudent(Stringname,intage){
this();
this.setName(name);
this.age=age;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnthis.age;
}
}

上面的代码是一个javabean。所谓的javabean就是一个类,这个类有一些属性,方法只有这些属性的Getter或者Setter(从Object类继承的方法不算在此列)。
这个bean有两个属性,在构造器中为属性赋值的时候写的this.setName(name).意思是调用当前你创建的这个对象的Setter给这个对象的属性赋值。而setName里面的this.name=name;这一句,等号之前的this.name表示当前对象的name,也就是在类里面定义的privateStringname这个变量,而等号之后的name表示从外界调用这个方法时候传进来的参数。所以这句话的意思就是将外界传来的字符串变量的值赋给当前对象的name属性。
那么构造器第一行的this()是做什么的呢?这句话是调用当前这个对象的无参构造,就是调用上面的publicStudent(){}这个构造器。在这段代码里this()体现不出来什么作用。但是我们知道构造器的作用是在构造对象的时候给属性赋值的。如果上面个无参构造里面写一些赋值语句的话那么这里就可以避免代码的重复了。但是请注意,调用this()的时候一定要写在该方法的第一行,否则会报错。
另外,this关键字不能使用在有static关键字修饰的方法和代码块里面。因为static是这个类的所有对象共用的,而this指的只是当前这个对象的“私人”的一些东西,在属性上面就冲突了。

‘叁’ java中内部类的概念

简单的说,内部(inner)类指那些类定义代码被置于其它类定义中的类;而对于一般的、类定义代码不嵌套在其它类定义中的类,称为顶层(top-level)类。对于一个内部类,包含其定义代码的类称为它的外部(outer)类。 1 Static member class(静态成员类) 类声明中包含“static”关键字的内部类。如以下示例代码, Inner1/Inner2/Inner3/Inner4就是Outer的四个静态成员类。静态成员类的使用方式与一般顶层类的使用方式基本相同。
1内部类的嵌套可以理解成类的链关系,在构造一个内部类(非static)的实例的时候,会将直接外层类的实例
作为参数传进构造函数,而外层类的实例也是用其外层类的实例构造,所以是一种链状关系,内部的类可以使用所有
外层的类的实例,而外层的类不能使用内层的类, 应用a.this(最外层类实例) ,a.b.c.this(链中某个外层的实例)。

class TheOuter{
class kk {
class gg {
int tt = 100;
}
}

class aa {
class bb {
int jj = 10;
class cc {
{ int ff = TheOuter.aa.bb.this.jj;
// 无法直接访问到gg不在链关系内
System.out.println(ff);
}
}
}
}
}

2 创建一个内部类 new aa().new bb().new()cc 实际上是调用 外层类实例.new 本层构造函数()
如果内部类是static的不需要外层类的实例 多个static嵌套的内部类的实例 aa.bb.cc test = new aa.bb.cc();

3
class a0 {
class b0 {
}
}

class vvv{
class ff extends a0.b0 {// ff这里不是内部类也行
ff(a0 kk){
kk.super();
}
}
}
继承自内部类要调用父类的外层类的super()

4
class dd {
void print(){
System.out.println("dd.println is there");
}
class kk {
kk(int i){}
class cc {
void pp() {
System.out.println("****");
}
void ddpp() {
dd.this.print();
}
}
}
}

class aa {
public static void main (String agrs[]) {
dd.kk.cc test = new dd().new kk(10).new cc();
test.ddpp();
}
}
在类内部可以是使用外层类,但是如果生成一个实例的句柄就没有提供访问上层类的功能。

5 this 是指本类的实例

6 缺省的new
class cc {
{
new test();
}
class kk {
{
System.out.println("there kk");
}
}

class test {
{
new kk();
}
class kk {
{
System.out.println("there test_kk");
}
}
}
}
可以直接使用new,new的范围可以是 之际外层.this.new 和this.new 但是如果内层与外层出现同名类以内部优先

7
//当有链关系的时候要注意类不要重名
class vv {
class bb {} //!
class kk {
//class vv{} 这样就会出错
class bb {} //!这样就不会出错
}
}

8
class a0 {
class b0 {
}
}

class vvv{
class ff extends a0.b0 {// 不是内部类也行
ff(a0 kk){
kk.super();
}
}
}
继承自内部类要调用父类的外层类的super()

9 匿名内部类
interface oo {
//oo(int g) {}
int k = 10;
void pt();
}

class pp {
pp(int g) {
}
int get() {
return 100;
}
}

class me {
/*
interface oo {
void pt();
}
*/
class kk{
oo testmed() {
final int i = 10;
int g = 100;
return new oo() {
int kk;
{
// 使用外面的东西要声名成final
// 继承接口内部优先
// 匿名内部类没有构造函数,只能使用块,初始化
kk = i + k ;
}
public void pt() {
System.out.println(kk);
}
};
}
pp testmed0() {
return new pp(10){ // 继承自类
public int get() {
return super.get() * 10;
}
};
}
}
}
匿名内部类可以继承自接口也可以继承自类,继承自类的构造函数中 可以有参数。

10
class bf {
interface kk {}
class aa {
// 接口能嵌套在接口中(不受限制),或者嵌套在顶层,下面就不行
//interface gg {}
}
}

‘肆’ 在java中类名.this得到的是什么

你这个问题应该是问在3g平台下面把,那么得到的是上下文对象-context。在j2se得到是当前类的一个对象

‘伍’ Java中的this关键字请举个具体的例子来说明用它的好处

this
关键字表示的是当前类
比如
this.name
是指当前类的name属性,有些时候可以用于区分同名属性,如你在类里有个属性为name,有个方法里也有个属性叫name,你在该方法里使用this.name是指类属性,直接使用name则是指方法的name属性,这样不会混淆;
可以用this.method()调用本类的method()方法;
可以调用父类的方法和属性,比如你继承了某个类,在该类中你不能直接看到父类的方法和属性,你需要打开父类去查看他的方法和属性,这样比较麻烦,你可以直接用this.的方式查看到父类的方法和属性;
使用this关键字调用类方法和属性通常比较方便,比如你的类比较长,有时,你想调用某个方法或属性,你又忘了它的名称,直接使用this.的方式直接就能找到;
还有一点要注意,比如你有个类包含一个内部类,你在内部类使用this,则是指调用内部类的方法和属性,此时this不能调用到外部类的方法及属性。

热点内容
青云存储 发布:2025-03-21 06:50:03 浏览:401
王者荣耀有脚本吗 发布:2025-03-21 06:50:00 浏览:804
c语言代码运行 发布:2025-03-21 06:49:17 浏览:558
python打开文件夹下所有文件 发布:2025-03-21 06:44:34 浏览:950
oracle数据库表连接 发布:2025-03-21 06:42:52 浏览:44
thinkphp获取数据库 发布:2025-03-21 06:42:09 浏览:48
eclipsepythondebug 发布:2025-03-21 06:42:01 浏览:59
android获取天气 发布:2025-03-21 06:35:50 浏览:625
什么密码扣 发布:2025-03-21 06:35:17 浏览:713
如何使安卓手机秒变iphone 发布:2025-03-21 06:34:20 浏览:704