Android开发知道的基本知识点总(三)

1.静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?
  答:结论:java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏.
原因:
1). 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成对,不需要继承机制及可以调用。如果子类里面定义了静态方法和属性,那么这时候父类的静态方法或属性称之为"隐藏"。如果你想要调用父类的静态方法和属性,直接通过父类名.方法或变量名完成,至于是否继承一说,子类是有继承静态方法和属性,但是跟实例方法和属性不太一样,存在"隐藏"的这种情况。
2). 多态之所以能够实现依赖于继承、接口和重写、重载(继承和重写最为关键)。有了继承和重写就可以实现父类的引用指向不同子类的对象。重写的功能是:"重写"后子类的优先级要高于父类的优先级,但是“隐藏”是没有这个优先级之分的。
3). 静态属性、静态方法和非静态的属性都可以被继承和隐藏而不能被重写,因此不能实现多态,不能实现父类的引用可以指向不同子类的对象。非静态方法可以被继承和重写,因此可以实现多态。

2.静态内部类的设计意图成员内部类、静态内部类、局部内部类和匿名内部类的理解,以及项目中的应用
  答:内部类
内部类,即定义在一个类的内部的类。为什么有内部类呢?
我们知道,在java中类是单继承的,一个类只能继承另一个具体类或抽象类(可以实现多个接口)。这种设计的目的是因为在多继承中,当多个父类中有重复的属性或者方法时,子类的调用结果会含糊不清,因此用了单继承。
而使用内部类的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。
在我们程序设计中有时候会存在一些使用接口很难解决的问题,这个时候我们可以利用内部类提供的、可以继承多个具体的或者抽象的类的能力来解决这些程序设计问题。可以这样说,接口只是解决了部分问题,而内部类使得多重继承的解决方案变得更加完整。

静态内部类
说静态内部类之前,先了解下成员内部类(非静态的内部类)。
   成员内部类:也是最普通的内部类,它是外围类的一个成员,所以它可以无限制的访问外围类的所有成员属性和方法,尽管是private的,但是外围类要访问内部类的成员属性和方法则需要通过内部类实例来访问。
在成员内部类中要注意两点:
   成员内部类中不能存在任何static的变量和方法;
   成员内部类是依附于外围类的,所以只有先创建了外围类才能够创建内部类。
静态内部类与非静态内部类之间存在一个最大的区别:非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围内,但是静态内部类却没有。
没有这个引用就意味着:
  它的创建是不需要依赖于外围类的。
  它不能使用任何外围类的非static成员变量和方法。

局部内部类
局部内部类是嵌套在方法和作用于内的,对于这个类的使用主要是应用与解决比较复杂的问题,想创建一个类来辅助我们的解决方案,到那时又不希望这个类是公共可用的,所以就产生了局部内部类,局部内部类和成员内部类一样被编译,只是它的作用域发生了改变,它只能在该方法和属性中被使用,出了该方法和属性就会失效。

匿名内部类
1、匿名内部类是没有访问修饰符的。
2、new 匿名内部类,这个类首先是要存在的。
3、当所在方法的形参需要被匿名内部类使用,那么这个形参就必须为final。
4、匿名内部类没有明面上的构造方法,编译器会自动生成一个引用外部类的构造方法。

3.string 转换成 integer的方式及原理

Integer转String
//方法一:Integer类的静态方法toString()
Integer a = 2;
String str = Integer.toString(a)
//方法二:Integer类的成员方法toString()
Integer a = 2;
String str = a.toString();
//方法三:String类的静态方法valueOf()
Integer a = 2;
String str = String.valueOf(a);

String转Integer
当我们要把String转化为Integer时,一定要对String进行非空判断,否则很可能报空指针异常。
String str = "...";
Integer i = null;
if(str!=null){
     i = Integer.valueOf(str);
}
还有更多格式之间的转换:列如:

 1.Integer转换成int的方法  
Integer i = new Integer(10);  
int k = i.intValue(); 
即Integer.intValue(); 
  
2.int转换成Integer  
int i = 10;  
Integer it = new Integer(i); 

3.String转换成int的方法  
String str = "10";   
Integer it = new Interger(str);    
int i = it.intValue();   
即:int i = Integer.intValue(string); 
  
4.int转换成String  
int i = 10;  
(1)String s = String.valueOf(i);  
(2)String s = Ingeger.toString(i);  
(3)String s = "" + i; 
  
5.String转换成Integer  
String str = "10";  
Integer it = Integer.valueOf(str); 
  
6.Integer转换成String  
Integer it = new Integer(10);  
String str = it.toString(); 
 
7.String转换成BigDecimal  
BigDecimal bd = new BigDecimal(str); 
 
8.日期  
Calendar calendar = Calendar.getInstance(); 
int year = calendar.get(Calendar.YEAR); 
int month = calendar.get(Calendar.MONTH)+1; 
int day = calendar.get(Calendar.DATE);  
//获取今天的日期字符串 
String today = java.text.DateFormat.getDateInstance().format(new java.util.Date()); 
//获取今天的日期 
new java.sql.Date(System.currentTimeMillis()); 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章