Java学习笔记(2)--- 对象和类入门,java包,th…

2019-11-26 16:09:04来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

Java学习笔记(2)--- 对象和类入门,java包,this 和 super区别

1.对象和类(Object and class):

 

一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。

面对对象编程是java非常重要的一部分,作者本身之前学过c++所以省略了部分基础,详见例子:https://www.runoob.com/java/java-object-classes.html

 

对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。

类:类是一个模板,它描述一类对象的行为和状态。

 

a.类的内容:

 

方法:比如说Dog可以有void barking(),void sleeping()这些行为。

局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。比如说我们要定义狗的年龄,就从外部引入一个age_dog的变量赋值给成员变量。没有默认值,必须自己赋值。

成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。比如狗dog可以有age,color这种特征变量。有默认值,如果没有会系统自动分配,根据类型不同则默认值不同。

类变量:类变量也声明在类中,方法体之外,但必须声明为static类型。

 

注:在一个类中,局部变量可以与成员变量同名,但是局部变量优先,如果非要访问成员变量的属性,则必须使用 this.color 

 

b.对象的操作:

 

 

声明对象一般用关键字new来创建一个新的对象。

例如:

Puppy myPuppy = new Puppy( "tommy" );    

其中Puppy是类的名字,my puppy是对象的名字,tommy则是狗这个对象的名字。

 

假设我们有一个方法是“setAge”,我们可以调用其来设定狗的年纪(成员变量age = 2):

myPuppy.setAge( 2 );

 

然后调用:

dog_age =  myPuppy.getAge( );

 

把成员变量赋值给主函数里的dog_age.

 

 

 2.Java包(package):

包主要用来对类和接口进行分类。当开发Java程序时,可能编写成百上千的类,因此很有必要对类和接口进行分类。

 

使用import去定位某个类,下面的例子命令行将会命令编译器载入java_installation/java/io路径下的所有类:

import java.io.*;

 

具体编程的例子见:https://www.runoob.com/java/java-object-classes.html

和c++不一样的就是c++除了cpp还得有个h头文件,java直接引用java文件就行。

 

几个注意事项:

1.java因强制要求类名(唯一的public类)和文件名统一,因此在引用其它类时无需显式声明。在编译时,编译器会根据类名去寻找同名文件。

2.package 的作用就是 c++ 的 namespace 的作用,防止名字相同的类产生冲突。Java 编译器在编译时,直接根据 package 指定的信息直接将生成的 class 文件生成到对应目录下。如 package aaa.bbb.ccc 编译器就将该 .java 文件下的各个类生到 ./aaa/bbb/ccc/ 这个目录。

3.import 是为了简化使用 package 之后的实例化的代码。假设 ./aaa/bbb/ccc/ 下的 A 类,假如没有 import,实例化A类为:new aaa.bbb.ccc.A(),使用 import aaa.bbb.ccc.A 后,就可以直接使用 new A() 了,也就是编译器匹配并扩展了 aaa.bbb.ccc. 这串字符串。

4.JAVA 和 C++ 一样,若是不定义任何的构造函数,会自动构造;如果定义了任何一个构造函数,就不会再自动构造,需要自己定义全部的构造函数。

 

 

3.this 和 super区别:

 

a.this:

this 是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。

 

sub 1.普通的直接引用:

就是指对目前所处的对象的引用。

 

sub 2.形参与成员名字重名,用 this 来区分:

比如说:

public int GetAge(int age){

   this.age = age;

   return this.age;

 }

}

 

sub 3.引用构造函数:

  见super里面的解释。

 

 

b.super:

super 可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。

 

sub 1.普通引用:

与 this 类似,super 相当于是指向当前对象的父类,这样就可以用 super.xxx 来引用父类的成员。

 

 

sub 2. 子类中的成员变量或方法与父类中的成员变量或方法同名:

class City extends Country {    //这个是指Country是city的一个子类

。。。

。。。

super.value()      //value(是子类的一个方法)

。。。

}

 

sub 3. 引用构造函数:

super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句)。

this(参数):调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)。

 

 

注意事项:

1.super是引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名 super.成员函数据名(实参)

2.this它代表当前对象名(在程序中易产生二义性之处,应使用 this 来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用 this 来指明成员变量名)

3.调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用 super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。

4.super() 和 this() 均需放在构造方法内第一行。

5.this 和 super 不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有 super 语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。

6.this() 和 super() 都指的是对象,所以,均不可以在 static 环境中使用。包括:static 变量,static 方法,static 语句块。

7.从本质上讲,this 是一个指向本对象的指针, 然而 super 是一个 Java 关键字。

 

 

 


原文链接:https://www.cnblogs.com/cptCarlvon/p/11934409.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Java 复习笔记7 - 集合框架

下一篇:SpringBoot2.0整合WebSocket,实现后端数据实时推送!