Java基础部分总结--01

匿名 (未验证) 提交于 2019-12-02 21:40:30

Java基础部分总结―01


1 类型转换

1-1基本数据类型转化

自动转换

  • 取值范围小的类型自动提升为取值范围大的类型
转换规则

byte、short、char运算时直接提升为int。

public class Main {     public static void main(String[] args) {         int i = 1;         double d = 2.5;         System.out.println(i+d);//out 3.5     } }

double 类型内存8个字节, int 类型内存4个字节。因此int类型的i被自动提升成了取值范围大的double。

强制类型转换

取值范围大的类型强制转换成取值范围小的类型。

转换格式

数据类型 变量名 = (数据类型)被转换数据值

 public static void main(String[] args) {         int i = 1;         double d = 2.5;         /*          *i是int类型的,d是double类型的,两者相加int类型的i会自动提升为double类型的,因此结果为double类型的          * 当用int类型的result接收的时,会产生大范围向小范围的转化,需要使用强制转换。          * */         //        int result = i + d;  //错误         int result = (int) (i + d);         System.out.println(result);//3     }
注意事项:
  • 浮点转换为整数,直接取消小数,不是四舍五入,会造成数据精度变化。

1-2引用类型转化――<多态的转型>

与基本数据类型转换相同,引用数据类型的转换也分为两种:

向上转型:

  • 多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的。(同基本类型的自动转型,向大范围转换)
使用格式

父类引用指向一个子类对象的时候,就是发生了向上转型。

//父类类型 变量名 = new 子类类型(); //如: Animal a = new Cat(); //或者通过函数调用的时候传入参数 Show(new Cat());  void Show(Animal ani){ //...代码段 }
向下转型:
  • 父类类型向子类类型向下转换的过程,强制的过程。(同基本类型的强制转换类似,由大转小)
使用格式
  • 在强制类型转换前要进行instanceof关键字判断,否则容易报错!
  • 【在C#中用is判断,用as转换】
    if(变量名 instance 变量类型)
    //如果变量属于该数据类型,返回true;
    //如果变量不属于该数据类型,返回false;
  • 子类类型 变量名 = (子类类型) 父类变量名
 public static void main(String[] args) {  //Object类是所有类的父类         Object obj = "123456";         //判断是否可以转换,由于String类是Object类的子类,故父类向子类转换要进行强制转换         if (obj instanceof String) {             String Str = (String) obj;//强制转换             System.out.println(Str);         }         else {             System.out.println("转换失败!");         }     } //输出结果为123456;

2 运算符

前++和后++的区别:
  • 独立运算:
    在独立运算时,二者没有区别。++i和i++最后得到的i的结果相同。
 public static void main(String[] args) {         int i = 0;         int j=i;         i++;         ++j;         System.out.println(i);//out i=1         System.out.println(j);//out j=1     }

唯一的区别
C++中是这样的…
i++在实现的时候,产生了一个local object,使得效率比++i低。

//++i 的版本 NT INT::operator++() { 	*this=*this+1; 	return *this; } //i++ 的版本 const INT INT::operator ++(int) { 	INT oldvalue=*this; 	*this=*this+1; 	return oldvalue; }

==可以看出i++返回的是值类型,++i返回的是引用类型,由于引用类型可以作为左值,故可以

++++i;//ok //i++++;//err
  • 混合运算
    前++:先赋值给其他变量,在自增;
    后++:先自增在赋值
 public static void main(String[] args) {         int i = 0;         int j = i;          for (int i1 = 0; i1 < 10; i1++) {             i = i++;             j = ++j;         }         System.out.println(i);//out i=0         System.out.println(j);//out j=10     }
三目运算符
  • 格式
    数据类型 变量名 = 布尔类型表达式?结果1:结果2
  • 应用
    常常可以代替单个if-else语句,使得代码变简洁
public static void main(String[] args) {         Random r = new Random();         int i = r.nextInt(10);         System.out.println("i=" + i);         //        if(i>5){         //            i++;         //        }         //        else {         //            i--;         //        }         i = i > 5 ? ++i : --i; //使用三目运算符代替if-else,注意要使用++i和--i;         System.out.println(i);     }
==比较运算符
  • 对于基本数据类型:比较的是值
  • 对于引用数据类型:比较的是两个对象的地址值

3 数组

定义

  • 方法一:只定义
格式

数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度];

  • 方法二:定义+初始化
格式

数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3…};

  • 方法三:方法二的简写
格式

数据类型[] 数组名 = {元素1,元素2,元素3…};

数组的访问

  • 采用索引来访问:索引最大值=数组长度-1;
  • 数组长度 = 数组名.length;

数组的遍历

采用for(int i=0;i<数组名.length ; ++i )
for(数组类型 遍历变量:数组名)

IDEA快捷键

  • 数组遍历 :数组名.fori 或数组名.iter

代码分析

 public static void main(String[] args) {         //数组的定义         int[] a = new int[10];//方法一,定义了一个int类型的数组a;         int[] b = new int[]{1, 2, 3};//方法二,定义并初始化了数组b,其值为1,2,3;         int[] c = {4, 5, 6};//方法三,定义并初始化了数组c;         //对数组a遍历赋值         for (int i = 0; i < a.length; i++) {             a[i] = i;         }         //对数组a遍历输出         for (int i : a) {             System.out.println(i);         }     }
转载请标明出处:Java基础部分总结--01
文章来源: https://blog.csdn.net/weixin_42828723/article/details/90343410
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!