Java、Android知识点总汇

在Log中定位问题的关键字:

  • 程序异常强制关闭 Force Close :关键字 Fatal
  • 程序无响应 Application Not Response :关键字 ANR

 

开发模式:

1、Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点
2、Abstract Factory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。
3、Factory Method,工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类。
4、Observer,观察者模式:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新。
5、Visitor,访问者模式:表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这个元素的新操作。

 

框架:

1、MVC是模型(model)-视图(view)-控制器(controller)的缩写,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

2、MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter(MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过Controller。
在MVC里,View是可以直接访问Model的!从而,View里会包含Model信息,不可避免的还要包括一些业务逻辑。 在MVC模型里View是依赖于Model的。因此有一些业务逻辑在View里实现了,业务逻辑是无法重用的。

   3、MVVM是Model-View-ViewModel的简写,MVVM其实是对MVP的一种改进,他将Presenter替换成了ViewModel,并通过双向的数据绑定来实现视图和数据的交互。也就是说只需要将数据和视图绑定一次之后,那么之后当数据发生改变时就会自动的在UI上刷新而不需要自    己进行手动刷新。
 

 

内部类和静态内部类区别:

内部类相对于外部类来说,前者是后者的方法,所以当前者是static修饰的时候,在前者中不能访问后者中的非static属性和方法;

相反,当前者是非static修饰的时候,前者可以访问后者中的任何成员。

静态内部类可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。普通的内部类对象隐含地保存了一个引用指向创建它的外围类对象。 静态内部类的对象并不需要其外围类的对象。 

 

泛型方法:


泛型的本质便是类型的参数化,就是把类型像方法的参数那样传递。

编译器没法帮忙做类型检查,导致代码在运行时易于出现ClassCastException异常。因此,类型安全问题只能由程序员自己来把关了,泛型的使用避免了很多运行时的ClassCastException异常,程序员也无需记住各种对象的类型和担心类型匹配问题了,同时大部分情况下也不用做类型强制转换工作了。

有界类型是在类型参数部分指点extends或super,分别用上限或下限限制类型范围。

<T extends Animal>//限定T是Animal的子类

<T super Dog >//限定T是Dog的超类

public void killAll(ArrayList<T extends Object&Comparable&Serializable> animals){...};

 

反射:


反射就是把java类中的各种成分映射成一个个的Java对象。反射机制是在运行状态中,对于任意一个类都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

反射获取类的三种方法:
(1)Class c1=Class.forName("类的全路径")。(最常用)
(2)Student s = new Student();
   Class c2 = s.getClass(); 
(3)Class c3 = Student.class;

通过反射可以获取属性、方法、构造方法等。

 

接口和抽象类的区别:

 (1)接口的方法默认是public,所有方法在接口中不能有实现,抽象类可以有非抽象的方法

 (2)接口中的实例变量默认是final类型的,而抽象类中则不一定

 (3)一个类可以实现多个接口,但最多只能实现一个抽象类

 (4)一个类实现接口的话要实现接口的所有方法,而抽象类不一定

 (5)接口不能用new实例化,但可以声明,但是必须引用一个实现该接口的对象

  抽象是对类的抽象是一种模板设计,接口是行为的抽象是一种行为的规范。关注一个事物的本质的时候用抽象类;当你关注一个操作的时候用接口。
 

四种布局:

(1)LinearLayout:线性布局,垂直或水平依次排列。

(2)RelativeLayout:相对布局,通过相对定位方式。

(3)FrameLayout:没定位方式,控件都放左上角。

(4)TableLayout:表格方式排列。
(5)AbsoluteLayout,绝对位置布局。

 

Android中的文件存储:

(1)SharedPreferences存储:适合保存少量数据,适合键值对存储,存储如putString()。

(2)SQLite数据库:继承SQLiteOpenHelper抽象类,2个方法onCreate()和onUpgrade()分别创建和升级数据库,还有2个方法getReadableDatabase()和getWritableDatabase()用来创建或打开数据库并返回一个可对数据库读写的对象。
SQLiteOpenHelper构造方法有4个参数,一是context,二是数据库名,三是查询数据返回一个自定义的Cursor一般传null,四是当前数据库版本号。
CURD操作:添加用insert(),更新用update()如db.update("Book",values,"name=?",new String[]{"song"}),删除用delete()。查询最复杂用query()有7个参数,1表名,2查哪几列,3和4约束查某一行或几行,5是group by,6是group by后的过滤,7是查询结果排 序, query()会返回一个Cursor对象,可用moveToFirst(),getColumnIndex()和isAfterLast()操作Cursor。也可直接用sql操作数据库,db.rawQuery("select * from book",null),db.execSQL("insert into Book(name,price) values(?,?),new String[]             {"song","15.96"}")。除查询用rawQuery()都用execSQL()。SQLite可以解析大部分标准SQL语句,例如select * from 表名 where 条件子句 group by 分组字句 having ... order by 排序子句。Sql的limit指定查询哪些数据,count指定返回匹配的行数。having称为分组滤过条件,也就是说是分组需要的条件,所以必须与groupby联用,聚合函数计算的结果可以当条件来使用,因为它无法放在where里只能通过having这种方

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值