#StringBuilder源码分析
作者
概况
一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。
String 是 java 程序中出现比较多的对象,分析一下 String 首先 String 是由 final 修饰的。因此 String 不可变,无法继承。
将方法或类声明为final主要目的是:确保它们不会再子类中改变语义。String类是final类,这意味着不允许任何人定义String的子类。换言之,如果有一个String的引用,它引用的一定是一个String对象,而不可能是其他类的对象。——《Java核心技术 卷I》作者:R eversal

git下载
装完成后,还需要最后一步设置,在命令行输入:
$ git config –global user.name “Your Name” $ git config –global user.email “[email protected]”
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
关于底部导航按钮网上实现底部按钮的方法有很多,在这里RadioGroup+ViewPager+fragmnt实现的。
底部导航支持底部点击和滑动。
上图

布局代码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<RadioGroup
android:id="@+id/rg_tab_bar"
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_alignParentBottom="true"
android:background="@color/bg_white"
android:elevation="5dp"
android:orientation="horizontal">
<RadioButton
android:id="@+id/rb_channel"
style="@style/tab_menu_item"
android:drawableTop="@drawable/tab_menu_doc"
android:text="@string/tab_menu_doc" />
<RadioButton
android:id="@+id/rb_message"
style="@style/tab_menu_item"
android:drawableTop="@drawable/tab_menu_camera"
android:text="@string/tab_menu_camera" />
<RadioButton
android:id="@+id/rb_better"
style="@style/tab_menu_item"
android:drawableTop="@drawable/tab_menu_user"
android:text="@string/tab_menu_user" />
</RadioGroup>
<View
android:id="@+id/div_tab_bar"
android:layout_width="match_parent"
android:layout_height="2px"
android:layout_above="@id/rg_tab_bar"
android:background="@color/div_white" />
<android.support.v4.view.ViewPager
android:id="@+id/vpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/div_tab_bar" />
</RelativeLayout>activity代码