Android学习笔记day12
2016-03-04 19:40
381 查看
JAVA反射机制:
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
获取class对象的方式:
1.通过Object类的getClass()方法。例如:
Class c1 = new String("").getClass();
2.通过Class类的静态方法——forName()来实现:
Class c2 = Class.forName("MyObject");
3.如果T是一个已定义的类型的话,在java中,它的.class文件名:T.class就代表了与其匹配的Class对象,例如:
Class c3 = Manager.class;
Class c4 = int.class;
Class c5 = Double[].class;
Class类中存在以下几个重要的方法:
1.getName()
一个Class对象描述了一个特定类的特定属性,而这个方法就是返回String形式的该类的简要描述。由于历史原因,对数组的Class对象
调用该方法会产生奇怪的结果。
2.newInstance()
该方法可以根据某个Class对象产生其对应类的实例。需要强调的是,它调用的是此类的默认构造方法。例如:
MyObject x = new MyObject();
MyObject y = x.getClass().newInstance();
3.getClassLoader()
返回该Class对象对应的类的类加载器。
4.getComponentType()
该方法针对数组对象的Class对象,可以得到该数组的组成元素所对应对象的Class对象。例如:
int[] ints = new int[]{1,2,3};
Class class1 = ints.getClass();
Class class2 = class1.getComponentType();
而这里得到的class2对象所对应的就应该是int这个基本类型的Class对象。
5.getSuperClass()
返回某子类所对应的直接父类所对应的Class对象。
6.isArray()
判定此Class对象所对应的是否是一个数组对象。
第九天作业练习:
写一个字符串反转的方法,把“abcdefg”转换成“gfedcba”。
package com.xiaofei.zuoye;
public class demo03 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "abcdefg";
StringBuffer sb = new StringBuffer(str);
sb = sb.reverse();
System.out.println(sb);
}
}
替换字符串,把“abc.abc.abc”替换成“abc/abc/abc”。
package com.xiaofei.zuoye;
public class demo04 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String a = "abc.abc.abc";
String b = a.replaceAll("\\.", "/");
System.out.println(b);
}
}
日期处理,取得从1970到现在的毫秒数,格式为yyyy-MM-dd-HH:mm:ss再转换成String输出。
package com.xiaofei.zuoye;
public class demo09 {
public static void main(String[] args) {
java.util.Date date = new java.util.Date();
//取得从1970年到现在的毫秒数
long now = date.getTime();
//格式化日期
java.text.SimpleDateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//转为字符串
String dateStr = df.format(date);
System.out.println(dateStr);
}
}
不使用中间变量 把两个变量的值互换
package com.xiaofei.zuoye;
public class demo06 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a = 20;
int b = 30;
a = a*b;
b = a/b;
a = a/b;
System.out.println("a="+a+" b="+b);
}
}
冒泡排序
package com.xiaofei.zuoye;
import java.text.FieldPosition;
import javax.naming.ldap.SortControl;
public class demo07 {
public static void main(String[] args) {
int[] list = {20,8,9,56,48,52,96};
for(int i = 0;i<list.length;i++){
System.out.println(list[i]+" ");
}
System.out.println("\n");
sort(list);
for(int i = 0;i<list.length;i++){
System.out.println(list[i]+" ");
}
}
private static void sort(int[] list) {
int temp;
for(int i = 0;i<list.length;i++){
for(int j=i+1;j<list.length;j++){
if(list[i]>list[j]){
temp = list[i];
list[i] = list[j];
list[j] = temp;
}
}
}
}
}
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
package com.xiaofei.zuoye;
import java.util.Scanner;
public class demo10 {
public static void main(String[] args) {
int i = 0;
int LetterCount = 0;
int SpaceCount = 0;
int NumberCount = 0;
int OtherCount = 0;
Scanner in = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String str = in.nextLine();
//将字符串转化为字符数组
char[] ch = str.toCharArray();
for ( i = 0; i < str.length(); i++) {
if(Character.isLetter(ch[i])){
LetterCount++;
}
if(Character.isSpace(ch[i])){
SpaceCount++;
}
if(Character.isDigit(ch[i])){
NumberCount++;
}
else{
OtherCount++;
}
}
System.out.println("字符的个数为:"+LetterCount);
System.out.println("空格的个数为:"+SpaceCount);
System.out.println("数字的个数为:"+NumberCount);
System.out.println("其他字符个数为:"+OtherCount);
}
}
编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
package com.xiaofei.zuoye;
public class demo08 {
public static void main(String[] args) {
String srcStr1 = "我ABC";
String srcStr2 = "我ABC汉DEF";
splitString(srcStr1,4);
splitString(srcStr2,6);
}
public static void splitString(String src, int len) {
int byteNum = 0;
if(null==src){
System.out.println("The source String is null");
return;
}
byteNum = src.length();
byte bt[] = src.getBytes();//将String转换为byte字节数组
if(len>byteNum){
len = byteNum;
}
//判断是否出现了截半,截半的话ASC码应该是小于0的值
if(bt[len]<0){
String subStrc = new String(bt, 0, --len);
System.out.println(subStrc);
}else{
String subStrc = new String(bt, 0, len);
System.out.println(subStrc);
}
}
}
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
获取class对象的方式:
1.通过Object类的getClass()方法。例如:
Class c1 = new String("").getClass();
2.通过Class类的静态方法——forName()来实现:
Class c2 = Class.forName("MyObject");
3.如果T是一个已定义的类型的话,在java中,它的.class文件名:T.class就代表了与其匹配的Class对象,例如:
Class c3 = Manager.class;
Class c4 = int.class;
Class c5 = Double[].class;
Class类中存在以下几个重要的方法:
1.getName()
一个Class对象描述了一个特定类的特定属性,而这个方法就是返回String形式的该类的简要描述。由于历史原因,对数组的Class对象
调用该方法会产生奇怪的结果。
2.newInstance()
该方法可以根据某个Class对象产生其对应类的实例。需要强调的是,它调用的是此类的默认构造方法。例如:
MyObject x = new MyObject();
MyObject y = x.getClass().newInstance();
3.getClassLoader()
返回该Class对象对应的类的类加载器。
4.getComponentType()
该方法针对数组对象的Class对象,可以得到该数组的组成元素所对应对象的Class对象。例如:
int[] ints = new int[]{1,2,3};
Class class1 = ints.getClass();
Class class2 = class1.getComponentType();
而这里得到的class2对象所对应的就应该是int这个基本类型的Class对象。
5.getSuperClass()
返回某子类所对应的直接父类所对应的Class对象。
6.isArray()
判定此Class对象所对应的是否是一个数组对象。
第九天作业练习:
写一个字符串反转的方法,把“abcdefg”转换成“gfedcba”。
package com.xiaofei.zuoye;
public class demo03 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "abcdefg";
StringBuffer sb = new StringBuffer(str);
sb = sb.reverse();
System.out.println(sb);
}
}
替换字符串,把“abc.abc.abc”替换成“abc/abc/abc”。
package com.xiaofei.zuoye;
public class demo04 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String a = "abc.abc.abc";
String b = a.replaceAll("\\.", "/");
System.out.println(b);
}
}
日期处理,取得从1970到现在的毫秒数,格式为yyyy-MM-dd-HH:mm:ss再转换成String输出。
package com.xiaofei.zuoye;
public class demo09 {
public static void main(String[] args) {
java.util.Date date = new java.util.Date();
//取得从1970年到现在的毫秒数
long now = date.getTime();
//格式化日期
java.text.SimpleDateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//转为字符串
String dateStr = df.format(date);
System.out.println(dateStr);
}
}
不使用中间变量 把两个变量的值互换
package com.xiaofei.zuoye;
public class demo06 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a = 20;
int b = 30;
a = a*b;
b = a/b;
a = a/b;
System.out.println("a="+a+" b="+b);
}
}
冒泡排序
package com.xiaofei.zuoye;
import java.text.FieldPosition;
import javax.naming.ldap.SortControl;
public class demo07 {
public static void main(String[] args) {
int[] list = {20,8,9,56,48,52,96};
for(int i = 0;i<list.length;i++){
System.out.println(list[i]+" ");
}
System.out.println("\n");
sort(list);
for(int i = 0;i<list.length;i++){
System.out.println(list[i]+" ");
}
}
private static void sort(int[] list) {
int temp;
for(int i = 0;i<list.length;i++){
for(int j=i+1;j<list.length;j++){
if(list[i]>list[j]){
temp = list[i];
list[i] = list[j];
list[j] = temp;
}
}
}
}
}
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
package com.xiaofei.zuoye;
import java.util.Scanner;
public class demo10 {
public static void main(String[] args) {
int i = 0;
int LetterCount = 0;
int SpaceCount = 0;
int NumberCount = 0;
int OtherCount = 0;
Scanner in = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String str = in.nextLine();
//将字符串转化为字符数组
char[] ch = str.toCharArray();
for ( i = 0; i < str.length(); i++) {
if(Character.isLetter(ch[i])){
LetterCount++;
}
if(Character.isSpace(ch[i])){
SpaceCount++;
}
if(Character.isDigit(ch[i])){
NumberCount++;
}
else{
OtherCount++;
}
}
System.out.println("字符的个数为:"+LetterCount);
System.out.println("空格的个数为:"+SpaceCount);
System.out.println("数字的个数为:"+NumberCount);
System.out.println("其他字符个数为:"+OtherCount);
}
}
编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
package com.xiaofei.zuoye;
public class demo08 {
public static void main(String[] args) {
String srcStr1 = "我ABC";
String srcStr2 = "我ABC汉DEF";
splitString(srcStr1,4);
splitString(srcStr2,6);
}
public static void splitString(String src, int len) {
int byteNum = 0;
if(null==src){
System.out.println("The source String is null");
return;
}
byteNum = src.length();
byte bt[] = src.getBytes();//将String转换为byte字节数组
if(len>byteNum){
len = byteNum;
}
//判断是否出现了截半,截半的话ASC码应该是小于0的值
if(bt[len]<0){
String subStrc = new String(bt, 0, --len);
System.out.println(subStrc);
}else{
String subStrc = new String(bt, 0, len);
System.out.println(subStrc);
}
}
}
相关文章推荐
- Android之Lollipop DevicePolicyManager学习(上)
- 升级到Android Studio ,出现Toolbar无法使用的情况.
- Android的Message Pool是个什么鬼——源码角度分析 .
- Android EventBus实战 没听过你就out了
- Android消息机制不完全解析(下) .
- Android 屏幕适配
- Android数据存储方式之——文件存储
- Android消息机制不完全解析(上) .
- Gprinter Android SDK V2.1.4 使用说明
- Android Studio -修改LogCat的颜色
- Android开发之基本控件
- Android之ListView的高级封装!
- 从setContentView方法分析Android加载布局流程
- Android:Animation专题:1.alpha、scale、translate、rotate、set的xml属性及用法
- Android使用Messenger进行Service IPC通信分析
- Android控件ListView
- Android 播放提示音
- android 下的多线程
- 【安卓基础四】adb命令使用Heap检测和分析Android应用内存
- Android开发中的View类的视图属性focusableInTouchMode这个属性跟focusable有什么区别?