zoukankan      html  css  js  c++  java
  • Java基础(二)

    1、笔记

    1/*
        使用方法的时候,注意事项:
    
        1. 方法应该定义在类当中,但是不能在方法当中再定义方法。不能嵌套。 ----> Python 中的闭包、装饰器可以
        2. 方法定义的前后顺序无所谓。
        3. 方法定义之后不会执行,如果希望执行,一定要调用:单独调用、打印调用、赋值调用。
        4. 如果方法有返回值,那么必须写上“return 返回值;”,不能没有。
        5. return后面的返回值数据,必须和方法的返回值类型,对应起来。
        6. 对于一个void没有返回值的方法,不能写return后面的返回值,只能写return自己。
        7. 对于void方法当中最后一行的return可以省略不写。
        8. 一个方法当中可以有多个return语句,但是必须保证同时只有一个会被执行到,两个return不能连写。
         */
    
    2、方法的重载
        多个方法名称一样,但是参数列表不一样;
        Python中会被覆盖,而Java中都可以同时存在
        注意事项:
            方法重载与下列因素相关:
            1、参数个数不同;
            2、参数类型不同;
            3、多类型的顺序不用; ---> (int a, double b) 与 (double a, int b)不一样
            方法重载与下列因素无关:
            1、与参数名称无关;
            2、与方法的返回值类型无关;
    
    3、在调用输出语句的时候,println方法其实就是进行了多种数据类型的重载形式。(因为 println 可以打印任何内容,那么相当于有多个 println 方法,只是参数不同,用来接收各种各样的数据类型)
    
    4、数组的初始化:在内存当中创建一个数组,并且向其中赋予一些默认值。
    
    两种常见的初始化方式:
        1. 动态初始化(指定长度)
        2. 静态初始化(指定内容)
    
        动态初始化数组的格式:
        数据类型[] 数组名称 = new 数据类型[数组长度];
    
        静态初始化基本格式:
        数据类型[] 数组名称 = new 数据类型[] { 元素1, 元素2, ... };
    
        省略格式:
        数据类型[] 数组名称 = { 元素1, 元素2, ... };
    
    注意事项:
        1. 静态初始化没有直接指定长度,但是仍然会自动推算得到长度。
        2. 静态初始化标准格式可以拆分成为两个步骤。
        3. 动态初始化也可以拆分成为两个步骤。
        4. 静态初始化一旦使用省略格式,就不能拆分成为两个步骤了。
    
        使用建议:
        如果不确定数组当中的具体内容,用动态初始化;否则,已经确定了具体的内容,用静态初始化。
    
    5、直接打印数组名称,得到的是数组对应的:内存地址哈希值。
    
    6、
    使用动态初始化数组的时候,其中的元素将会自动拥有一个默认值。规则如下:
    如果是整数类型,那么默认为0;
    如果是浮点类型,那么默认为0.0;
    如果是字符类型,那么默认为'u0000';
    如果是布尔类型,那么默认为false;
    如果是引用类型,那么默认为null。
    
    注意事项:
    静态初始化其实也有默认值的过程,只不过系统自动马上将默认值替换成为了大括号当中的具体数值。
    
    7、Java内存需要划分为5个部分
        1、栈:存放的都是方法中的局部变量。方法的运行一定要在栈中运行。
        局部变量:方法的参数,或者是方法{}内部的变量
        作用域:一旦超出作用域,立刻从栈内存当中消失
        2、堆:凡是new出来的东西,都在堆当中。
        堆内存里面的东西都有一个地址值,16进制
        堆内存里面的数据,都有一个默认值,例如:
            如果是整数类型,那么默认为0;
            如果是浮点类型,那么默认为0.0;
            如果是字符类型,那么默认为'u0000';
            如果是布尔类型,那么默认为false;
            如果是引用类型,那么默认为null。
        3、方法区:储存.class相关信息,包含方法的信息。
        4、本地方法栈:与操作系统相关。
        5、寄存器:与CPU相关。
    
    8、所有的引用类型变量,都可以赋值为一个null值。但是代表其中什么都没有。
    
    9、
        一个方法可以有0、1、多个参数;但是只能有0或者1个返回值,不能有多个返回值。
        如果希望一个方法当中产生了多个结果数据进行返回,怎么办?
        解决方案:使用一个数组作为返回值类型即可。
    
        任何数据类型都能作为方法的参数类型,或者返回值类型。
    
        数组作为方法的参数,传递进去的其实是数组的地址值。
        数组作为方法的返回值,返回的其实也是数组的地址值。
    
    10、
        面向过程:当需要实现一个功能的时候,每一个具体的步骤都要亲力亲为,详细处理每一个细节。
        面向对象:当需要实现一个功能的时候,不关心具体的步骤,而是找一个已经具有该功能的人,来帮我做事儿。
    
    11、类:是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。
        对象:是一类事物的具体体现。对象是类的一个实例(对象并不是找个女朋友),必然具备该类事物的属性和行为。
    
    12、
    注意事项:
    1. 成员变量是直接定义在类当中的,在方法外边。
    2. 成员方法不要写static关键字。
    
    131. 导包:也就是指出需要使用的类,在什么位置。
        import 包名称.类名称;
        对于和当前类属于同一个包的情况,可以省略导包语句不写。
    
        2. 创建,格式:
        类名称 对象名 = new 类名称();
        Student stu = new Student();
    
        3. 使用,分为两种情况:
        使用成员变量:对象名.成员变量名
        使用成员方法:对象名.成员方法名(参数)
        (也就是,想用谁,就用对象名点儿谁。)
    
        注意事项:
        如果成员变量没有进行赋值,那么将会有一个默认值,规则和数组一样。
    
    14、局部变量和成员变量
        1. 定义的位置不一样【重点】
        局部变量:在方法的内部
        成员变量:在方法的外部,直接写在类当中
    
        2. 作用范围不一样【重点】
        局部变量:只有方法当中才可以使用,出了方法就不能再用
        成员变量:整个类全都可以通用。
    
        3. 默认值不一样【重点】
        局部变量:没有默认值,如果要想使用,必须手动进行赋值
        成员变量:如果没有赋值,会有默认值,规则和数组一样
    
        4. 内存的位置不一样(了解)
        局部变量:位于栈内存
        成员变量:位于堆内存
    
        5. 生命周期不一样(了解)
        局部变量:随着方法进栈而诞生,随着方法出栈而消失
        成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失

    2、数组的长度属性(注意是属性不是方法)

    每个数组都具有长度,而且是固定的,Java中赋予了数组的一个属性,可以获取到数组的长度,语句为: 数组名.length ,属性length的执行结果是数组的长度,int类型结果。由次可以推断出,数组的最大索引值为 数组名.length-1 。

    3、数组的内存图

    4、一个对象的内存图

     

    注意:

    对象调用方法时,根据对象中方法标记(地址值),去类中寻找方法信息。这样哪怕是多个对象,方法信息
    只保存一份,节约内存空间。

  • 相关阅读:
    Code Forces 650 C Table Compression(并查集)
    Code Forces 645B Mischievous Mess Makers
    POJ 3735 Training little cats(矩阵快速幂)
    POJ 3233 Matrix Power Series(矩阵快速幂)
    PAT 1026 Table Tennis (30)
    ZOJ 3609 Modular Inverse
    Java实现 LeetCode 746 使用最小花费爬楼梯(递推)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
  • 原文地址:https://www.cnblogs.com/linyuhong/p/10512065.html
Copyright © 2011-2022 走看看