JAVA入门第二季 第一章 类和对象

时间:2022-09-12 11:42:58

面向对象编程 Object Oriented Programming OOP

第一、什么是类和对象

  在具体说明类和对象之前,先说说别的。

  眼睛在人类身体上最为有用的器官。如果一个没有了眼睛,这个人与世界的联系会大大减小。因为人脑主要是通过眼睛来获取数据的;当然也有其它器官获取的哦数据帮助我们更加准确的描述我们所看到的现象。眼睛通过光线作用,把客观物理世界投影到人脑。人脑是由亿万多脑细胞组成。脑细胞神经元有反馈机制,当级联的脑脑细胞神经元多起来后,通过反复的实验和检测,使得大脑得到对客观世界有更准确的描述和解释(人脑能理解的)。  

  学过机器学人工神经网络理论的人都知道ALVINN系统。ALVINN系统是一个三层网络,有一个巨大的输入层(960个输入神经元). ANN的输入是一个30x32像素的图象,输出是车辆行进的方向。ALVINN系统使用反向传播算法来学习驾驶汽车(上图),它的最高时速达到每小时70英里。神经网络显示在图的左边,输入的摄像机图像在它的下边.左图显示了来自车前摄像机的图像是如何被映射到960个神经网络输入的,这些输入又前馈到4个隐藏单元,再连接到30个输出单元。网络输出编码了推荐的驾驶方向。右图显示了网络中一个隐藏单元的权值。进入这个隐藏单元的30´32个权值显示在大的矩阵中,白色的方框表示正权值而黑色的方框表示负权值。从这个隐藏单元到30个输出单元的权值被画在这个大矩阵上方的较小矩形中。从这些输出权值可以看出,激活这个隐藏单元会促进向左转。 下面是三个图。

JAVA入门第二季 第一章 类和对象JAVA入门第二季 第一章 类和对象JAVA入门第二季 第一章 类和对象

  

  人工神经网络(Artificial Neural Networks——ANNs)受到生物学的启发,生物的学习系统是由相互连接的生物神经元组成的异常复杂的网络。
    •人脑的构成,大约有1011个神经元,平均每一个与其他104个相连
    •神经元的活性通常被通向其他神经元的连接激活或抑制
    •最快的神经元转换时间比计算机慢很多,然而人脑能够以惊人的速度做出极其复杂的决策
    •很多人推测,生物神经系统的信息处理能力一定得益于对分布在大量神经元上的信息表示的高度并行处理
  所以,我们翻过来说明人脑的学习方式更高级与ANNs。
 
  回到类和对象,我通过举人工神经网路例子是为了谁明什么?对象就是我们的感官感知到的数据,是客观存在的。而类则是我们人脑对这个客观存在对象的描述。这个描述行为、描述过程是个学习的过程,是不断的实验和检验过程。描述的越准确,我们对客观世界的影响力越大。有点扯远了,总之,一个编程语言注定从一开始的简单数据类型,例如int、float、array、structure,到高级的描述形式--类。
     实现复杂的功能、描述复杂的现象,我们需要更好的、更强有力的描述工具。在科学界,数学就是描述工具。这是题外话。

第二、如何定义JAVA中的类

分三步走:1)首先定义一个类,要求类名,首字母为大写;具体方法是先建一个工作空间>工程.>包>类

2)在定义该类都什么属性,即成员变量

       3)方法(JAVA中的“方法”,其实与C语言中的“函数”相同),说明该类都有什么功能

例如:

  public class Telphone(){

    String name="世界杯";

    static String className="JAVA开发一班";//静态变量的声明和赋值。

    //属性(成员变量)有什么

    float screen;

    float cpu;

    float mem;

    //方法 干什么

    void call{

      System.out.println("Telphone 有打电话的功能!");

    }

    void sendMessage{

      System.out.println(“screen”+screen+"cpu"+cpu+"mem"+mem+"Telphone 有发短信的功能!");

    }

    //无参的构造方法

    public Telphone(){

      System.out.println("无参构造的构造方法!");

    }

    //有参的构造方法

    public Telphone(float newScreen,float newCpu,float newMem){

      screen=newScreen;

      cpu=newCpu;

      mem=newMem;

      System.out.println("无参构造的构造方法!");

    }

    public static void main(String[] args){

      System.out.println(Telphone.className);

      //下面的方法是不可以用的。

      System.out.println();

    }

}

第三、如何使用JAVA中的对象

使用对象的步骤:

  1#创建对象

    类名 对象名 = new 类名();---假如有Telphone类,则创建对象:

    Telphone phone = new Telphone();

    这个创建过程是实例化的。对象是存储在内存当中的。

  2#使用对象

    引用对象的属性:对象名.属性

    phone.screen = 5;//给screen属性赋值5

    引用对象的方法(函数):对象名.方法();

    phone.sendMessage();//调用sendMessage()方法

  C语言中(《C Primer Plus》Chapter14.Sructure and Other Doata Forms)中提到 ,将声明结构体视为Template(模板),然后用这个结构体定义个结构体变量,然后对这个变量进行初始化和应用。Java中的“类”的声明和使用方法,我认为与C的结构体使用法相似的,也是先定义个类,然后用这个类新定义一个新类,对这个类,进行操作。

  模板类,起到模范、原型的作用。如上面手机类的定义和使用,假如我有两个不同配置的手机,那么,我们新定义的两个手机类其变量值和方法功能可能不尽相同的。

第四、JAVA中的成员变量和局部变量

1)JAVA中的成员变量和局部变量

  1、成员变量

    在类中定义,用来描述对象将要有什么。

    默认时候,其值为零。float 类型变量赋值时,后面加 f。

  2、局部变量

    在类的方法中定义,在方法中临时保存数据。

2)成员变量和局部变量的区别

  a、作用域不同

    局部变量的作用域仅限于定义它的方法。

    成员变量的作用域在整个类内部都可见的。

   通俗讲,作用域就是跟动物领地的概念。非洲狮子群可以袭击斑马、角马等,但反过来斑马、角马一般不会主动惹非洲狮子群。

  b、初始值不同

    定义成员变量的时候有默认初始值;

    定义局部变量的时候没有默认初始值。

  c、同一个方法中,不允许有同名局部变量,

    不同方法中,可以有相同名局部变量。

  d、两类变量同名时,局部变量有具有更高的优先级----就近原则

    

第五、JAVA中的构造方法  

  1、构造方法:  

    a、使用new+构造方法  创造一个新的对象,从而实例化

    b、构造方法是定义在Java类中的一个用来初始化对象的方法

      为什么要用构造方法来初始化对象?

      类中定义的变量和方法太多,以致一个个拷贝和赋值变量和方法变得繁琐且容易出错。

      如果我们把这个繁琐且容易出错的初始化过程,让电脑自动完成,节省了程序员的脑力,提高编写程序的准确性和快速实现能力。 

    c、因此,目前为止,一个类包括有:变量、构造方法、方法、

      构造方法,从名称就可以看出是一种方法,是特殊的方法,专门用来实现初始化类用的。

  2、构造方法与类同名且没有返回值

      构造方法要在类中包含。

  3、无参构造方法

  4、有参构造方法

    有参和无参构造方法可以并存的。

  5、但没有指定构造方法时,系统会自动添加无参的构造方法。

      这个特征也是为了,节约成本,自动化”生产线“。

  6、当有指定构造方法时,无论是有参、无参的构造方法,都不会自动添加无参的构造方法

  7、构造方法的重载:方法名相同,当参数不同的多个方法,调用时会自动根据不同的参数选择相应的方法

    其实一个类同时有无参的构造方法和有参的构造方法,其实就是方法的重载。

    问题:方法的重载,有什么作用?

       提供多种选择,

  8、构造方法不但可以给对象的属性赋值,还可以保证给对象的属性赋一个合理的值

    如何实现呢?有参构造方法内,加入条件判断,从而解决传值不正确的问题。

    

第六、JAVA中的static 使用之静态变量

      “大家都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立。然而在某些时候,我们更希望该类所有的对象共享      同一个成员。此时就是 static 大显身手的时候了!!

      Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用直接  

   访问,也可以使用对象名进行访问。当然,鉴于他作用的特殊性更推荐用类名访问~~

      使用 static 可以修饰变量、方法和代码块。”

  1、静态变量及使用方法

    公有静态变量的使用方法:public static String className="JAVA开发一班";

    私有静态变量的使用方法:private static String className="JAVA开发一班";

    推荐类名访问,所以,利用上面的代码段的定义,可以这样调用静态变量:System.out.println(Telphone.className);

  2、静态方法、静态类

    与静态变量一样,我们也可以使用 static 修饰方法,称为静态方法或类方法。其实之前我们一直写的 main 方法就是静态方法。

     a、 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后

    通过对象来访问非静态变量.如下:

    pbulic  class HelloWorld{

      String name="世界杯";

      static String hobby="worldcup";

    }

    public static void print(){

       //创建类的对象

       HelloWorld hello=new HelloWorld();

       //通过推向来实现在静态方法中  调用  非静态变量

       System.out.println("喜欢"+hello.name+"!");//非静态

       System.out.println("I love "+hobby+" !");//静态

    }

    b、 在普通成员方法中,则可以直接访问同类的非静态变量和静态变量。

    public void show(){

      System.out.println("喜欢"+name+"!");//非静态

      System.out.println("I love "+hobby+" !");//静态

    }

    c、 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。

    public void show(){

      System.out.println(我爱世界杯!");

    }

    public static void print(){

      System.out.println(2016世界杯!");

    }

    public static void main(String[] args){

      //普通成员方法必须通过对象来调用

      HelloWorld hello=new HelloWorl();

      hello.show();

      //可以直接调用静态方法

      print();

    }

第七、静态初始化块

  在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。

  需要特别注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量

  程序清单:

public class HelloWorld{

  int num1;

  int num2;

  static int num3;

  public HelloWorld(){  //构造方法

    num1=91;

    System.out.println("通过构造方法为变量num1赋值");

  }

  {//初始化块

     num2=74;

    System.out.println("通过初始化块为变量num1赋值");

  }

  {//静态初始化块

     num3=83;

    System.out.println("通过静态初始化块为变量num1赋值");

  }

  public static void main(String[] args){

    HelloWorld hello=new HelloWorld();

    System.out.println("num1:" + hello.num1);

    System.out.println("num2:" + hello.num2);      

    System.out.println("num3:" + num3);

    HelloWorld hello2=new HelloWorld();

  }

}

  通过输出结果,我们可以看到,程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。

学习视频来源:www.imooc.com

JAVA入门第二季 第一章 类和对象的更多相关文章

  1. Java入门第二季第一章类和对象知识点

    Java 中的 static 使用之静态方法 1. 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员.如: 如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问 ...

  2. JAVA入门第二季(mooc-笔记)

    相关信息 /** * @subject <学习与创业>作业1 * @author 信管1142班 201411671210 赖俊杰 * @className <JAVA入门第二季&g ...

  3. Java入门第二季学习总结

    课程总概 该门课程作为java入门学习的第二季,是在有一定的java基础上进行的进一步学习.由于该季涉及到了java的一些核心内容,所以相对第一季来说,课程难度有所提升.大致可将该季的课程分为五部分: ...

  4. java 入门 第二季1

    (1). 类和对象(java 语言是面向对象的) 1). 类是对象的类型 具有相同的属性和方法的一组对象的集合 类:属性和方法 定义类: 类名 属性 方法 //class为关键字 2.定义类时,首字母 ...

  5. 《Java入门第二季》第一章 类和对象

    什么是类和对象 如何定义 Java 中的类 如何使用 Java 中的对象 Java中的成员变量和局部变量1.成员变量:在类中定义,描述构成对象的组件. 2.局部变量:在类的方法中,用于临时保存数据. ...

  6. 《Java入门第二季》第四章 多态

    Java 中的多态1.引用的多态:意思就是父类的句柄既可以持有本类的对象,也可以持有子类的对象. 2.方法的多态:注意点是当父类句柄持有子类对象的时候,无法调用子类特有的方法. 多态中的引用类型转换1 ...

  7. Java入门 第二季第三章 继承

    这是我学习慕课网Java课程的笔记,原视频链接为:http://www.imooc.com/learn/124 3-1 Java 中的继承  ★ 概念:继承是类与类的一种关系,是一种 "is ...

  8. java 入门 第二季4

    1. 多态 继承是多态的实现基础 引用的多态 父类的引用可以指向本类的对象 父类的引用可以指向子类的对象 方法的多态 创建本类对象时,调用本类方法 2种是调用子类的方法或继承的方法 子类中添加独有的方 ...

  9. 慕课笔记-Java入门第二季

    1.java对象的使用 (1)创建对象 类名 对象名=new 类名(); (2)使用对象 引用对象的属性:对象名.属性; 引用对象的方法:对象名.方法(); Note: ①Java会给成员变量赋初始值 ...

随机推荐

  1. 整数中1出现的次数(从1到n整数中1出现的次数)

    题目:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了.AC ...

  2. js 函数提升和变量提升

    总结: 函数提升比变量提升优先级高! 词法分析 词法分析方法: js运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 分析参数 再分析变量的声明 分析函数说明 具体步骤如下: 函数在运行 ...

  3. jQuery 显示加载更多

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  4. leetcode&commat; &lbrack;68&rsqb; Text Justification &lpar;String Manipulation&rpar;

    https://leetcode.com/problems/text-justification/ Given an array of words and a length L, format the ...

  5. Windows Azure 安全最佳实践 - 第 5 部分:基于Claim 的标识,单点登录

    基于Claim的身份标识是处理网站与 Web 服务的身份认证和访问一种简单而强大的方式,无论您是在本地工作还是面向云工作.您可以通过减少自定义实施和使用基于Claim的单一简化标识模型,创建更安全的应 ...

  6. PHP中使用 JKS&lpar;Java Key Store&rpar;的方法

    PHP语言无法直接读取 JKS中的密钥,需要通过以下方法进行转换 本例以JKS中的私钥为例 首先 使用 KeyStore Explorer工具,打开JKS文件 ,此时可能需要输入 JKS密码 对私钥进 ...

  7. Dreamweaver 调字体大小

    编辑--首选参数--字体 这里是指调代码字体的大小,就是为了编码时看的清楚些

  8. jQuery的删除的三种方法remove&lpar;&rpar;&comma;detach&lpar;&rpar;&comma;empty&lpar;&rpar;

    remove()方法是从DOM中删除所有匹配的元素,包括匹配元素的子元素.但是他会有一个返回值, 返回值是一个指向已被删除的节点的引用,所以说,remove删除的元素,还可以再回收利用. var $l ...

  9. css之层叠上下文和层叠顺序

    大家在写网页的时候会不会经常遇到莫名奇妙的样式问题,比如谁覆盖了谁.也找不出原因,为什么z-index高的却没有覆盖掉z-index低的元素呢? 带着这些疑问.我做了个小实验.代码如下: <st ...

  10. Ubuntu 18&period;04 安装 odoo12 源码版

    更新和升级 在我们进入安装过程之前,你应该更新和升级Ubuntu.打开终端窗口,发出以下命令: sudo apt-get updatesudo apt-get upgrade 注意:如果内核升级,则必 ...