Java编程思想(二)—— 一切都是对象

一、用引用操纵对象

        每种编程语言都有自己操纵内存中元素的方式,在Java中一切都是对象,通过引用来向对象发送消息从而操纵对象,就像是遥控器操控电视机一样。

        没有电视机,遥控器可单独存在,也就是说你可以拥有一个引用,但并不一定需要一个对象与之关联,如下创建一个String的引用:

String s;

        但这时你只是创建了一个引用,并没有创建对象,如果此时向s发送一个消息,就会返回一个运行时异常,因此安全的做法是在创建一个引用的时候就进行初始化,如下:

String s="abcd"; 

        这是Java语言的一个特性:字符串可以用带引号的文本初始化。

二、必须由你创建所有对象

一旦创建了一个引用,通常用new操作符创建一个新的对象与之关联,如下:

String s1=new String("abcd");

1、对象存储到什么地方?

计算机中有五个不同的地方可以存储数据,如下:

① 寄存器

这是最快的存储区,它位于处理内部,但寄存器数据有限,需要根据需求进行分配,你不能直接控制。

② 堆栈

它位于通用RAM(随机访问存储器)中,通过堆栈指针可以从处理器那里获得直接支持,堆栈指针若向下移动,则分配新的内存,若向上移动则释放那些内存。创建程序时,Java系统必须知道存储在堆栈中所有项的确切生命周期,以便上下移动堆栈指针。变量就是直接存储堆栈中的。

③ 堆

一种通用的内存池(也位于RAM区),用于存放所有的Java对象。堆相对于堆栈的好处是:编译器不需要知道存储的数据在堆里存活多长时间,用堆进行存储分配和清理比用堆栈进行存储分配需要更多的时间。

④ 常量存储

常量值通常直接存储在程序代码内部。

⑤ 非RAM存储

流对象和持久化对象。

在流对象中,对象转化为字节流。

在持久化对象中,对象被存放于磁盘上。

2、特例:基本数据类型

基本类型具有的包装器类,使得可以在堆中创建一个非基本对象,用来表示对应的基本数据类型,如下:

        char c = 'a';
        Character ch = new Character(c);
        Character cc = new Character('a');
        System.out.println(ch == cc);//false

Java SE5的自动包装功能可以自动地将基本数据类型转换为包装器类型。

        Character ch = 'b';
        char c = ch;

Java提供了两个用于高精度计算的类:BigInteger、BigDecimal

BigInteger支持任意精度的整数,可以表示任何大小的整数值,而不会丢失任何信息。

BigDeciaml支持任意精度的定点数,可以用它进行精确的货币计算。

3、Java中的数组

        当创建一个数组对象时,实际上就是创建了一个引用数组,并且每个引用都会自动被初始化为一个特定值,访值拥有自己的关键字null,Java一旦看到null,就知道这个引用还没有指向某个对象。在使用任何引用之前,必须为其指定一个对象,否则运行将会报错。

三、永远不需要销毁对象

1、作用域

作用域决定了其内定义的变量名的可见性和生命周期,作用域由花括号的位置来决定。

   {
        int x = 10;
        //x可用
        {
            int y = 12;
            //x与y都可用
        }
        //x可用
    }

2、对象的作用域

Java对象不具备和基本类型一样的生命周期,当用new创建一个Java对象时,它可以存活于作用域之外。

        {
            String s = new String("abcd");
        }
        //引用s在作用域终点就消失了,但s指向的对象仍然继续占用内存空间

如果让Java对象继续存在,如何防止填满内存空间而造成程序阻塞呢?

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

四、创建新的数据类型:类

1、字段和方法

一旦定义了一个类,就可以在类中设置两种类型的元素:字段(属性、数据成员)、方法(行为、成员函数)。

public class SimpleExample1 {
    int i;
    double d;

    @Test
    public void example4() {
        SimpleExample1 example = new SimpleExample1();
        example.i = 10;//引用一个对象的成员
        System.out.println(example.i + "==" + d);//10==0.0
    }
}

2、基本成员的默认值

        当变量作为类的成员使用时,即使没有进行初始化,Java也会确保它获得一个默认值,防止产生错误。但这种初始化的方法并不适用于“局部”变量。

八大基本数据类型的默认值
基本类型默认值
booleanfalse
charnull
byte(byte)0
short(short)0
int0
long0L
float0.0f
double0.0

五、方法、参数和返回值

        Java 的方法决定了一个对象能够接收什么样子的消息,方法的基本组成部分包括:名称、参数、返回值和方法体。

    public int example1(String s) {
        return s.length() * 2;
    }

        返回类型描述的是在调用方法之后从方法返回的值,参数列表给出了要传递给方法信息的类型和名称,方法名和参数列表唯一标识出某个方法。

        Java的方法只能作为类的一部分来创建,方法只有通过对象才能被调用,通过对象调用方法时,需要先列出对象名,紧接是句点,然后是方法名和参数列表。

1、参数列表

方法的参数列表指定要传递给方法的什么样子的消息,这里的传递实际上也就是引用。

public class SimpleExample3 {
    public int example1(String s) {
        return s.length() * 2;
    }

    @Test
    public void test() {
        SimpleExample3 example3 = new SimpleExample3();
        int i = example3.example1("张三");//字符串中的每个字符占16位,大小为两个字节
        System.out.println(i);
    }
}

2、return关键字的用法

① 它代表已经做完,离开此方法;

② 如果方法产生了一个值,这个值要放在return 的后面。

如果不想返回任何值,可以指示方法返回void,如下:

    public void example2() {
        System.out.println("李四");
    }

若返回类型是void,则return的作用只是用来退出方法,如果返回类型不是void,那么无论在何处返回,编译器都会强制返回一个正确类型的返回值。

六、构建一个Java程序

1、import关键字

import指示编译器导入一个包,也就是一个类库,如下:

import java.util.ArrayList;

如果你需要使用util包中的很多类,那么使用通配符*即可

import java.util.*;

2、static关键字

        当声明一个事物是static时,就意味着这个域或方法不会跟类的任何实例对象关联在一起,它们代表类数据或类方法,这时可以直接通过类来访问,当然也可以通过对象来访问(不推荐),如下:

public class Example1 {
    public static int i = 10;
    public static void main(String[] args) {
        System.out.println(Example1.i++);//10,先输出才自增
        Example1 example1 = new Example1();
        System.out.println(example1.i++);//11,已经自增一次,先输出再自增第二次
    }
}

static字段对每个类来说都只有一份存储空间,而非static字段则对每一个对象都有一个存储空间,如下:

public class Example1 {
    public static int i = 10;
    public int j = 20;
    @Test
    public void test1() {
        Example1 example1 = new Example1();
        Example1 example2 = new Example1();
        example1.i++;
        System.out.println(example1.i + "==" + example2.i);//都是11
        example1.j++;
        System.out.println(example1.j + "==" + example2.j);//第一个21,第二个20,每个对象有一个存储空间来存储非静态变量的值
    }
} 

七、你的第一个Java程序

public class Example2 {
    public static void main(String[] args) {//args用来接收命令行参数
        System.out.println("Hello World");//out是System中的一个静态的PrintStream对象
        System.out.println(new Date());//Date对象被自动转换成String发送给println()
        System.getProperties().list(System.out);//运行程序的系统中获取的所有“属性”
        System.out.println(System.getProperty("user.name"));//查询用户名
        System.out.println(System.getProperty("user.dir"));//查询项目的根目录
    }
}

八、常用的文档注释示例

/**
 * @author alex
 * @version 1.0
 * @since 2018-4-2
 */
public class Example3 {
    /**
     * @param s
     * @return
     * @throws Exception
     */
    public int example(String s) throws Exception {
        return 0;
    }
} 

九、驼峰命名法

首字线小写,其他字母首字母大定,不要加下划线,如下:

int definitionNewVariable = 10;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值