7.构造函数和方法

您所在的位置:网站首页 构造函数的八种方法 7.构造函数和方法

7.构造函数和方法

#7.构造函数和方法| 来源: 网络整理| 查看: 265

构造函数和方法 一、构造函数

(为什么要用) a)简化对象的创建对象的过程 b)代码重用,为对象的属性赋值,当然还可定一些代码逻缉 在这里插入图片描述

二、构造函数规则

a)构造函数名和类名完全一致 b)没有返回类型

三、构造函数语法 public class Teacher { //默认构造函数 public Teacher(){ } //以下两个版本是不同的构造函数 public Teacher(String pName, int pAge){ name = pName; age = pAge; } public Teacher(int pAge, String pName){ name = pName; age = pAge; //根据需要这里还可以写上其它处理逻辑的代码 } }

注意:一个类可以有多个版本的构造函数(即构造函数重载),各版本的构造函数要么参数的个数或参数的类型不一样,参数顺序不一样也可以。

四、默认构造函数的使用

如果定义类时,你定义了带参数的构造函数,那么此时默认构造函将变成不可用,如果你的确需要使用默认构造函数,那么你必须把默认构造函数明确的写出来。

public class Teacher { //这样Teacher类的默认构造函数不可用了,如要用默认构造函数就要明确写出 public Teacher(String pName, int pAge){ name = pName; age = pAge; } } 五、创建对象时内存中的分配情况

创建对象时内存中的分配情况:使用new关键字调用构造函数。 public static void main(String[] args) { Dog dog = new Dog(); //默认构造函数 Person p1 = new Person(dog); } JVM的内存区分为:栈(地址,局部变量),堆,代码段,数据段。 在这里插入图片描述

六、类定义的进一步改进

在这里插入图片描述

七、构造函数的作用

在这里插入图片描述 •通过带参数的构造方法,显式地为实例变量赋予初始值。 •可以给一个类添加多个版本的构造函数,每个版本的构造函数必须要参数的个数不同或参数的类型不同。 •构造方法除了给属性赋值还可根据需要写其它代码,一个构造方法内还可以调用另一个构造方法。

public class Teacher2 { //属性 String name; int age; String education; //学历 String position; //职位 //默认构造函数 public Teacher2( ){ name = "某某"; } //带参数构造函数 public Teacher2(String pName, int pAge){ //主体 name = pName; age = pAge; } public Teacher2(String pName, int pAge, String pEducation,String pPosition){ //主体 this(pName, pAge); //调用上面的构造函数 //name = pName; //age = pAge; education = pEducation; position = pPosition; } } //省略toString()方法…… public static void main(String[] args) { Teacher2 t1 = new Teacher2(); t1.name= "张三"; t1.age= 20; t1.education = "本科"; t1.position = "高级工程师"; System.out.println(t1); Teacher2 t2 = new Teacher2("李四", 22, "本科", "教师"); System.out.println(t2); //字符串属性不需要初始化时可以传null值 Teacher2 t3 = new Teacher2("王五", 27, null, null); System.out.println(t3); } 方法部分 一、方法签名 方法的名字和方法的参数列表构成了方法的签名,值得注意的是方法的返回类型不被视为方法签名的一部分。

语法:

[访问修饰符] 返回类型/void 方法名( [参数列表] ){ //方法主体 } 访问修饰符有4个:public, private, protected, default(不写出来) void a(){ } String a(){ } 这两个方法是相同的,语法错误! 二、方法调用 语法:变量.方法(); 或 变量.方法(参数列表) Person person = new Person(); person.speak(); person.eat(“肉”); 注意:在一个方法内也可以调用另一个方法。 三、构造函数和方法参数的两种参数传递方式

a)按值传递:所有的8种基本数据类型即值类型(包括它们对应的包装类)都是按值传递方式也就是说传递的是变量值的副本,String也是按值传递。 int --> Integer类, float --> Float类, boolean --> Boolean类 b)按引用传递:所有引用类型(除String)都是按引用传递参数的即传递的是对象地址。 在这里插入图片描述

变量作用域、关键字部分 一、变量作用域

在这里插入图片描述 变量按可访问范围可分为: a)成员变量(包括实例变量和类变量(也叫静态变量))也就是属性。 i.普通的属性(实例变量,非静态的),每个对象的属性都是独立的。 ii.静态的属性(类变量),所有这个类的对象都共享这个属性值。 b)局部变量也就是在构造函数、方法或代码块内(if-else, for, while,switch)声明的变量

二、this关键字

在这里插入图片描述 在这里插入图片描述 a)对象创建时,JAVA虚拟机都会给每个对象分配一个this关键字, 在本类中使用this时代表当前对象。 b)this用于构造函数和任何实例方法内,指向当前调用构造函数或方法的对象。 c)this 指向调用方法的当前对象。 d)this 关键字可在需要当前对象的引用时使用。 e)this不能在static静态方法里使用,如:main方法。 f)通过this(参数列表) 调用其他构造方法的时候, this()必须放到构造方法当中的第1行。 this(“alisa”, 24); //调用构造函数 public void aMethod() { this.bMethod(); //调用本类的另一个方法 } 在这里插入图片描述

三、super关键字:指向父类 public Music() { //調用父类的构造函数,如果不写出这行代码,那在编译类时JVM也会自动加入这行代码,并且这行代码必须出现在构造函数内的第一行 super(); //如果是调用父類的方法可以如下 String str = super.toString(); } 四、 变量和方法的分类:

•变量按static分类: .静态变量(也叫类变量):变量值被该类的所有对象共享。 .非静态变量(也叫实例变量):其值只属于单个对象,独立。 •方法的分类有两种: .静态方法(也叫类方法):此种方法被该类的所有对象共享。 .非静态方法(也叫实例方法):此种方法对该类的所有对象都是独立的。 在这里插入图片描述

五、 内存区域

要理解static的作用,首先对内存区域有所了解: 内存里分四个区域: a)code segment 代码段(存放代码,如静态方法) b)data segment 数据段(存放静态变量、常量) c)Stack 栈(存放局部变量,对象地址) d)Heap 堆(存放new出来的对象或者数组)

六、静态变量(类变量)

类变量就是该类的所有对象共享的变量,任何一个该类的实例去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量。类变量值的变化对该类所有对象来说都是知道的。在类方法(静态方法)中不能使用this关键字。 a)语法: static 数据类型 变量名 [=初值]; b)静态变量示例:参看chapter07/variables/StaticDemo.java c)静态方法(类方法)示例:参看chapter07/ variables /StaticMethodDemo.java d)静态初始化块: 参看chapter07/ variables /StaticCodeBlockDemo.java static{ …… } e)初始化代码块: { …… }

七、静态方法(类方法)

a)语法: 访问修饰符 static 数据返回类型 方法名([参数列表]){ …… } 如:public static void main(String[] args){ } 调用:类名.类方法名([参数列表]); b)静态方法共享,但每个方法内部的局部变量是私有的,每调用一次方法,会在栈中分配局部变量,方法退出时释放所有局部变量空间。 c)示例:类名.静态方法( [参数列表] ); 注意:不要乱用静态方法

八、静态与非静态成员的访 问总结

a)静态的东东总是通过类名直接访问,无须通过对象来调用。当然通过对象访问静态成员也是可以的但从不推荐这样用。 b)非静态成员的东东总是和对象相关联,也就是说非静态成员总通过对象来访问。 c)静态成员不可以访问非静态成员,反之Ok。

九、什么是JavaBean

什么是JavaBean?其实就是一个通用的类,JavaBean也叫POJO(Plain Old Java Object)类,它有以下特点: a)属性一般私有,使用private关键字声明。 b)为属性提供public 的getter 取值器和setter设值器方法,如:getName(), setName(String name)。 c)必须有一个public的默认构造函数。

为什么要用JavaBean: i.使对象的信息更好的隐藏起来,不会轻易的被外界破坏,这也是面向对象设计的本质。 ii.利用Java中反射技术可让程序自动化。

十、包的作用

包的作用:包其实在window里就是文件夹。 a)防止类命名冲突 b)可以更好的保护类中的数据 c)更加的模块化 d)在实际开发当中应根据类的职责将类放入到不同的包中 e)包的命名规则: i.包的命名遵守互联网域名的反向命名法: news.sina.com, game.sina.com ii.企业性质(com,edu,org,net).公司名.项目名.模块名[.子模块].类名 iii.包名由全小写字母组成,不能以圆点开头或结尾 /*

com.sina.news.*负责新闻处理的类com.sina.game.*负责游戏处理的类[com | org | net | edu] .公司名.项目名.模块名.类(子包)。如:com.lanqiao.olts.Xxx.Examination.java完整的类名(包+类名)、全限定类名com.lanqiao.ibook.entity.Order, Customercom.lanqiao.ibook.dao.OrderDao, CustomerDao(负责访问数据库) */ package com.lanqiao.olts; //必须在import语句之前 import ……; public class Xxx{

}

使用命令编译包中的类: 1.先去到包的顶级目录 2.编译:javac 包名1/包名2……/类名.java 3.运行:java包名1/包名2……/类名

十一、类的改进

在这里插入图片描述

十二、 访问修饰符

访问修饰符可以用在:类定义,构造函数定义、属性、方法定义。在这里插入图片描述

1)private: 私有访问修饰符的成员只能本类可以访问,其它类无法使用private修饰的成员。 2)public: 公有访问修饰符,任何包中的类都可以访问。 3)默认访问修饰符:就是没有修饰符,同一个包中的类都可以访问。 4)protected: 受保护的,就是提供给在不同包中子类使用的,也叫做子类访问级别。等到讲继承的时候再说。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3