匿名内部类的知识

package sun.sms;

import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class SmsActivity extends Activity {
    /** Called when the activity is first created. */
	
	private Button sendButton ; 
	private EditText editText1 ; 
	private EditText editText2; 
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Button sendButton = (Button)this.findViewById(R.id.sendbutton);
        sendButton.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				EditText editText1 = (EditText)findViewById(R.id.phonetext);
				EditText editText2 = (EditText)findViewById(R.id.contenttext);
		        
				String mobile = editText1.getText().toString();
				String content = editText2.getText().toString();
				
				SmsManager smsManager = SmsManager.getDefault();
				List<String> texts =  smsManager.divideMessage(content);
				for(String text:texts){
					smsManager.sendTextMessage(mobile, null, text, null, null);
				}
				Toast.makeText(SmsActivity.this, "发送完成", 1).show();
			}
		});
        
    }
}

  

这些都是java 的基础知识,之前不很明白EditText editText1 = (EditText)findViewById(R.id.phonetext);
findViewById是外部类SmsActivity 的方法,为什么这里可以直接用findViewById,原因是因为匿名内部类不存在findViewById方法,所以他会寻找外部类SmsActivity 的findViewById。由此可见,当匿名内部类存在findViewById同名方法时,就不能省略SmsActivity .this .findViewById的引用了.

匿名内部类是指在声明一个类的同时实例化它,而不需要为该类命名。在Java中,匿名内部类通常用于实现接口或继承抽象类。 下面是一些关于匿名内部类知识点: 1. 声明匿名内部类:可以在创建对象的同时定义匿名内部类,使用new关键字后紧跟接口或抽象类的定义,并重写其中的方法。例如: ```java InterfaceName obj = new InterfaceName() { // 匿名内部类的实现 // 重写接口中的方法 }; ``` 2. 实现接口:匿名内部类常用于实现接口,可以直接在创建对象时实现接口的方法,省去了单独创建一个实现类的步骤。 ```java Runnable runnable = new Runnable() { @Override public void run() { // 实现Runnable接口的run方法 } }; ``` 3. 继承抽象类:匿名内部类也可以继承抽象类,并重写其中的抽象方法。 ```java AbstractClass obj = new AbstractClass() { @Override public void method() { // 实现抽象类中的方法 } }; ``` 4. 访问外部变量:匿名内部类可以访问外部类中的成员变量,但需要将其声明为final或实际上是final的(Java 8之后,如果变量未被后续代码修改,可以不显式声明为final)。 ```java int num = 10; InterfaceName obj = new InterfaceName() { @Override public void method() { System.out.println(num); // 访问外部变量 } }; ``` 需要注意的是,匿名内部类没有名称,因此无法通过名称直接创建多个对象。每次使用都需要重新定义匿名内部类匿名内部类通常用于简单的场景,如果需要复杂的逻辑或多次使用,建议单独定义一个具名的内部类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值