java基础学习(一)

来源:互联网 发布:告白气球 知乎 编辑:程序博客网 时间:2024/05/18 01:42

java与c++的区别:
C++支持与C语言的向后兼容性,C++是c的一个超集,包括许多c语言不具备的特性。这些特性导致c++在某些方面过于复杂。
java是基于c++的,但是它是一种更纯粹的面向对象程序设计语言。在java中几乎一切都是对象。

在java中用”引用“操作对象,但是,拥有一个引用并不一定需要有一个对象与之绑定,例如:String str;
但是如果直接使用该引用,向其发送消息,会出现运行错误。因为它没有与任何对象相关联。因此,在创建一个引用的同时进行初始化,例如 String str=”abc”。
也可以使用new操作符得到一个新对象,例如:String str=new String(“cde”)。

对象数据的存储:
1、寄存器。位于处理器内部,最快的存储区。数量极其有限,不能被直接控制。
2、堆栈:位于通用RAM(随机访问存储器)中,速度仅次于寄存器,可以通过堆栈指针进行访问。堆栈指针向下移动,则分配新的内存;向上移动,则释放内存(栈的特点:后进先出)。对象引用存储在其中,但是java对象并不是存储其中
3、堆:位于RAM中,用于存放所有的java对象。使用new创建一个对象时,会自动在堆里进行存储分配。而编译器也不需知道存储的数据在堆里存活多长时间。
4、常量存储:直接存储在程序代码内部,永远不会被改变。
5、非RAM存储:数据存活于程序之外,程序没有运行时也可以存在,可以不受程序的任何控制。例如持久化对象中,数据存放在磁盘上。

基本类型
对于一些特别小的、简单的变量,不需要使用new来创建变量,该变量并不是”引用”。该变量可以直接存储”值”,并放置在堆栈中。而不是像一般对象放置在堆中。因此更加高效。

java中每种基本类型所占的存储空间的大小是不变的,如下表:
这里写图片描述
所有数据类型都有正负号。
boolean类型所占存储空间没有明确指定,能够取字面值true和false。
java SE5 的自动包装功能将自动将基本类型转换为包装器类型:
包装(基本类型转为包装类型):Character ch=’X’;
开箱(包装类型转为基本类型):char c=ch;
java中高精度计算的类: BigInteger 和 BigDecimal 。它们大体属于包装器类,但是没有对应的基本类型。
BigInteger支持任意精度的整数,可以准确表示任何大小的整数值,而不会丢失任何信息。
BigDecimal支持任何精度的定点数。
这两个类包含的方法,提供的操作与基本类型所执行的操作类似,只不过必须以方法调用:

 public static void main(String[] args){        BigInteger bigInt_1=new BigInteger("212121212111111111111122233344445555666666444444");        BigInteger bigInt_2=new BigInteger("654544343668787987676689999999999999777777776666666666");        //相加        bigInt_1=bigInt_1.add(bigInt_2);        System.out.println("相加后,bigInt_1="+bigInt_1);        System.out.println("相加后,bigInt_2="+bigInt_2);        //相乘        bigInt_1=bigInt_1.multiply(bigInt_2);        System.out.println("相乘后,bigInt_1="+bigInt_1);        System.out.println("相乘后,bigInt_2="+bigInt_2);    }

运行之后的结果是:

相加后,bigInt_1=654544555790000098787801111122233344223333443333111110相加后,bigInt_2=654544343668787987676689999999999999777777776666666666相乘后,bigInt_1=428428436671543996942523490949802028954419170590721413184093682488598705648588111596338142369876471111259260相乘后,bigInt_2=654544343668787987676689999999999999777777776666666666

从上面的结果发现,bigInt_1的值发生了变化。
BigInteger转换为int:

int tmp=bigInt_1.intValue();        System.out.println("转换后的整数,tmp="+tmp);//运行后结果:转换后的整数,tmp=202675324

java作用域
作用域决定了在其内定义的变量名的可见性和生命周期。作用域由花括号的位置决定。在作用域内定义的变量只可用于作用域结束之前。

但是java对象不具备和基本类型一样的生命周期,当用new创建一个java对象时,它可以存活于作用域之外。例如:
{
String str=new String(“abc”);
}
其中,引用变量str的作用域在花括号终点结束,但是,str指向的String对象仍继续占据内存空间。但是我们无法在作用域之外访问这个String对象,因为它的唯一引用str超出了作用域的范围。

(说明基本类型 和 引用变量 存在于作用域范围内)
由new创建的对象,只要需要,就会一直保留下去。

java有一个垃圾回收器,用来监视用new创建的所有对象,并辨别哪些对象不会被再引用。随后,会释放这些对象的内存空间,以便供其他新对象使用。

新的数据类型:类
类中包含两种类型的元素:字段(数据成员)和方法(成员函数)。

字段可以是任何类型的对象,也可以是基本类型中的一种。
若类中的某个成员是基本数据类型,即使没有初始化,java会确保它获得一个默认值:
这里写图片描述

public class DefaultValue {    static boolean  boo;    static char  cha;    static byte  byt;    static short sht;    static int  tmp;    static long lng;    static  float flt;    static double dbe;    public static void main(String[] args){        System.out.println("默认 boolean="+String.valueOf(boo));        System.out.println("默认 char="+String.valueOf(cha));        System.out.println("默认 byte="+String.valueOf(byt));        System.out.println("默认 short="+String.valueOf(sht));        System.out.println("默认 int="+tmp);        System.out.println("默认 long="+String.valueOf(lng));        System.out.println("默认 float="+String.valueOf(flt));        System.out.println("默认 double="+String.valueOf(dbe));    }}//运行结果默认 boolean=false默认 char= 默认 byte=0默认 short=0默认 int=0默认 long=0默认 float=0.0默认 double=0.0

注意:只有当变量是 类的成员时,java才会确保给定其默认值。然而并不适用于局部变量(即并非某个类的成员)。
否则变量可能是任意值,而不会被自动初始化。

方法决定了一个对象能够接收什么样的消息。只能作为类的一部分来创建。
方法名和参数列表合起来被称为 方法签名,可以唯一地标识出某个方法。

在参数列表中必须指定每个传递对象的类型和名字。这实际传递的是对象的引用(对于基本类型是个例外)。

return关键字
若返回类型是void,那return关键字的作用是用来退出方法的。可以在任何地方退出方法,不一定要在方法结束出返回。
如果返回类型不是void,那么无论在何处返回,编译器都会强制返回一个正确的类型,可以返回null。

static关键字
通常,执行new来创建对象,数据存储空间才会被分配,其方法才供外界调用。
但是,当声明一个事物是static时,意味着这个域(字段)或方法 不会与包含它的那个类的任何对象实例关联在一起。只为某特定域(字段)分配单一的存储空间,不去考虑创建多少对象,甚至没有创建对象。同理,某个方法也不与包含它的类的对象实例关联在一起。

即使从未创建某个类的任何对象,也可以调用其static方法或访问其static域(字段)。

static字段对每个类都只有一份存储空间,而非static字段则是对每个对象有一个存储空间。

public static void main(String[] args){ }
如果创建一个独立运行的程序,那么类名必须和文件名相同,且类中必须包含一个main()方法。其中参数args是用来存储命令行参数的。

java编码风格
驼峰风格:类名首字母大写,类名由几个单词组成,那么把他们并在一起(不要用下划线分隔名字),每个单词的首字母大写。

0 0