为了账号安全,请及时绑定邮箱和手机立即绑定

我的云笔记我的云笔记

标签:
Android

接口可以继承接口,用extends
Equal和==一样,只不过在string中进行了重写
成员变量在创建对象时执行
值传递和引用传递
1.对象就是传引用
2.原始类型就是传值
3.String,Integer, Double等immutable类型因为没有提供自身修改的函数,每次操作都是新生成一个对象,所以要特殊对待。可以认为是传值。
Integer 和 String 一样。保存value的类变量是Final属性,无法被修改,只能被重新赋值/生成新的对象。 当Integer 做为方法参数传递进方法内时,对其的赋值都会导致 原Integer 的引用被 指向了方法内的栈地址,失去了对原类变量地址的指向。对赋值后的Integer对象做得任何操作,都不会影响原来对象。
class Test01
  {
  public static void main(String[] args)
  {
  StringBuffer s= new StringBuffer("good");
  StringBuffer s2=s;
  s2.append(" afternoon.");
  System.out.println(s);
  }
  }
class Test02
  {
  public static void main(String[] args)
  {
  int i=5;
  int i2=i;
  i2=6;
  System.out.println(i);
  }
  }
s2=s表示s2指向s

继承:属性的初始化先执行,构造方法的初始化后执行
抽象类的来源:子类在重写父类的方法后,父类的方法就显得有些多余,那么就干脆定义为抽象类,不要方法体了
序列化:
a)New一个student类
b)New一个序列化类
i.oos=new objectoutputstream(new fileoutputstream(file));file为文件的地址;比如:string file =”demo/obj.dat”
ii.stu=new student(有参);
iii.oos.writeobject(stu);
iv.student类要实现序列化接口才不会报错
v.反序列化亦然

多线程:
1.Yield(),让出处理器占用时间
2.While(变量),通过判断变量的值来停止线程
3.争用条件:多个线程访问同一块内存.(能量不守恒的原因)
举例:A线程访问内存,并得到了其中的数据,在CPU中运算,在它把结果返回到内存中时,
B也访问了这块内存,取得了这个数据,计算后并返回,此时A才返回了数据,这就是争用条件
4.互斥与同步:互斥A执行完B才能执行,同步:A执行完后通知B我执行完了
注意:wait()和notify()不是在同一个方法中执行的,因为所同步是两个线程之间的交互
sycnized加锁后如果条件不满足会长时间占用锁,就通过锁对象上的wait(),释放锁资源,让其他线程利用这个资源.他自己进入临界区等待唤醒
同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 
异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。

数据结构
栈: 先进后出,abc进,cba出.
队列:先进先出,abc进,abc出.
数组:长度固定,只能存储单一数据,查找快,增删慢.(集合长度不固定,可以存储所有数据(本来不可以存储基本类型,但是基本类型可以进行自动装箱操作,所以也可以存储)).
链表:类似链子把每个元素串起来,每个元素内包含数据和地址,元素本身也有一个地址,元素内包含的地址指向下一个元素本身的地址.增删快(因为不用遍历,直接根据地址断开链接),查找慢(需要遍历每个元素).
Hash表: 元素为链表的数组.(添加到哈希表中的元素的位置不是我们确定的,而是根据哈希算法确定的).
二叉树:如果树里面没有任何元素,那么存入的第一个元素就叫这棵树的根结点,根结点下面有两个结点,每个结点下面又有两个结点.后面存入的数从根结点开始与下面的结点判断,差为负数,放在结点的左边,差为正数,放结点的右边,差为0,不添加这个数,从上往下比较,直到确定自己的位置;
Collection(集合):精通API的使用
Add,remove,size,isempty,toarray,contains:判断是否包含,retain:保留和另一个集合重叠的部分;迭代器(记忆,构造方法,所以他是被调用的)iterator:1.注意返回值类型2.对象调用迭代器,而不是new(三种循环方式)
List: 1.元素是有序的(存储和取出顺序一致);
2.元素可以重复,因为该集合体系有索引
Arraylist:底层数据结构是数组,所以可以操作索引的方法是它的特有的方法;
Linkedlist:底层数据结构是链表,所以增删快,查找慢的方法适合它;

Set: 元素唯一;
    元素是无序的(set只是个接口,无序还是有序要看他具体的实现类),元素不可以重复(因为它的add()方法实际执行的是map中的方法,map中的key是不允许重复的, key不允许重复的详解:

public V put(K key, V value) {
if (key == null)
return putForNullKey(value);//如果它为空把这个值存入哈希表
int hash = hash(key.hashCode());
int i = indexFor(hash, table.length);// 取得了当前的要添加对象的 hashcode
for (Entry<K,V> e = table[i]; e != null; e = e.next) {
Object k;
// e.hash == hash------讲的是循环遍历哈希表中的数和新存入的数比较, 如果两个对象相同,那么他们的hashcode一定要相同,第一步比较它俩只是为了提高效率
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
})
思路的一个整理:1.首先进来先比较元素的哈希值,
哈希值相同:会进行后面的比较判断
哈希值不同:直接添加元素
2.哈希值相同,我们要进行后面的地址值和内容的比较
地址值
相同:不添加元素
不同:比较内容,如果内容相同,不添加,如果内容不同添加元素

  • 如果你不清楚,那么ok:
  • 以后只要见到哈希结构的集合,想要保证里面元素的唯一性的话,只需要重写里面的hashCoede()和equals()这两个方法即可
  • 怎么重写:自动生成即可

int和string类型已经默认重写了这两个方法,但是自定义的strudent类系统没有重写这两个方法所以我们要重写这两个方法;

    Treeset:底层数据结构是二叉树;

Tree排序的两种方式:
1)第一种排序方式:自然排序
       让元素自身具备比较性。元素需要实现Comparable接口,覆盖compareTo方法。这种方式也被称为元素的自然顺序(如果是基本类型,那就是自然顺序,由小到大。如果是对象,那就是比较哈希值,由小到大。),或者叫做默认顺序。

2)第二种方式:比较器
        当元素自身不具备比较性时,或者具备的比较性不是所需要的。这时就需要让集合自身具备比较性。
        在集合初始化时,就有了比较方式。定义一个比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。
        比较器构造方式:定义一个类,(用匿名内部类)实现Comparator接口,覆盖compare方法。
        当两种排序都存在时,以比较器为主。

泛型就是把明确类型的工作放在创建对象和调用方法之后,类比多态的传参,

Map:
1.键是唯一的 2.值是可以重复的(添加方法put就是set集合底层执行的)
HashMap
1元素顺序:元素顺序不可预测(首先得理解什么是哈希,添加到哈希表中的元素的位置不是我们确定的,而是根据哈希算法确定的,所以所有底层是哈希算法的集合都是无序的)
2底层算法:哈希算法
3对键没有要求(相对于treemap来讲的, treemap用的是二叉树算法,肯定是按一定顺序排序的(具体按什么顺序是用户决定的))
Treemap
1元素顺序:元素顺序与键的排序规则有关
2底层算法:Tree算法

会按12359的顺序排列(自然排序)而不是按输入顺序;

HashMap与TreeMap的相同点与不同点
相同点:主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复。
不同点:
1.HashMap里面存入的键值对在取出的时候是随机的,也是我们最常用的一个Map.根据键可以直接获取它的值,
具有很快的访问速度。在Map 中插入、删除和定位元素,HashMap 是最好的选择。
2.TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。
恒久不变

3.什么是补间动画: 建立起起始和结束画面,中间透明 缩放 旋转 平移过程会自动生成;
4.如何通过补间动画实现图片缩放
1)初始化要缩放的组件
2)设置一个点击事件
3)new ScaleAnimation,给方法的参数赋值
对象.方法()
4)组件名.StartAnimation();

1.2.3.4.1.android 中有哪几种解析xml的类?
JSON解析介绍?
Json:
1.jsonobject
2.jsonarray
2.Gson:

初级界面(B卷)
安卓第六天必须要看

  1. 横竖屏切换时候Activity的生命周期。
    答: 1、不设置Activity的android: configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次。
    2、设置Activity的android: configChanges=“orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次。
    3、设置Activity的android: configChanges=“orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfiguration方法

1代码创建UI
1.删除默认的setContextView自己画一个新布局,画控件,添加控件到布局
最后一行代码是this.setcontenxtview(新布局)
2.打气筒三种方式都是要得到inflate对象;
1)getSystemService(LAYOUT_INFLATER_SERVICE);
2)getLayoutInflater();
3)LayoutInflater.from(this);
10Activity跳转
1.显示跳转:
已知包名和类名,setClass;清单文件注册,只配置inten-filter
2.隐式跳转:
setAction,配置时要多添加两个结点(action和category);

3.Android跳转时界面切换动画(移动、缩放、透明度渐变、旋转)
1)先实现页面跳转
2)在startActivty(intent)后面加入overridePendingTransition(enterAnim, exitAnim):切换动画。
一、enterAnim:表示另一个Activity进入时的动画(格式:R.anim.alpha_in)
二、exitAnim:表示当前Activity退出时的动画(格式:R.anim.alpha_out)
3)怎么创建动画xml文件?
1:在res文件下面创建一个anim文件
2:添加动画文件
<?xml version="1.0" encoding="UTF-8"?>
<alpha android:toAlpha="1.0" android:fromAlpha="0.0" android:duration="4000" xmlns:android="http://schemas.android.com/apk/res/android">
<!-- duration动画持续时间 -->
<!-- alpha:透明度(0-1 透明到不透明) -->
</alpha>
4.带返回值的跳转
前面先要有请求和返回onActivityResult(请求码,响应码,第二个页面的返回的intent(里面包含有数据))
5.Activity销毁方式:
1)返回键:移出栈
2)finish():销毁activity,但没有释放资源,由安卓系统决定何时释放
3)onDestroy():销毁,释放资源.
如何一键退出所有activity-->(百度)
6.Xml中设置category
让该activity随系统启动而运行;
11Activity启动模式(一无所知)

杂:
settexteview(context),context表示,这个东西依赖于这个context环境,或者在这个环境内展示.
应用启动过程
尺寸资源:dimens.xml
属性动画:是补间动画的增强功能,它更灵活
get和post请求
Xml json 解析
自定义控件
View的三个构造
新建的MyView里调用ondraw方法

属性和变量的区别
属性可以跨类,变量不行,属性通过get/set方法封装,提高访问权限,变量不能

Notification
得到builder对象
Builder设置属性
Builder.build()得到notification
得到通知管理类notificationManger
Manager.notify(0,notification)
上下文菜单
注册上下文菜单
重写上下文菜单方法oncreatcontextmenu()
重写selected方法

广播
一个类发送
一个类继承广播才能接收

过滤器:告诉Android系统自己能够处理哪些隐形的Intent请求
动态注册:代码中添加action

有序广播和无序广播,默认是无序广播

Udp通过包传递数据
Tcp通过流传递数据

关系型数据库:大概解释是,行和列组成的表

Grirdview
Spinner就是一个框框, 点击框框会出现下拉菜单

Fragment:类似qq底部点击进入另一个界面

Viewpager 视图左右滑动

内容提供者:跨程序读取数据(唯一)

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消