第四节课心得
小范围的数据类型可以直接转换为大范围的数据类型
比如小范围的int i=10;
转换为大范围的double j=i;或者float k=i;
如果需要把一个double 或者float类型的数据转换为int型只能通过强制转换的方式。
比如 float i=2.34f;
转换为int型就是这样:int j=(int)i;后面括号里面是int类型。最后写上需要转换的变量名。 转换后直接输出小数点前面的数。打印出来的int j=2. 不是四舍五入。是直接把小数点后面的数舍去。
要做到四舍五入需要用JDK自带的方法Math.round(i);
字符串转换为数值。当然这些字符串必须能转换。转换的比较多的是这个字符串是被双引号标识的一串数字。
比如声明了一个字符串类型String name="123"; 如果我们需要这个字符串123当数字使用那么我们就需要转换为int型。
这里就不能使用强制转换了,毕竟一个是字符串类型一个是数值类型。字符串是对象。
如何转换有一个API
Integer 是一个java中的包装类它有自己的一些方法。int是Integer下面一个数据类型
可以通过Integer来定义一个对象。
int a=Interger.parseInt(name);
上面就是通过调用Interger包装类中的方法来把字符串转换为数值类型。
只有字符串看起来是个数字的才可以转换。
如果需要把一个数字转换为字符串怎么办?
也需要调用String的一个方法valueOf
看下面的例子:
int i=68;
String str=String.valueOf(i);
这样就把一个数字转换成一个字符。
对象之间的互相转换
子类他只想调用自己的方法不想调用重写父类的方法怎么办?
多态下,父类引用指向之类对象实例化对象后只能实现子类继承父类的方法。如果子类自己有方法那么就不能调用。必须要用子类new出对象才行。
重新转换为子类对象就可以了。
通过父类引用指向之类对象创建的对象。比如:Animal cat1=new cat();cat是猫,继承animal动物父类。所以可以直接用父类来接收猫类。也就是多态。
这时候如果希望通过cat创建一个cat2.并且需要把cat1转换为cat2就需要强制转换。cat cat2=(cat)cat1;
新建一个静态方法 并且创建一个父类下的对象stu public static void fanfa(Student stu){
}
接着把继承父类的子类新建一个对象stu1在强制转换为父类的对象stu
例如:Student stu=(Student)stu1; 子类名 子类的对象B 括号子类名 父类对象A
和数值转换一样,也要强制转换。不过必须是同源才可以。就是都差不多是对象才可以。下面就是转换
public static void fanfa(Test A){ Test2 B=(Test2)A; B.Test1(); 转换后必须要调用这个方法、
}
如果需要对象实现子类自己的方法就可以这样做先父类引用指向之类对象new出来对象然后在调用转换后的方法
Test C=new Test2();
Test2(C);这样才可以实现子类自己的方法。
实现接口方法的类对象同样也需要按照上面这样做。
类对象之间的转换其实就是弥补多态下子类对象不能调用自己的方法这个缺陷的。
没有父子类关系的两个对象怎么转换呢?不能这样转换。必须知道。
父子类关系。接口和实现类的关系才可以让他们的对象互相转换。
接口或者说父类直接当一个接收的参数
同兄弟类不能互相转换 就是说父类下面有两个子类继承了父类。这两个子类之间的对象是不能互相转换的。只有父类下的对象和子类下的对象直接可以转换。
在java中如何判断到底是那个实现类或者说类的对象呢?关键字:instanceof
判断某个类或者说实现类是否是另一个类的实例话对象。
public static void TestStudent(Student student){
if(student instanceof ManStudent){
ManStudent manStudent=(ManStudent)student;
manStudent.study();
}if(student instanceof WomanStudent){
WomanStudent womanStudent=(WomanStudent)student;
womanStudent.study();
}
}
}你传进来的这个对象student 实际上就是Manstudent类的对象的话 那么就实现转换。
如果是Womanstudent类的对象的话 那么就转换为。Womanstudent的对象
某一个对象是不是另外一个实现类的对象。
这个对象是否是实现类的对象或者是子类对象。
【数组】
有序数据的集合这些数据类型一样。它的每个元素具有相同的数组名并且用下标来唯一确定数组中的元素
类型标识符 [] 数组名称 int [] intarray;
对象数组 学生类 [] 数组名 ;
创建数组
int [] intarray=new int[20];创建了一个int型的数组这个数组有20个。不过这个数组目前没有元素,我们只是知道这个数组有20个。
直接赋初值创建数组
int []intarray={6.8.9.7.8.10};这个长度是6的数组元素分别为6.8.9.7.8.10
通过length属性可以查询到一些数组的长度。
比如我们要查询上面这个数组长度。 int intarray_lenth=intarray.length; 数组的长度都是int型,后面为这个长度在取名接着后面是数组名然后调用length这个属性查询到这个数组长度。
对象数组也一样。长度同样是int型。比如:
int student_length=student.length;
如果一串数组分别是{6.8.9.7.8.10}那么我们可以通过下标来定位每一个元素 比如这串数组第一个元素为6,下标就为0。也可以理解为排列顺序为0.元素8就是1.后面以此类推。
为数组中每一个元素取名就是通过下标来取。比如
intarray[0]=60;
intarray数组中第一个元素赋值为60;
下标只是用来定位数组中每一个元素的位置。我们给一个元素赋值后还需要给那个元素另外取名:
int I0=intarray[0];
先为数组intarray中第一个元素赋值60.接着在为第一个元素取名I0。int []intarray={6.8.9.7.8.10};
我们可以随时改变这些元素的值。比如:
intarray[0]=100;取值
int I0=intarray[0];赋值
之前定义是第一个元素是6现在重新赋值为100那么intarray[0]就是100了不是6了。
实际中我们是通过循环的方式来取值。
比如:for(int i=0;i
int item=intarray[i]; 循环取出来值。item表示这个数组中所有的值。
}
只针对赋值的数组。就是把赋值的数组中的元素值都取出来。也叫显示出来调出来给我们看。intarray[i]给每个元素赋值。
取值和赋值不能超过数组长度。
length是属性不是方法,切记面试会问。这个属性不可以赋值。他的长度不可变要改变一个数组长度可以重新new出来
比如一个数组原来是: int []array=new int[20];
现在我需要改变它的长度就可以:array=new int[30];当然你直接把前面20改变也可以。呵呵
每次接收一个新的数组的时候,前面那个数组的元素值就会清空。
二维数组
声明一个二维数组和一维数组有些类似。
二维数组可以看成是一维数组的一维数组。
int [][]array=new int[20][3];
其中20是一个维度长。3又是一个维度长。也可以说成横为20竖为3.
这里的二维数组array.length长度为20
array[].length长度为3
二维数组是用两个下标来定位一个数组内的元素。比如:
array[0][0]就表示第一个横,第一竖的元素。
对象数组必须要存入第一个对象。
以下代码便是通过循环的方式给一个二维数组赋值和取值。
int [][]array=new int[20][3];
for(int i=0;i
System.out.println("第"+i+"个学生");
array[i][0]=1+i;
array[i][1]=5+i;
array[i][2]=10+i;
System.out.println(array[i][0]+" "+array[i][1]+" "+array[i][2]);
}