assert的作用

对某个式子进行检查,如果返回false,系统需要提供报警信息,并退出(通常在开发与测试时使用,发布后关闭)。

 

static关键字

1static成员变量

虽然java里面没有全局的概念,但是可以利用static来达到全局的效果。

静态成员变量所在的类只要被加载,就可以使用这个静态变量,并且他只有一个内存地址(也就是说不管创建几个对象,静态变量都只有一个)。使用方法:类.静态变量或者实例对象.静态变量。(这两种都是引用)

 

2static方法

静态方法是类的方法,无需创建对象就可以使用。

静态方法中不能使用this和super,也不能调用非静态方法,只能访问所属类的静态成员变量和成员方法。

可用于实现单例模式。实现原理是将类的构造函数声明为private,使得外部无法创建类的对象,然后声明一个静态方法,在静态方法里面调用类的构造函数,返回类的对象,这样直接调用静态方法就可以获得类的对象。

这里创建单例的方法为public static的,本质上相当于全局的。

 

3static代码块

主要用来初始化静态变量,以及输出一些初始化信息。

 

4static内部类

只有内部类才能被定义为static。

 

volatile作用

      这是一个类型修饰符,用来修饰被不同线程访问和修改的变量。如果不使用这个修饰符,那么变量可能被放到缓存中,导致不同线程使用的变量的值不一样,但是如果使用这个修饰符,系统不会将变量放到缓存中,而是直接从内存读取,因此不用担心不同线程读取的值不一样

但是,volatile会降低程序运行效率,尽量不要使用。

 

instanceof

用来判断左边的对象是否属于右边的类的实例,并返回boolean。

 

 如果是返回ture,否则返回false

 

strictfp

全称是strict float point:精确浮点;用来确保浮点数运算的准确性。

     可以给类,接口,方法在声明的时候添加strictfp,这样可以使程序严格按照IEEE的标准来进行浮点运算,否则JVM在不同的平台或者厂商的虚拟机上进行浮点运算时,结果可能不精确,可能产生不同的结果。

     如果我们给类修饰为strictfp,那么类里面的所有的方法都会自动被strictfp修饰。

 

数据类型

原始类型:

Java学习笔记3

除了上面这8种基本的数据类型以外,其他的数据类型都是引用类型(类,接口,数组)。

数据类型的取值范围是固定的,不会随着硬件环境或者操作系统而改变。

这里原始类型和封装类型存在不同,原始类型指的是上面这几个,参数传递时是按值传递,但是封装类型(比如String)是按引用传递。他们的初始值不一样,按值传递初始值如上,引用传递的初始值为null(此时变量没有分配内存)。

这里需要注意两点,分别是对于float和long类型的初始化:

对float类型初始化的时候,由于直接写的小数类型是double,因此我们需要进行类型转换,方式有如下两种:

float f=1.0f或者F;

float f=(float)1.0;

 

而对long初始化时,由于直接写的整数类型是int,因此为了防止数字超出int范围需要这样:

long l=26767676127898L;

 

不可变类

指的是创建了一个类的对象之后,就不允许修改它的值(成员变量)。

此外,java中所有基本类型的包装类都是不可变类(IntegerFloat),以及String

如何创建不可变类:

1、所有类的成员变量被private修饰;

2、只提供构造函数,不提供修改成员变量的函数;

3、为保证方法不被子类覆盖,将方法定义为final或者干脆将类定义为final;

4、为了保证类的成员变量是不可变换的,防止引用传递导致改变,我们使用clone方法修改成员。

Java学习笔记3

以下为重点:

按引用传递,实际上传递的是一个指针,也就是内容的内存地址。

Java学习笔记3

Java学习笔记3

      如果我们在函数的形参为引用传递,在函数内部修改的形参的值,那么传递的地址不会变,变的只是地址指向的内存里面的值。所以ss1.append("*")这句话会修改指向的字符串的值。但是ss2=ss1这句话,直接传递了地址,这是不会修改原来ss2指向的内存的值的,因此不会修改ss2。总而言之,即使是按引用传递,在执行ss2=ss1的时候,也不会修改原来的值,按引用传递,实际上是传递的指针,只有修改指向的内存的值,才可以实现修改数据。

 

数据类型转换

1、自动转换

低级到高级:byte 、short、char、int、long、float、double

遵循的原则是:转化成数据容量最大的类型,从低级到高级

注:char转化为高级的时候,会转化为对应的acsii码,byte+short+short在计算式会自动转化为int(比如两个short类型相加,结果为int)。除了+=这个运算为特殊情况,这个运算不需要进行类型变换。

即short s1=1;s1=(short)s1+1  或者 short s1=1; s1+=1;

注:基本数据类型和boolean不能相互转换

2、强制类型转换

从高级转化为低级

 

各种取整函数

下面几个方法都是Math类的静态方法:Math.round(*),,,

round:”环绕“-四舍五入

相当于在原来的数上面增加0.5然后向下取整。最好不要按照”四舍五入“来记忆,还是用加0.5来计算,比如-11.5就返回-11,而不是-12。

ceil:“天花板”-向上取整

Math.ceil(a) 也就是取大于a的最小整数,返回值为double类。

floor:”地板“-向下取整

Math.floor(a)也就是取小于a的最大整数。返回值为double类。

相关文章: