Java基础

来源:互联网 发布:三维人像建模软件 编辑:程序博客网 时间:2024/05/29 15:06

一:Java命名的规范
1、标识符:简单来说自己起名字的地方都可叫标识符
规则:以字母、数字、_和$组成;不能以数字开头;不能使用Java关键字;区分大小写;不能包含空格。–尽量“见名知意”

名称命名规范:
包名:全部小写;
类名接口名:多单词组成是,所有单词首字母大写
变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个字母首字母大写;
常量名:所有字母都大写,多个单词以下划线连接

2、变量:内存中的一个存储区域(改区域有自己的名称和类型)—-变量必须先定义再使用 (即java是强类型语言)

3、数据类型:分为基本数据类型和引用数据类型
基本数据类型:
整数类型(byte(一个字节)、short(两个字节)、int(4个字节)、long(8个字节));
Java整数类型有具体的长度,不受OS(operation system)的影响,便于移植。Java整数常量默认为int,声明long型常量需加上l或者L

浮点类型(float(4个字节)、doble(8个字节))声明float型常量需加上f或者F
字符类型(char(以单引号括起来,char 在Java中是2个字节。java采用unicode))
布尔类型:boolean(只能取值true||false)

这里写图片描述

当涉及运算时,最低运算类型为int,即两个类型参与运算,就会转换为int类型

byte a=1;byte b=2;byte c=a+b;//error,a+b为int类型

 引用数据类型:
 类(class) –如String
 接口(interface)
 数组([])

 
二:Java中基本类型和封装类型数据与堆、栈的关系

Java的堆是一个运行时数据区,对象通过new等 指令建立,堆不需要程序代码显式释放,堆是有垃圾回收机制来负责,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为她是运行时动态分配的,缺点是由于要在运行时动态分配内存,存取速度慢。

栈的优势是存取速度比堆快,仅次于寄存器,栈数据可以共享,缺点是栈中的数据大小与生存期必须确定,缺乏灵活性。栈中主要存放基本数据类型和对象句柄。

栈有一个很重要的特殊性,就是存在栈中的数据可以共享。假设我们同时定义:
int a = 3;
int b = 3;
编译器先处理int a = 3;首先它会在栈中创建一个变量为a的引用,然后查找栈中是否有3这个值,如果没找到,就将3存放进来,然后将a指向3。接着处理int b = 3;在创建完b的引用变量后,因为在栈中已经有3这个值,便将b直接指向3。这样,就出现了a与b同时均指向3的情况。

这时,如果再令a=4;那么编译器会重新搜索栈中是否有4值,如果没有,则将4存放进来,并令a指向4;如果已经有了,则直接将a指向这个地址。因此a值的改变不会影响到b的值。

要注意这种数据的共享与两个对象的引用同时指向一个对象的这种共享是不同的,因为这种情况a的修改并不会影响到b, 它是由编译器完成的,它有利于节省空间。而一个对象引用变量修改了这个对象的内部状态,会影响到另一个对象引用变量。

String是一个特殊的包装类数据。可以用:
String str = new String(“abc”);
String str = “abc”;
两种的形式来创建,第一种是用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。
而第二种是先在栈中创建一个对String类的对象引用变量str,然后查找栈中有没有存放”abc”,如果没有,则将”abc”存放进栈,并令str指向”abc”,如果已经有”abc” 则直接令str指向“abc”。

比较类里面的数值是否相等时,用equals()方法;当测试两个包装类的引用是否指向同一个对象时,用==,下面用例子说明上面的理论。
String str1 = “abc”;
String str2 = “abc”;
System.out.println(str1==str2); //true
可以看出str1和str2是指向同一个对象的。 并且str1不一定是新创建的,也可能栈中已经存在了,那么str1、str2直接指向即可。

String str1 =new String (“abc”);
String str2 =new String (“abc”);
System.out.println(str1==str2); // false
用new的方式是生成不同的对象。每一次生成一个。

/************************关于==与equals的区别*******************************/

3:==与equals

==比较的是栈的地址是否相同

重写equal方法的目的是判断两个对象的内容(内容可以很多,比如同时比较age、name等,内容同时相同才相同)是否相同。

如果不重写equals方法,那么比较的将是对象的引用是否指向同一地址块。特别地利用equals比较八大包装类和String(因为已经重写了equals和hashcode方法)对象时,默认比较值,在比较其他没有重写equals方法的自定义对象时都是比较的引用地址

A a1=new A(1);  //A没有重写eqauls方法A a2=new A(1);a1==a2;//false;A a3=a1;a1==a3;//true,对象赋给新对象连地址都是相同的
 Integer i1 = 1; Integer i2 = 1; System.out.println(i1 == i2);  //true; Integer i3 = 128; Integer i4 = 128;/*此时输出false是因为Integer在-128-127之间会缓存,超出这个范围就不会**缓存**了,关于缓存请参考本博客下方的参看文章*/i3==i4;//false;
S s1=new S("张三");S s2=new S("张三");System.out.println(s1.name.equals(s2.name));  //trueSystem.out.println(s1.name == s2.name);  //true

==与equals的区别(不错的一篇博客)

Java Integer的缓存

原创粉丝点击