JavaSE基础篇:数据类型
每天定期更新本人从0到1的Java学习过程
//注意:本人在每个输出语句后的 “//” 符号显示的的是当前语句的运行结果!!!方便比较
数据类型
public class demo1 { public static void main(String[] args) { //数据类型:基本类型,引用类型 //八大基本数据类型(Java是强类型语言) //整数 int num1=10; byte num2=20; short num3=30; long num4=30L;//Long类型要在数字后面加L //小数:浮点型 float num5=50.1F;//float类型要在数字后面加个F double num6=3.141592653589793238462643; System.out.println(); //字符 char name='k'; //字符串,String不是关键词,类,属于引用类型 String names="king"; //布尔型 boolean flag=true; //boolean flag=false; //引用数据类型:类,接口,数组 } }
数据类型拓展
public class demo{ public static void main(String[] args) { //整数拓展 :进制 二进制 十进制 八进制 十六进制 int i=10; int i2=010;//八进制 int i3=0x10;//十六进制 System.out.println(i); System.out.println(i2); System.out.println(i3); //======================================================= //浮点数拓展: 银行业务怎么表示钱 //要用BigDecimal 数学工具类 //======================================================= //float 有限的 离散的 本身有误差 大约 接近但不等于 //因此尽量避免使用浮点数进行比较 // double float f=0.1f;//0.1 double d=1.0/10;//0.1 System.out.println(f==d);//flase f:0.1 d:0.1 float d1=2323232323f; float d2=d1+1; System.out.println(d1==d2);//true //==比较的是地址因此返回true //========================================= //字符拓展 //========================================= char c1='a'; char c2='中'; System.out.println(c1); System.out.println((int)c1);//强制转换 System.out.println(c2); System.out.println((int)c2);//强制转换 //所有字符的本质还是数字 //编码 Unicode表 2字节 0-65536 char c3='\u0061'; System.out.println(c3);//从表中找,c3就是a //转义字符 //\t 制表符 //\n 换行 System.out.println("Hello\tworld"); //思考 System.out.println("==================================="); String sa=new String("hello world"); String sb=new String("hello world"); System.out.println(sa==sb);//flase System.out.println(sa.equals(sb));//true //为什么? String sc="hello world"; String sd="hello world"; System.out.println(sc==sd); //答案:==比较的是地址而equal比较的才是值 //布尔值扩展 boolean flag=true; if(flag=true){}//新手 if(flag){}//老手 //是一样的 } }
Java基础:强制转换和自动转换问题
public class demo2 { public static void main(String[] args) { int i=128; byte b=(byte)i;//-128,内存溢出啊 //注:小数优先级大于整数 //由低到高(优先级) //byte,short,char->int->long->float->double //强制转换 (类型)变量名 由高到低 //自动转换 由低到高 System.out.println(i);//128 System.out.println(b);//-128 //注意: 1.不能对布尔进行转换 // 2.不能把对象类型转换成不想干的类型 // 3.把高容量转换成低容量的时候,强制转换 // 4.转换的时候存在内存溢出 System.out.println("======================"); System.out.println((int)23.7);//23 System.out.println((int)-45.89f);//-45 System.out.println("==============="); char c='a'; int d=c+1; System.out.println((int)c);//97 System.out.println((int)d);//98 System.out.println((char)d);//b } }
转换相关拓展
public class demo4 { public static void main(String[] args) { //操作比较大的数时候,溢出问题 //JDK7新特性,数字之间可用下划线分割,方便读数 int money=10_0000_0000; int years=20; int total=money*years;//-1474836480,计算式溢出’= long total2=money*years;//默认是int,转换之前就已存在问题 long total3=money*((long)years);//先转换在计算就没问题了 System.out.println(total3); } }
变量
类变量:从属当前类
实例变量:从属对象,如果不进行初始化,该变量会是这个类型的默认值
局部变量:必须沈明和初始化,只在当前main内可用
package com.cl.base; public class demo5 { //类变量 static;类变量从属当前类, static double salary=2500; //实例变量:从属对象:如果不进行初始化,该变量就会是这个类型的默认值 String name; int age; //main方法 public static void main(String[] args) { //局部变量:必须声明和初始化值; 只在当前main内有 //布尔值:默认值false //除了基本类型,其余默认值都是null int i=10; System.out.println(i); //变量类型 变量名字=new com.cl.base.demo5(); demo5 Demo5 = new demo5(); System.out.println(Demo5.age);//0 System.out.println(Demo5.name);//null //类变量 static System.out.println(salary); } //其他方法 public void add(){ } }
修饰符规范
package com.cl.base; public class Demo6 { //修饰符,不存在先后顺序 //final:静态变量,常量 不可改变的 static final double PI=3.14; public static void main(String[] args) { System.out.println(PI); } } //变量名规范 //所有变量,方法,类名:见名知意 //类成员变量:首字母小写和驼峰原则:monthSalary //局部变量:首字母小写和驼峰原则 //常量:大写字母和下划线:MAX_VALUE //类名:首字母大写和驼峰原则:Man,GoodMan //方法名:首字母小写和驼峰原则 run(),runRun()
二元运算符
package com.cl.operator; public class Demo01 { public static void main(String[] args) { //二元运算符 //快捷键 Ctrl+D:复制当前行到下一行 int a=10; int b=20; int c=25; int d=25; System.out.println(a+b);//30 System.out.println(a-b);//-10 System.out.println(a*b);//200 System.out.println(a/b);//0 System.out.println(a/(double)b);//0.5 } }
package com.cl.operator; public class Demo02 { public static void main(String[] args) { long a=123123123123123L; int b=123; short c=10; byte d=8; System.out.println(a+b+c+d);//Long System.out.println(b+c+d);//Int System.out.println(c+d);//Int //总结:当有long时返回的为long,其他的为int } }
一元运算符
package com.cl.operator; public class Demo03 { public static void main(String[] args) { //++ -- 自增。自减,一元运算符 int a=3; int b=a++;//执行完这行代码后,先给b赋值,在、再自增 //相当于a=a+1; System.out.println(a);//4 //相当于a=a+1; int c=++a;//执行完这行代码前,先自增,再复制 System.out.println(a);//5 System.out.println(b);//3 System.out.println(c);//5 //使用工具类运算 double pow = Math.pow(2,3); System.out.println(pow);//8.0 //28 } }
短路运算!! package com.cl.operator; public class Demo05 { public static void main(String[] args) { int c=5; 重点!boolean d=(c<4)&&(c++<4);//当前面的为错时后面不执行 System.out.println(d);//false System.out.println(c);//5 } }
位运算
package com.cl.operator; public class Demo06 { public static void main(String[] args) { /* 位运算 A=0011 1100 B=0000 1101 A&B=0000 1100 A|B=0011 1101 A^B(异或)=0011 0001 相同为0不相同为1 ~B=1111 0010 取反 2*8=16 电脑识别 2*2*2*2 位运算优点:效率高 << 左移 相当于*2 >> 右移 /2 eg: 0000 0000 0 0000 0001 1 0000 0010 2 0000 0011 3 0000 0100 4 0000 1000 8 0001 0000 16 */ } }
字符串连接符,面试题!
package com.cl.operator; public class Demo07 { public static void main(String[] args) { int a=10; int b=20; a+=b;//a=a+b a-=b;//a=a-b System.out.println(a);//10 //字符串连接符 +, String System.out.println(a+b);//30 //面试题!!!:一下两种情况有什么不同 System.out.println(""+a+b);//1020:先字符串连接没有进行运算,String类型 System.out.println(a+b+"");//30;先运算后连接 String类型
System.out.println(a+b+"king");//30king;先运算后连接,String类型 } }
三元运算符
package com.cl.operator; //三元运算符 public class Demo08 { public static void main(String[] args) { //x?y:z //如果x==true,结果为y,否则结果为z int score=80; String type=score<60?"不及格":"及格"; System.out.println(type); //运算符优先级 //指针最优,单目运算优于双目运算,如正负号 //先算术运算,后移位运算,最后位运算:eg:1<<3+2&7==(1<<(3+2))&7 } }
包机制
package com.cl.operator; public class Demo09 { /*包机制 为了更好的组织类,java提供了包机制,用于区别类名的命名空间 包语句语法格式: package pkg1[.pkg2[.pkg3]]; **一般利用公司域名倒置作为包名; 为了能够使用某一个包的成员,我们需要再java的程序中明确导入该包 使用“import”语句可完成此功能 import package1[.package2....].(classname|*);*代表全部(通配符) eg:import com.base.Demo01 import com.base.* 代表当前包的全部参数 */ }
JavaDoc
package com.cl.operator; /** * javadoc命令是用来直接生成自己的API文档的 * * @autor 作者名 * @version 版本号 * @since 指明需要最早的jdk版本 * @param参数名 * @return 返回值情况 * @throw 异常抛出情况 * */ /* * @author CL * @version 1.0 * @ since 1.8 * */ public class Doc { String name; /** * @author CL * @param name * @return * @throws Exception */ public String test(String name) throws Exception{ return name; } }