android(eclipse)编程中常见的java问题总结(四)

0:java流:   流是具有方向的   在文件操作中java流分为字节流:Filereader和Filewriter字符流:FileOutputStream,FileInputSream   例如在文件存储操作中:     

pulic void save(){
     String data="data to save";
     FileOutputSream out=null;
     BufferedWriter writer=null;
        try{
        out=openFileOutPut   ("data_name",Context.MODE_PRIVATE);
        writer=new BufferedWriter(new OutputStream(out));
        writer.write(data);
        }catch(IOException e){//平时使用的是Exceotion e
            e.printStackTrace();
        }finally{
            try{
                if(writer!=null){
                    writer.close();
                }
            }catch(IOException e){
                    e.printStackTrace();}
                 }}     

1:Java中,类不实例化是可以调用方法的,这种方法叫做静态方法,也叫做类方法。静态变量

  类的静态方法不属于类的对象,而属于类本身,在该类首次使用的时候加载到系统的方法区中,一般  可以使用类名直接调用类的静态方法,而不需要实例化对象。由于  静态方法并不属于对象,因此在静态方法中无法操作类的普通成员变量,只能操作类的静态成员变量。  (因为普通成员变量依附于类的对象存在,而类的静态方法并不属于类对象,在类对象被实例化之前  静态方法就已经存在,故在静态方法中操作普通成员变量,相当于在无对象的情况下对其中的成员变  量进行操作,这是无意义的,同时也不符合面向对象的思想。)     在静态方法中可以操作类的静态属性,而静态属性是类的属性,可以作为一次程序运行期间的全局变  量来使用,因此静态方法的主要作用就是对类中静态属性的  初始化或者根据静态属性实现一定的业务逻辑。

2:关于深拷贝和浅拷贝的运用 (创建实例对象)      

  浅克隆,通常只是对克隆的实例进行复制,但里面的其他子对象,都是共用的。:   深克隆,克隆的时候会复制它的子对象的引用,里面所有的变量和子对象都是又额外拷贝了一份。  克隆是为了增加元数据的完整不破坏性,这种方法会独立使用子对象。

3:!"".equals(content) // 一个非空判断语句 content的值不为空

4:padding  margin   

  padding说的是控件内部的间隔逻辑,即控件里面的内容与控件自身边缘(上下左右)的距离,而margin说的是     控件自身与其他相邻控件(上下左右)之间的距离。

5:关于throws   

  throws关键字通常被应用在声明方法时,用来指定可能抛出的异常。多个异常可以使用逗号隔开。当在主  函数中调用该方法时,如果发生异常,就会将异常抛给指定异常对象。如下面例子所示:  

     static void pop() throws NegativeArraySizeException {
	  //定义方法并抛出NegativeArraySizeException异常
	  int [] arr = new int[-3];//创建数组
	}
	public static void main(String[] args) {//主方法
		try { 
		pop(); //调用pop()方法
		} catch (NegativeArraySizeException e) {
			System.out.println("pop()方法抛出的异常");//输出异常信息
		}
	}

6:r.layout.**与r.id.**  引入布局文件和引入控件实例 一般是先引入布局在引入该布局中的控件实例

7:除了给按钮获取到布局控件时还有什么时候需要用到类型转换?   

  为什么要类型转换   1)findViewById(R.id.button).getClass().getName();            2)Button button = (Button) findViewById(R.id.button);      

  button是view的子类但是就像车子有很多种,如果不指定是摩托车还是自行车的话就不知道到底   找的是哪种车,所以要转换。    

  什么时候需要转换:只要是返回值的类型和你需要的类型不一致或者是返回类型为父类但是你需要子类的时候就要强制类型转换

8:关于objiect  Object 数据类型可以指向任意数据类型的数据,包括您的应用程序识别的任意对象实例。当您在编译  时不知道变量可能指向哪种数据类型时,就用 Object。  

9:空字符串和null有什么区别:   null代表内存中根本没有这个东西但是空字符串的话是占有一定空间的只是里面没有内容      

10:.isEmpty()和.equals("")方法去判断空有什么区别?   仔细读官方的API:  Returns true if the string is null or 0-length.  因为你从EditText返回的  是一个变量。如果这个变量本身为null值,那么你掉它的equals方法是要报错的。但是如果你调用TextUtils.isEmpty()  把这个变量作为参数传进去。只要这个参数为空或者为“”,都会返回真。所以,用官方给的更加严谨。而且。也十分方便。  因为你单独去判断你还不是要写一个if语句判断。返回的还是一个boolean值,为何别人铺好的路不走呢?  还有==null

The method makeText(Context, CharSequence, int) in the type Toast  is not applicable for the arguments (new View.OnClickListener(){}, String, int)    context的参数没弄正确要制定当前的类对象    

11:@Override到底有什么用   

  @override有注释文档的作用,可有可无有点像鸡肋但它对于编程粗心的人可是个很人性化的功能  如果想重写父类的方法,比如toString()方法的话,在被重载的方法前面加上@Override ,这样编译的时  候系统可以帮你检查方法的正确性,如下   

@Override  public String toString(){...}这是正确的  如果将toString写成tostring  @Override  public String tostring(){...}编译器可以检测出这种写法是错误的,提醒你改正  而如果不加@Override  public String tostring(){...}这样编译器是不会报错的,它会认为是你在类中加的新方法

12:什么叫做抽象类?   

  一种特殊的类,并且不能被实例化,这点和接口十分像。抽象类可以包括抽象方法,这是普通类所不能的。抽象方法  只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。

13:this,super怎么用,有什么区别?  

  this一般是指当前对象 super指父类的对象  this:1)引用当前对象的方法时要用但是并不是必须2)当传入的参数和当前对象的参数相同则必须指明谁是谁

  使用super:  

class Person{
	public int c;
	String name;
	private int age;
	protected void setName(String name){
	this.name=name;
	}
	protected void setAge(int age){
	this.age=age;
	}
	protected void print(){
	System.out.println("Name="+name+" Age="+age);
	}
	
	public class DemoSuper extends Person{
	   public void print(){
	   System.out.println("DemoSuper:");
	   super.print();
	   }
	}
 }
原文地址:https://www.cnblogs.com/zzy-frisrtblog/p/5299923.html