黑马程序员------基础知识

时间:2021-10-12 00:42:43

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、JAVA的数据类型

1)整型

byte   1B       8位   -128到127

short    2B    16位   -2^15到(2^15)-1

int     4B       32位    -2^31到(2^31)-1

long   8B      64位    -2^63到(2^63)-1

2)浮点类型

float    4B  32位              double    8B    64位

3) 字符类型

char   2B   16位

4)布尔类型       1B   boolean     false / true

引用数据类型:类、接口、数组

引用类型  变量名 = new 引用类型名(参数) //new 后面跟的一般都是类的构造器

成员:写在类体口号里面

需要注意的问题:

1、Java中的自动类型转换

正向过程:从低字节到高字节可以自动转换    byte--->short--->int--->long--->float--->double

逆向过程:从高字节到低字节用强制类型转换

例:int a = (int) 5.643     注:你想转换将丢失精度

2、boolean: 只有true和false

3、char:Java中用"\u四位十六进制的数字(即使在注释中出现\u 后面如果跟的不是4个数字也会报错)表示将字符转换成对应的unicode编码,字符类型要用单引号扩起来。

4、默认浮点类型为double, float数据类型有一个后缀为"f"或"F";long类型有一个后缀为"l"或"L"。

自动类型提升:

byte a = 1 ;                     byte b = 2 ;

a = a+b ; //编译出错,自动类型提升为int

a+ = b ;  //自加没有自动类型提升问题

类型自动提升规律:

a和b作某种运算;

a和b中有double,结果就是double;

a和b中有float,结果就是float;

a和b中有long,结果就是long;

除此之外,结果都是int

把高字节转成低字节,需要作强转  byte c = (byte) a+b ;

二、JAVA的运算符

1)算术运算符:

       单目:+(取正) -(取负) ++(自增1) --(自减1)

       双目:+ - * / %(取余)

       三目:a>b?true:false说明:当a大于b的时候,为true(也就是冒号之前的值),否则为false;这整个运算符包括一个关系运算符(可以是">""<""!="等等),一个"?",一个":",冒号前后需要有两个表达式或者是值或者是对象。

(2)关系运算:

       等于符号:==

       不等于符号: !=

       大于符号:>

       小于符号:<

       大于等于符号: >=

       小于等于符号: < =

       (3)位运算符 逻辑运算符:

       位运算符 (&)、非(~)、或(|)、异或(^)

       &:当两边操作数的位同时为1时,结果为1,否则为0.1100&1010=1000

       ~:01,10

       | :当两边操作数的位有一边为1时,结果为1,否则为0.1100|1010=1110

       ^:两边的位不同时,结果为1,否则为0.1100^1010=0110 逻辑运算符 (&&)、非(!)、或(||)

       (4)赋值运算符:

       = += -= *= /= %= &= ^= |= <<= >>=

       (5)instanceof运算符:

       该运算符是双目运算符,左面的操作元是一个对象,右面是一个类。当左面的对象是右面的类创建的对象时,该运算符运算结果是true,否则是false

       运算符优先级:

       按优先级从高到低排列如下:[] ( ) ++-- ! ~ instanceof * / % + -<< >> >>> <> < = > \ == != &^& & || ? :=

       说说&&&的区别:

       &&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false

       &&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当strnull时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33 & ++y>0) y会增长,If(x==33 && ++y>0)不会增长。

       &还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4bit位,例如,0x31 & 0x0f的结果为0x01。

三、JAVA的变量

局部变量:不是声明在类体括号里面的变量。

       (1)必须要先赋值,后使用,否则通不过编译,局部变量没有默认初始化值。

       (2)作用范围:定义开始到定义它的代码块结束。

       (3)同一范围内,不允许2个局部变量命名冲突。

       参数传递时,简单类型进行值转递(参数进行传递时都会先去栈中生成一个副本的,使用结束后释放)

       静态变量和实例变量的区别?

       语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。

       程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。

       例如,对于下面的程序,无论创建多少个实例对象,永远都只分配了一个staticVar变量,并且每创建一个实例对象,这个staticVar就会加1;但是,每创建一个实例对象,就会分配一个instanceVar,即可能分配多个instanceVar,并且每个instanceVar的值都只自加了1次。

      public class VariantTest{

              public static int staticVar= 0;

              public int instanceVar = 0;

              public VariantTest(){

               staticVar++;

               instanceVar++;

               System.out.println(“staticVar=” + staticVar +”,instanceVar=” + instanceVar);

              }

       }

    类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期。

       而实例变量取决于类的实例。每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期。

       public class Temp {

              int t; //实例变量

              public static voidmain(String[] args){

               int t=1; //局部变量

               System.out.println(t); //打印局部变量

               Temp a= new Temp(); //创建实例

               System.out.println(a.t); //通过实例访问实例变量

              }

       }

       结果为:       1       0 (成员变量具有缺省值 而局部变量则没有)

       把代码改为:

       public class Temp {

              static int t; //类变量

              public static voidmain(String[] args) {

               System.out.println(t); //打印类变量

               int t=1; //局部变量

               System.out.println(t); //打印局部变量

               Temp a= new Temp(); //创建实例

               System.out.println(a.t); //通过实例访问实例变量

              }

       }

       结果则为:0   1   0

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------