zoukankan      html  css  js  c++  java
  • Java学习笔记——第四章 认识对象

    第四章 认识对象

    4.1 类与对象

    使用Java撰写程序几乎都在使用对象(Object),要产生对象必须先定义类(class),类是对象的设计图,对象是类的实例

    4.1.1 定义类

    类定义时使用class关键词,利用类作为设计图,建立实例,要使用new关键词。 Clothes c1;在Java属于中,叫做声明参考名称、参考变量或者参考。

    class Clothes{
    	String color;
    	char size;
    }
    

    在Clothes类中,定义了两个变量color和size,叫作定义两个值域成员,或叫作定义两个对象数据成员,表示每个新建的Clothes实例,可以拥有个别color和size值。

    class Clothes{
    	String color;
    	char size;
    }
    public class Field{
    	public static void main(String[] args){
    		Clothes sun = new Clothes();
    		Clothes spring = new Clothes();
    
    		sun.color = "red";
    		sun.size = 'S';
    		spring.color = "green";
    		spring.size = 'M';
    		
    		System.out.printf("sun (%s,%c)%n", sun.color, sun.size);
    		System.out.printf("spring (%s,%c)%n", spring.color, spring.size);
    	}
    }
    

    注:
    一个原始码中可以有多个类定义,但只能有一个是公开类,且文档中的主文档名必须与公开类名称相同。
    只要有一个类定义,编译程序就会产生一个.class文档。
    如果想在建立对象时,一并进行某个初始流程,像是指定数据成员值,则可以定义构造函数。构造函数是与类名称同名的方法。
    使用构造器创建对象时,必须传入指定类型的参数值且参数一一对应。使用this关键词,将参数的值指定给调用对象的属性值。

    4.1.2 使用标准类

    4.1.2.1 使用java.util.Scanner
    Scanner scanner = new Scanner(System.in);
    int m = scanner.nextInt();
    

    Scanner的nextInt()方法会查看你的标准输入有没有下一个字符串(以空格或者换行分隔),有就将其解析为int类型。Scanner对每个基本类型,都会有对应的next***()方法,如nextByte()、nextShort()、nextLong()、nextFloat()、nextDouble()、nextBoolean()等,如果直接取得上一个字符串(以空格或换行分隔),则使用next(),如果想取得整行文字,则使用nextLine()(以换行分隔)。

    4.1.2.2 使用java.util.BigDecimal

    Java(包括其他语言)遵守IEEE754浮点数运算规范,使用分数与指数来表示浮点数。例如,0.5会使用1/2表示,0.875会使用1/2+1/4+1/8来表示,0.1会使用1/16+1/32+1/256+1/512+...无限循环下去,无法精确表示,因而造成计算上的误差。
    如果要求精度,就要小心使用浮点数,并且不使用==直接比较浮点数运算结果。为了得到更好的精确度,就要使用/java.util.BigDecimal/类。
    BigDecimal提供的方法有plus()、substract()、multiply()、divide()。

    4.1.3 对象指定与相等性

    在操作对象时,=是用在指定参考名称参考某个对象,而==使用在比较两个参考名称是否参考同一对象

    BigDecimal a = new BigDecimal("0.1");
    BigDecimal b = new BigDecimal("0.1");
    System.out.println(a == b);//false
    System.out.println(a.equals(b));//true
    

    上述程序中,ab指的是对象a和对象b是否为同一对象,显然不是!a.equal(b)指的是对象a和对象b内含值是否相同,显然相同都是0.1。
    **
    用在对象类型,是比较两个名称是否参考同一对象!**

    4.2 基本类型打包器

    4.2.1 打包基本类型

    将基本类型打包在对象中,这样就可以操作这个对象,就像是将基本类型当做是对象操作。
    Integer提供compareTo()方法,与另一个Integer进行对比,如果打包值相同就返回0;小于compareTo()传入对象打包值就返回-1,否则就返回-1。

    4.2.2 自动装箱、拆箱

    Integer data1 = 10;
    Integer data2 = 20;
    System.out.println(data1.doubleValue() / 3);//3.3333333333333335
    System.out.println(data1.compareTo(data2));//-1
    

    使用equals()比较两个对象的实质内容值是否相同!

    Integer i1 = 200;
    Integer i2 = 200;
    if(i1.equals(i2)){
    	System.out.println("i1 == i2");	
    }else{
    	System.out.println("i1 != i2");
    }
    

    4.3 数组对象

    4.3.1 数组基础

    在Java中数组是对象,而不是单纯的数据集合。
    数组基本上是用来收集数据的,是具有索引的数据结构,在Java中要声明数组并初始化,可以如下:int[] scores = {67, 78, 98};
    增强for循环:

    for(int score : scores){
    	System.out.printf("学生分数:%d %n",score);
    }
    

    4.3.2 操作数组对象

    如果事先不知道元素值,只知道元素个数,那可以使用new关键词指定长度建立数组。例:
    int[] scores = new int[10];
    new建立数组后,每个索引元素会有默认值
    (引自:http://blog.csdn.net/zhhstudy/article/details/7374825)
    1.数组元素的类型是基本类型中的整数类型(byte、short、int和long),则数组元素的值是0。
    2.数组元素的类型是基本类型中的浮点类型(float、double),则数组元素的值是0.0。
    3.数组元素的类型是基本类型中的字符类型(char),则数组元素的值是'u0000'。
    4.数组元素的类型是基本类型中的布尔类型(boolean),则数组元素的值是false。
    5.数组元素的类型是引用类型(类、接口和数组),则数组元素的值是null。
    如果默认初始值不符合要求,可以使用java.util.Arrays的fill()方法设定新建数组的元素值。也可以在new数组时一并指定初始值,不必指定数组长度:
    int[] scores = new scores[]{88, 81, 74};
    使用new建立二维数组,声明如下:int[][] scores = new int[2][3];,语法上,实际上是建立一个int[][]类型的对象,里面有2个int[]类型的索引,分别是参考长度为3的一维数组对象,初始值默认为0。
    如果将int[][] scores看成是(int[])[] scores{此处用()代表下划线},int[]就相当于一个类x,实际是声明x的一维数组,也就是x[]。Java中的多位数组基本上都是由一维数组组成
    Integer[] score = new Integer[3];此语句建立了0个对象。
    注意:如果是类类型建立的数组,每个索引值都是参考至null

    4.3.3 数组复制

    1、基本类型数组的复制
    如果要进行数组的复制,基本做法是建立新的数组

    int[] scores = new int[]{78, 88, 98};
    int[] scores1 = new int[scores.length];
    for(int i = 0; i < scores.length; i++){
    	score1[i] = score[i];
    	System.out.println(score1[i] + " ");
    }
    

    注:数组一旦建立,长度就固定了,如果事先建立的数组长度不够,只能建立新的数组,将原数组的内容复制到新数组中。
    2、类类型数组的复制
    浅层复制(参考复制):将数组c1的内容复制到c2中时,仅将c1每个索引处所参考的对象给c2每个索引来参考,并没有实现复制出类的对象,即c2同样指向c1所参考的对象,改变c1中的值同样会改变c2中的值。

    Clothes[] c1 = {new Clothes("red", 'L'), new Clothes("blue", 'M')};
    Clothes[] c2 = new Clothes[c1.length];
    for(int i = 0; i < c1.length; i++) {
    	c2[i] = c1[i];
    }
    c1[0].color = "yellow";
    System.out.println(c2[0].color);//输出结果为yellow
    

    深层复制:将数组c1的内容复制到c2中时,将c1每个索引处所参考的对象复制给c2,分别指定给c2的每个索引,即c2同样指向另一个参考的对象,改变c1中的值不会改变c2中的值。

    Clothes[] c1 = {new Clothes("red", 'L'), new Clothes("blue", 'M')};
    Clothes[] c2 = new Clothes[c1.length];
    for(int i = 0; i < c1.length; i++) {
    	Clothes c = new Clothes(c1[i].color, c1[i].size);//自行复制元素
    	c2[i] = c;
    }
    c1[0].color = "yellow";
    System.out.println(c2[0].color);//red
    

    4.4 字符串常量

    4.4.1 字符串基础

    字符串在Java中是对象,可使用length()获取字符串长度,使用charAt() 指定取得字符串中某个字符,索引从0开始,使用toUpperCase()将原本大小写的字符串内容转化为大写的字符串内容,使用toCharArray()将字符串以char[]数组返回。
    如果将字符串转换为整数、浮点数等基本类型,使用一下方法:

    1. Byte.parseByte(number)            将number剖析为byte整数
    2. Short.parseShort(number)         将number剖析为short整数
    3. Integer.parseInt(number)           将number剖析为int整数
    4. Long.parseLong(number)          将number剖析为long整数
    5. Float.parseFloat(number)          将number剖析为float浮点数
    6. Double.parseDouble(number)    将number剖析为double浮点数

    4.4.2 字符串特性

    1、字符串常量与字符串池
    以" "包括的字符串,只要内容相同(序列、大小写相同),无论在程序代码中出现几次,JVM都只会建立一个String实例,并在字符串池中维护。
    用" "写下的字符串称为字符串常量
    如果要比较对象实质内容是否相同,要使用equals()。
    如果要比较字符串实际字符内容是否相同,要使用equals()。
    2、不可变动字符串

    String name1 = "java";
    String name2 = "Hello" + name1;
    System.out.println(name2);
    

    使用+连接字符串,会变成建立java.lang.StringBuilder对象,使用其append()方法进行+左右两边的字符串附加,最后在转换为toString()返回。
    使用+连接字符串会产生新的String实例,而不是在原有的基础上进行连接!

    4.4.3 字符串编码

    使用Windows默认的纯文本编辑器,是GB2312编码;
    如果在NetBeans中建立.java原始码,默认UTF-8编码;
    如果在eclipse中建立.java原始码,默认使用GB2312编码;
    使用Javac -encoding UTF-8 Main,java,在编译时指定-encoding为UTF-8,编译程序时知道如何编译读取.java的内容。

    学习体会

    第二次看Java认识对象部分的内容了,每次看总有新的感受,新的理解,结合书本上的图解对此部分内容有了新认识,理解上有了一定提高。语言的学习很枯燥,应该以一种更好的图文结合方式去学习,这部分是后面的基础,应该把基础打牢!

  • 相关阅读:
    Oracle EBS AR 收款调整取值
    Oracle EBS GL 创建会计科目
    Oracle EBS 应收事务处理取值
    Oracle EBS 应收发票取值
    Oracle EBS AR 收款核销行关联到事务处理
    art-template渲染真实数据--后台接口(难度:3颗星)
    art-template渲染简单数据(难度:1颗星)
    art-template渲染数据示例(难度:2颗星)
    使用jQuery渲染一般数据
    如何使用git,github?
  • 原文地址:https://www.cnblogs.com/albertman/p/8641338.html
Copyright © 2011-2022 走看看