java数据类型
基本数据类型
数值型
整数型
long[8]
int[4]
byte[1]
short[2]
字符型
char[2]
布尔类型
boolean[1]
引用数据类型
类 class
接口 interface
数组 []
浮点类型
浮点类型在机器中存放的形式,浮点数=符号位+指数位+尾数位
尾数部分可能丢失,造成精度损失(小数都是近似值).
静态变量
在jdk8以前
我们认为静态变量是存储在方法区里面有一个静态域
在 jdk8以后
我们认为在堆里面 : xx类对应的class实例(对象)的尾部
最核心的一点:
被所有对象共同使用
在类加载的时候就生成了
**静态变量只有类第一次加载的时候才调用,既可以通过类名调用,也可以通过对象调用。静态方法也可以被实例化对象调用,不过一般推荐类名调用,代码更清晰。**
java静态方法和非静态方法的区别
1、静态方法(static method)
与静态成员变量一样,属于类本身,在类装载的时候被装载到内存中,不自动进行销毁,会一直存在内存中,直到JVM关闭;
2、非静态方法(non-static method)
又称实例化方法,属于实例对象,实例化之后才会分配内存,必须通过类的实例来引用,当实例对象被JVM回收之后,也跟着消失
静态方法和实例方法的区别
1.生命周期
静态方法的生命周期从进程创建时就开始,一直到进程结束,所以说静态方法是全局的,贯穿整个进程
实例方法的生命周期,从实例化对象开始,一直到实例化对象被注销回收之后结束
所以实例方法的生命周期是短于静态方法的生命周期,这也是实例方法中不能调用静态方法的原因
2.调用方式
在外部调用静态方法时,可以使用 “类名.方法名”的方式,也可以使用“对象.方法名”的方式,也就是说调用静态方法时无需创建对象
https://blog.csdn.net/weixin_36087674/article/details/114718529
逻辑运算符
取整方法
方法一:向上取整Math.ceil();
举例:Math.ceil(11.4)=12; Math.ceil(-11.6)=-11;
方法二:向下取整Math.floor();
举例:Math.floor(11.7)=11;Math.floor(-11.2)=-12;
方法三:四舍五入Math.round();
顾名思义,四舍五入后取整,其算法为Math.round(x+0.5),即原来的数字加上0.5后再想下取整即可。
举例:Math.round(11.5)=12;
Math.round(-11.5)=-11;
访问类型
本类 | 同胞 | 子类 | 不同胞 | |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
默认 | √ | √ | × | × |
private | √ | × | × | × |
算术运算符重点
1.a%b 取模的公式遵循(重点)
a - a/b * b
2.++的使用
作为独立语句使用 前和后 都完全等价于 i=i+1;
作为表达式使用
前++ : ++i先自增后赋值
后++ : i++先复制后自增
3.面试题
面试题一
面试题 二
面试题 三
i=10 i1=11 i2=20
i2=19 i=19(先-1再赋值)
final
https://blog.csdn.net/MyArray/article/details/90237422
- final 修饰的属性又叫常量,一般用 XX_XX_XX 来命名
- final 修饰的属性在定义时,必须赋初值,并且以后不能再修改,复制可以在如下位置之一:
- 定义时: 如果 public final double TAX_RATE = 0.08;
- 在构造器中;
- 在代码块中;
- 如果 final 修饰的属性是静态的,则初始化的位置只能是
- 定义时;
- 在静态代码块 不能在构造器中赋值;
- final 类不能继承,但是可以实例化对象;
- 如果类不是 final 类,但是含有 final 方法,则该方法虽然不能重写,但是可以被继承;
- 一般来说如果一个类已经是final类了,就没有必要再将方法修饰成 final 方法.
- final 不能修饰构造方法(及构造器)
- final 和 static 往往搭配使用,不会导致类的加载,效率更高.底层编译器做了优化处理.
class Demo{
public static final int i = 16;
static{
System.out.println("韩顺平教育~");
}
}
- 包装类( Integer,Double,Float,Boolean 等都是 final),String 也是 final 类.
final 关键字可以用来修饰 类,方法和变量(成员变量和局部变量)
1、修饰类
final修饰类时,说明该类你不想被别人继承!一个类不被别的类继承就可以使用final来修饰
注意:final类中的所有成员方法都会被隐式地指定为final方法。
2、修饰方法
当一个方法被final修饰后,就代表该方法无法被重写,如果你想明确禁止该方法在子类中被覆盖的情况下,才将方法设置为final的,这样你就无法重写该方法了
但是:如果父类的 final修饰的方法设置为private,则子类可以写一个同名的方法,此时 ,该同名的方法不再产生final的报错,而是在子类重新定义了一个方法(注:类的private方法会隐式地被指定为final方法。)
3、修饰变量
被final修饰的变量其实就相当于定义了一个常量,无法被修改的变量,如果final修饰的是一个**基本数据类型**的变量,那么这个变量的值就定了,不能变了,而如果修饰的是一个**引用变量**,那么该变量存的是一个内存地址,该地址就不能变了,但是该内存地址所指向的那个对象还是可以变的,就像你记住了人家的门牌号,但你不能管人家家里人员数量
但是你可以改那个对象的内容:
还有的人给方法定义的参数是 final类型的,是不想别人在方法内部修改参数的值,如果final修饰的是一个基本类型,那么是可以的,如果修饰的是引用类型,那么便不行了,因为就如上文那个str.append 对象的内容是可以变化的!