2019-08-06 Day8 数组的使用和类的定义

目的

学习Java中数组的两种状态,理解静态数组和动态数组的相似和不同;了解数组定义之后在内存中的表现形式,实现更深层次的理解;掌握数组的三种输出方式,并明白其原理与意义;使用Java中的数组编写猜数字游戏,加深对Java的理解

Java中的数据类型

基础数据类型

char boolean short int long float double byte


1.jpg

整型(byte、short、int、long)
虽然byte、short、int、long 数据类型都是表示整数的,但是它们的取值范围可不一样

byte 的取值范围:-128~127(-2的7次方到2的7次方-1)

short 的取值范围:-32768~32767(-2的15次方到2的15次方-1)

int 的取值范围:-2147483648~2147483647(-2的31次方到2的31次方-1)

long 的取值范围:-9223372036854774808~9223372036854774807(-2的63次方到2的63次方-1)

由上可以看出 byte、short 的取值范围比较小,而long的取值范围时最大的,所以占用的空间也是最多的。int 取值范围基本上可以满足我们的日常计算需求了,所以 int 也是我们使用的最多的一个整型类型

浮点型(float、double)
float 和 double 都是表示浮点型的数据类型,它们之间的区别在于精确度的不同

float(单精度浮点型)取值范围:3.402823e+38~1.401298e-45(e+38 表示乘以10的38次方,而e-45 表示乘以10的负45次方)

double(双精度浮点型)取值范围:1.797693e+308~4.9000000e-324(同上)

double 类型比float 类型存储范围更大,精度更高

通常的浮点型数据在不声明的情况下都是double型的,如果要表示一个数据时float 型的,可以在数据后面加上 "F"

浮点型的数据是不能完全精确的,有时候在计算时可能出现小数点最后几位出现浮动,这时正常的

字符型(char)
char 有以下的初始化方式:

char ch = 'a'; // 可以是汉字,因为是Unicode编码

char ch = 1010; // 可以是十进制数、八进制数、十六进制数等等

char ch = '\0'; // 可以用字符编码来初始化,如:'\0' 表示结束符,它的ascll码是0,这句话的意思和 ch = 0 是一个意思

Java是用unicode 来表示字符,“中” 这个中文字符的unicode 就是两个字节

String.getBytes(encoding) 方法获取的是指定编码的byte数组表示

通常gbk / gb2312 是两个字节,utf-8 是3个字节

如果不指定encoding 则获取系统默认encoding

布尔型(boolean)
boolean 没有什么好说的,它的取值就两个:true 、false

引用数据类型

除了上面的所有基础数据类型,其余的都是引用类型

数据的两种定义方式

静态数组

int[] score = {1,2,3};
String[] names = {"jack","merry"};

动态数组

float[] height = new float[5];
height[0] = 165.5f;
height[1] = 170f;

输出数组的三种方式

第一种数组输出方式

for (int i = 0;i < 10;i++){
    System.out.print(count[i]+" ");
}
System.out.println();

第二种数组输出方式

for (int temp: count){
      System.out.print(temp+" ");
   }
System.out.println();

第三种数组输出方式

System.out.println(Arrays.toString(count));

Java的对象

按照通俗的说法,每个对象就是某个类(class)的一个实例(instance),这里,‘类’就是‘类型’的同义词

关键词 具体的&实际存在的&某一类的实例化
对象都是new出来的,可以完成具体的事情并有内存空间

Person xw = new Person();

同一个类可以有多个对象,但每个对象的内存空间都是独立的(对象之间没有任何关系);而xw和zs除了都是通过一个类创建的之外,没有任何关系,对xw的属性进行操作,对zs没有影响

Person xw = new Person();
Person zs = new Person();
        xw.name="小王";
        xw.age = 20;
        xw.score=85.5f;
        System.out.println(xw.name);
        System.out.println(xw.age);
        System.out.println(xw.score);

Java类中的方法的定义方法

public void test(){
        System.out.println("没返回值 没有参数的方法");
    }

    public void test2() {
        //在自己的类里面可以调用这个类里面的所有资源
        test();
    }

    //没有返回值 接收一个参数
    public void test3(String name){

    }

    //有一个返回值 有一个参数
    public int test4(String name){
        return 0;
    }

    //有多个参数 每个参数用逗号隔开
    public int test5(String name, int age){
        return 0;
    }

    //可变参数  相当于 数组
    public int test6(int ... counts){
        int sum = 0;
        for (int i = 0;i < counts.length;i++){
            sum +=  counts[i];
        }

        return sum;
    }

需要注意的是:方法在调用时要注意调用谁(哪个对象)的方法,同时在类里面可以直接调用自己的方法,但是在外部必须通过对象来调用

封装中访问权限的区别

封装的定义:把私有的东西包装起来,不让外部使用;需要给外部用,就暴露出来

public:

公共的 大家都可以使用 内部可以使用 外部也可以使用(要有对象)

private:

私有的 只能自己使用 外部无法访问

protected:

受保护的 外部可以访问 但必须在同一个包里面

猜数字游戏

public static void main(String[] args){
        //保存原始数字
        int[] org = new int[4];
        //保存用户猜测的数字
        int[] guess = new int[4];

        //产生4个随机数
        Random random = new Random();
        for (int i = 0;i < 4;i++){
            //产生一个随机数
            int temp = random.nextInt(10);

            //判断是否存在
            //C底层开发语言
            boolean result = contains(org, temp);
            if (result){
                i--;
            }else{
                org[i] = temp;
            }

        }

        //排序
        Arrays.sort(org);

        System.out.println(Arrays.toString(org));

        //定义一个扫描仪对象Scanner
        Scanner scanner = new Scanner(System.in);

        //开始游戏
        while (true){
            int countA = 0;
            int countB = 0;
            System.out.print("请输入猜测的数字:");
            for (int i = 0;i < 4;i++){
                guess[i] = scanner.nextInt();
            }

            //判断用户输入
            //1.判断是否存在
            for (int i = 0;i < 4;i++) {
                boolean result = contains(guess, org[i]);
                if (result){
                    //数字存在
                    //判断位置是否正确
                    int index = indexof(guess, org[i]);

                    if (index == i){
                        //数字和位置都正确
                        countA++;
                    }else{
                        countB++;
                    }
                }
            }

            if (countA == 4){
                System.out.println("恭喜全对");
                break;
            }else{
                System.out.println(countA+"A"+countB+"B");
            }
        }

    }


    public static int indexof(int[] val, int obj){
        for (int i = 0;i < val.length;i++){
            if (val[i] == obj){
                return i;
            }
        }
        return -1;
    }
    //自己写一个方法实现 判断某个数组里面是否包含某个值
    public static boolean contains(int[] val, int obj){
        for (int i = 0;i < val.length;i++){
            if (val[i] == obj){
                //重复了
                return true;
            }
        }
        return false;
    }

Java的类

类就是具备某些共同特征的实体的集合,它是一种抽象的数据类型,它是对所具有相同特征实体的抽象。在面向对象的程序设计语言中,类是对一类“事物”的属性与行为的抽象。举一个例子说明下类,比如Person(人)就是一个类,那么具体的某个人“张三”就是“人类”这个类的对象,而“姓名、身高、体重”等信息就是对象的属性,人的动作比如“吃饭、穿衣”等就是对象的方法。总之类就是有相同特征的事物的集合,而对象就是类的一个具体实例。同时类有多态和继承,例如“人类”可以分为“男人、女人”,“老人、小孩”那么“男人、女人”就是“人类”的子类等等。

关键词 抽象的概念&不实际存在的&不能完成具体的事情&具有共同的属性和方法

定义一个类,需要用到修饰符和class,以及一个具体的类名;通常情况下一个文件对应一个类
修饰符:public static final

 修饰符  class  类名{
     这个类的一些属性:成员变量
     这个类的功能:方法
  }

1.存什么值:成员变量
2.完成什么功能:方法

class Person{
     //成员变量定义在最上面
     String name;
     int age;
     float score;
     String password;
     char choice;
}

心得体会

今天是熟悉Java中类和对象的一天,算是对Java这个语言有了最基本的了解;希望继续努力

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,175评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,674评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,151评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,597评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,505评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,969评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,455评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,118评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,227评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,213评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,214评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,928评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,512评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,616评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,848评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,228评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,772评论 2 339

推荐阅读更多精彩内容