Java 基础知识点(一)

1.标识符的命名规则

标识符只能由数字、字母(a-z、A-Z)、下划线(_)和$组成,并且第一 个字符不能为数字。(通常在项目开发过程中采用驼峰命名规则,因此注意不能出现包含下划线的变量)

2.基本数据类型字节数

占1个字节:byte,boolean
占2个字节:char,short
占4个字节:int,float
占8个字节:long,double
他们对应的封装类型是:Integer ,Double ,Long ,Float,Short,Byte,Character,Boolean。

3.不可变类

不可变类:当创建了一个类的实例后,就不允许修改它的值了。特别注意: String 和包装类(Integer,Float…)都是不可变类。String 采用了享元设计模 式(flyweight)。

扩展问题 1:new String(“abc”);创建了几个对象?
1 个或者 2 个对象。如果常量池中原来有”abc”,那么只创建一个对象;如 果常量池中原来没有字符串”abc”,那么就会创建 2 个对象。

扩展问题 2:String s = “abc”; String ss = “ab” + “c”; System.out.println(s == ss); 输出为:true

扩展问题 3: String s = “abc”; char[] ch={‘a’,‘b’,‘c’}; System.out.println(s.equals(ch)); 输出为:false
解析:S 和 ch 分别为字符串类型和数组类型,所以输出为 false。

4.构造函数的特点

1.构造函数必须和类名一样(但和类名一样的不一定是构造方法,普通方 法也可以和类名同名),并且不能有返回值,返回值也不能为 void。
2.构造函数总是伴随着 new 操作一起调用,并且不能由程序的编写者调用, 只能由系统调用。
3.构造函数不能被继承。
4.子类可以通过 super()来显示调用父类的构造函数。

5.基本类型、包装类

初始值的不同:当基本数据类型变量和包装类的对象作为类的实例变量时,默认初始值是不同的。包装类的对象默认初始值是null,基本数据类型变量的默认初始值根据变量类型不同而不同,如Int的默认初始值是0。

所占空间不同 :null 不是一个合法的 object 实例,所以并没有为其分配内存。
缓存策略不同:Integer在类加载时就将-128 到 127 的Integer对象创建了,并保存在cache数组中(Integer cache[]),一旦程序调用Integer.valueOf( i ) 方法,如果 i 的值是在-128 到 127 之间就直接在 cache 缓存数组中去取Integer 对象,不在的话,就创建新的包装类对象.

Short(-128 — 127缓存)
Long(-128 — 127缓存)
Float(没有缓存)
Doulbe(没有缓存)

装箱是将一个原始数据类型赋值给相应封装类的变量,而拆箱则是将一个 封装类的变量赋值给相应原始数据类型的变量。 //装箱。装箱就是 jdk 自己帮你完成了调用Integer.valueOf(100)。

Integer integer1 = 3; 
Integer integer2 = 3; 
System.out.println(integer1 == integer2);//True  缓存中

Integer a3 = new Integer(3);
Integer a4 = new Integer(3);
System.out.println(a3 == a4);// false

Integer integer3 = 300; 
Integer integer4 = 300; 
System.out.println(integer3 == integer4);//false  重新创建新的包装类对象

Integer i = new Integer(128);
int i2 = 128;
System.out.println(i==i2);//当 Integer 和 int 类型数值进行比较的时候, Integer 会自动拆箱 为 int 再比较,所以为 true
6.对象作为参数传递

Java中的参数传递一直是按值传递

public static void changeStringBuffer(StringBuffer ss1, StringBuffer ss2) 
{ 
	ss1.append(" world"); 
	ss2 = ss1; 
}
public static void main(String[] args) { 
	Integer a = 1;//包装类是不可变类 Integer b = a; b++;
	System.out.println(a); 
	StringBuffer s1 = new StringBuffer("Hello"); 
	StringBuffer s2 = new StringBuffer("Hello");
	changeStringBuffer(s1, s2); 
	System.out.println(s1); 
	System.out.println(s2);
}

输出结果:
1 Hello world
2 Hello

解析:s1,ss1一直指向同一个对象空间,该对象空间值从"hello" == > “hello world”
s2,ss2 起始时指向同一个对象空间"hello",在changeStringBuffer()方法中ss2所指的对象空间发生改变,此时对象空间值为"hello world"。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值