前言:
继续整理昨天剩下的以及String类型的重要知识点以及难点。
1.构造函数:
1.构造方法是一种特殊的方法。它们有以下三个特殊性:
1. 构造方法必须具备和所在类相同的名字。
2. 构造方法没有返回值类型,甚至连 void 也没有。
3. 构造方法是在创建一个对象使用 new 操作符时调用的。构造方法的作用是初始化对象。
构造方法具有和定义它的类完全相同的名字。和所有其他方法一样,构造方法也可以重载(也就是说,可以有多个同名的构造方法,但它们要有不同的签名),这样更易于用不同的初始数据值来构造对象。
一个常见的错误就是将关键字 void 放在构造方法的前面。例如:
public void Circle() { }
new ClassName(arguments);
public void Circle() { }
在这种情况下,CircleO 是一个方法,而不是构造方法。
构造方法是用来构造对象的。为了能够从一个类构造对象,使用 new 操作符调用这个类
的构造方法,如下所示:
new ClassName(arguments);
例如: new Circle() 使用Circle 类中定义的第一个构造方法创建一个 Circle 对象。
new Circle(25)调用 Circle 类中定义的第二个构造方法创建一个 Circle 对象。
通常,一个类会提供一个没有参数的构造方法(例如:Circle())。这样的构造方法称为无参构造方法(no-arg 或 noargument constructor) — 个类可以不定义构造方法。在这种情况下,类中隐含定义一个方法体为空的无参构造方法。这个构造方法称为默认构造方法(default constructor),当且仅当类中没有明确定义任何构造方法时才会自动提供它。
2.构造函数调用和内存图解:
图解说明:
1. 首先会将main函数压入栈中,执行main函数中的 new Person(23,“张三”);
2. 在堆内存中分配一片区域,用来存放创建的Person对象,这片内存区域会有属于自己 的内存地址(0x88)。然后给成员变量进行默认初始化(name=null,age=0)。
3. 执行构造函数(这里省略部分知识,后面讲解)中的代码(age = a ; name = nm;),这段代码执行结束后,成员变量age和name的值已经改变。此步骤也为构造函数 初始化。执行结束之后构造函数弹栈,Person对象创建完成。将Person对象的内存地 址0x88赋值给p2
3.构造函数的细节:
1. 一个类中可以有多个构造函数,多个构造函数是以重载的形式存在的
2. 构造函数中也是有return语句的,用于结束初始化动作。
3. 构造函数是可以被private修饰的,作用:其他程序无法创建该类的对象
4.构造函数和一般函数的区别:
1. 构造函数在对象创建时就执行了,而且只执行一次。
2. 一般函数是在对象创建后,需要使用时才被对象调用,并可以被多次调用。
问题:
有了构造函数之后可以对对象的属性进行初始化,那么还需要对应的set和get方法吗?
需要相应的set和get方法,因为对象在创建之后需要修改和访问相应的属性值时在,这时只能通过set或者get方法来操作。
5.this调用构造函数:
在之前学习函数之间调用时,可以通过函数名进行调用。可是针对构造函数,无法通过构 造函数名来相互调用。 构造函数之间的调用可以通过this关键字来完成。
构造函数调用格式: this(参数列表);
注意:
1. this到底代表什么呢?this代表的是对象,具体代表哪个对象呢?
哪个对象调用了this所在 的函数,this就代表哪个对象。 调用其他构造函数的语句必须定义在构造函数的第一行,原因是初始化动作要最先执行。
2. 当在函数中出现了局部变量和成员变量同名的时候,那么在方法中怎么区别局部变量成员变量呢?
可以在成员变量名前面加上this.来区别成员变量和局部变量
2. String 类型:
1.char类型只能表示一个字符。为了表示一串字符,使用称为 String (字符串)的数据类型。
例如,下述代码将 message 声明为一个字符串,其值为 “Welcome to Java”:
String message = “Welcome to Java”;
String 实际上与 System 类和 Scanner 类一样,都是 Java 库中一个预定义的类。String类型不是基本类型,而是引用类型(reference type)。任何 Java 类都可以将变量表示为引用类型。使用引用类型声明的变量称为引用变量,它引用一个对象。这里,message 是一个引用变量,它引用一个内容为 Welcome to ]ava 的字符串对象。
1. String 是 Java 中的对象。表 4-7中的方法只能从一个特定的字符串实例来调用。由于这
个原因,这些方法称为实例方法。
2. 非实例方法称为静态方法。静态方法可以不使用对象来调用。定义在 Math 类中的所有方法都是静态方法。它们没有绑定到一个特定的对象实例上。
3. 调用一个实例方法的语法是 reference-Variable.methodName(arguments)。
4. 一个方法可以有多个参数,或者无参。例如,charAt(index)方法具有一个参数,但是 lengthO 方法则无参。回顾曾经介绍过的,调用静态方法的语法是 ClassName.methodName(arguments)。
例如:
Math 类中的 pow 方法可以使用 Math.pow(2,2.S)来调用。
2.求字符串长度:
可以调用字符串的length( )方法获取它的长度。
例如,下面代码:
String message = “Welcome to Java”;
System.out.println("The length of " + message + " is " + message.length());
显示
The length of Welcome to Java is 15
3.从字符串中获取字符:
4.字符串比较:
如何比较两个字符串的内容是否相等呢?你可能会尝试使用 == 操作符
如下所示:
if (stringl == string2)
System.out.println(“string1 and string2 are the same contents”);
else
System.out.println(“string1 and string2 are not equal”);
然而,操作符 ==只能检测 string1 和 string2是否指向同一个对象,但它不会告诉你它们的内容是否相同。因此,不能使用 ==操作符判断两个字符串变量的内容是否相同。取而代之,应该使用 equals 方法。
例如,可以使用下面的代码比较两个字符串:
if (stringl.equals(string2))
System,out.printlnC’stringl and string2 have the same contents’1);
else
System.out.printlnC’stringl and string2 are not equal");
5.字符串和数字间的转换:
可以将数值型字符串转换为数值。要将字符串转换为 int 值,可以使用Integer.parselnt方法,如下所示:
int intValue=Integer.parseInt(intString);
intString 是一个数值型字符串,例如"123"。
要将字符串转换为 double 值,使用Double.parseDouble 方法,如下所示:
double doubleValue = Double.parseDouble(doubleString);
doublestring是一个数值型字符串,例如"123.45"。
如果字符串不是数值型字符串,转换将导致一个运行时错误。Integer 和 Double 类都包含在 java.lang 包中,因此它们是自动导入的。
可以将数值转换为字符串,只需要简单使用字符串的连接操作符,如下所示:
String s = number + “” ;
3.吃鸡问题:
- 设计一个绝地求生游戏的最最最初级的玩家1射击玩家2的程序,主要运用到面向对象,构造函数等知识点。
1.思路及步骤:
2.具体程序以及每一层构造不同的函数:
在JVM中运行的编码(拥有主函数main):
第一层调用的构造函数:
第二层调用的构造函数:
第三层调用的构造函数:
第四层调用的构造函数:
第五层调用的构造函数:
3.运行结果: