• Java 学习 第二篇;面向对象 定义类的简单语法:


    1:基本知识
    [public / protected / private] class 类名
    {
    零个到多个构造器定义;
    零个到多个属性;
    零个到多个方法;
    }
    其中类中各个成员之间的顺序没有关系,且各个成员之间可以相互调用,但是static修饰的成员不能访问没有static修饰的成员;
    static 修饰的成员表明它是属于这个类共有的而不是该类的单个实例!

    定义属性的语法格式:
    [public / protected / private] [static | final] Type 属性名
    定义方法的语法格式;
    [public / protected / private] [abstract /final] [static] 返回值类型 方法名(参数表)
    { };
    构造器的定义;
    [p/p/p] 构造器名(参数表){};
    注意构造器无返回值类型!

    1.2对象的产生和使用
    1
    Person p;
    2
    p = new Person();
    3

    4
    可简写成:
    5
    Person p = new Person();
    this关键字是一个对象默认引用。this关键字总是指向调用该方法的对象. this关键字最大的作用就让类中一个方法,访问类的另一个方法或属性。

    static修饰的方法和属性,既可以通过类来调用,也可以通过实例(对象)来调用,没有使用static修饰的普通方法和属性,则只能通过实例来调用。

    如果需要在静态方法中访问另一个普通方法,则只能重新创建一个对象。


    1.3关于static
    static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。 被static修饰的成员变量和成员方法独立于该类的任何
    对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。

    只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。 用public修饰的static成员变量和成员
    方法本质是全局变量和全局方法,当声明它类的对象市,不生成static变量的副本,而是类的所有实例共享同一个static变量。

    static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,可以直接通过类名来访问,访问语法为:
    1
    类名.静态方法名(参数列表...)
    2
    类名.静态变量名

    声明为static的方法有以下几条限制:

    1、它们仅能调用其他的static 方法。

    2、它们只能访问static数据。
    因为static修饰的成员属于类成员,在类初始化阶段就会被执行,载入内存。而普通成员需要在具体创建实例后才能被执行。所以若在static修饰的成员内访问普通方法,亲,别人还没创建实例,还不
    存在呢,咋调用访问? 若同样都是static方法,大家都在类初始化阶段被执行了,就可以调用了。

    3、它们不能以任何方式引用this 或super。
    this是指向对象的,而我们又知道static定义的成员是类成员,不属于任何一个实例,并且类成员的执行是在创建实例之前的,所以,在类成员内使用this,系统不知道指向何处,因为没有
    对象;

    2:在java方法的所属性主要体现在如下几个方面:
    -> 方法不能独立定义只能在类中定义;
    -> 从逻辑上来看发发要么属于一个类要么属于一个对象;
    -> 不能独立执行方法,执行方法只能使用类或者或者对象作为调用者;
    3: 方法的参数传递机制;注意参数传递在被调函数和主函数使用不同的栈空间和c语言中基本相同直接调用交换函数结果是没有交换;
    4:形参长度可变的方法 示例:
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    test("sss","sss");

    }
    public static void test(String ...sb)
    {
    for(String temp:sb)
    System.out.println(temp);
    }
    可以输出 sss sss;两个字符串
    5:方法重载不做赘述,只要形参表不相同即可;
    6:成员变量和局部变量
    成员变量即是在类范围内定的变量也就是属性;局部变量是在一个方法内定义的变量;
                                         * ->实例属性(没有static修饰)
                   * -> 成员变量* *
                                         * * ->类属性 (有static修饰的属性)
    变量 *
                                         * * ->形参
                   * ->局部变量 * * ->方法局部变量
                                         * ->代码块局部变量
    7:示例:
    public class Person
    {
    public String name;
    public static int eyeNum;
    }
    下面分析下 在执行语句: Person p=new Person();内存中的过程
    首先如果这行代码是第一次使用这个类,则系统通常会在第一次使用Person类时候加载这个类,并且做初始化;首先会为类属性中的 eyeNum 分配内存空间并赋初始值 eyeNum=0;
    然后才是隐含的创建了一个新的Person类的实例并将这个Person对象赋给p (Person对象在堆中保存)
    如果,有第二个Person p1=new Person(); 这次就不用从新加载Person类;
    8:隐藏和封装;Java的访问控制符; private 、public、protected。
    private 修饰的方法和属性值 只能在本类中使用;
    default 修饰的方法和属性值 只能在本包中使用;
    protected 修饰的方法和属性值 只能在本包中使用,还可以被不同包中的子类访问;
    public 修饰的方法和属性值 任何情况下局可以被访问;
    9:package 和import
    需要注意的是父包和子包表示了某种内在的逻辑关系,但是父包和子包在使用时不存在任何关系,如果父包需要使用子包中的类那么必须使用子包的全名;
    为了简化编程使用import关键字直接向Java文件中导入该Java类的全部类,import 出现在package之后 class定义之前;

    阿南 On the way.
  • 相关阅读:
    Job 失败了怎么办?- 每天5分钟玩转 Docker 容器技术(133)
    用 k8s 运行一次性任务
    运行自己的 DaemonSet
    查看内核页表kernel_page_tables (aarch32)
    Linux内存管理学习3 —— head.S中的段页表的建立
    Linux内存管理学习2 —— head.S中的段页表的建立
    Linux内存管理学习1 —— head.S中的段页表的建立
    阅读Linux内核源码时建立tags索引
    在TQ2440上运行perf,生成Flame Graph
    Linux驱动开发——指针和错误值
  • 原文地址:https://www.cnblogs.com/RealMan/p/3671970.html
Copyright © 2020-2023  润新知