3.3 构造函数

构造函数特征:

它具有与类相同的名称;

它不含返回值;

它不能在方法中用retumn 语句返回一个值

构造方法在程序设计中非常有用,它可以为类的成员变量进行初始化工作,当一个类的实例对象刚产生时,这个类的构造方法就会被自动调用,我们可以在这个方法中加入要完成初始化工作的代码。这就好像我们规定每个“人”一生必须先洗澡,我们就可以在“人”的构造方法中加入完成“洗澡”的程序代码,于是每个“人”一出生就会自动完成“洗澡”,程序就不必再在每个人刚出生时一个一个地告诉他们要“洗澡”了

在构造方法里不含返回值的概念是不同于“void”的,对于“public void Person()”的写法就不再是构造方法,而变成了普通方法,很多人都会犯这样的错误,在定义构造方法时加了“void”,结果这个方法就不再被自动调用了

重载构造方法可以完成不同初始化的操作,当创建一个 Person 实例对象的同时,直接给人的姓名和年龄赋值,可以使用下面的方式去产生这个 Person 实例对象

Person p1 = new Person ("Tom", 18);

3.4 this引用句柄

在成员方法中,对访问的同类中成员前加不加 this 引用,效果都是一样的,这就好像同一个公司的职员彼此在提及和自己公司有关的事时,不必说出公司名一样,当然为了强调,可以加上“咱们公司·..”这样的前缀,在程序里同样可以如此,而 his 就相当于“我所属于的那个对象”。每个成员方法内部,都有一个 this 引用变量,指向调用这个方法的对象,前面所用的类A 中的成员方法与 this 之间的关系

我们想通过构造方法将外部传入的参数赋值给类成员变量,构造方法的形式参数名称与类的成员变量名相同。

形式参数就是方法内部的一个局部变量,成员变量与方法中的局部变量同名时,在该方法中对同名变量的访问是指那个局部变量。如果明白了这个道理和 this 关键字的作用就可以修改上面的程序代码,来达到我们的目的。

构造方法是在产生对象时被 Java 系统自动调用的,我们不能在程序中像调用其他方法一样去调用构造方法。但我们可以在一个构造方法里调用其他重载的构造方法,不是用构造方法名,而是用 his(参数列表)的形式,根据其中的参数列表,选择相应的构造方法。

3.5 与垃圾回收有关的知识

为了便于理解 finalize()方法的作用,先介绍一下 C++中的析构方法。在一个对象即将被从内存中释放时,析构方法被自动调用,这个方法里的程序代码也就得到了执行。有了析构方法,程序就可以实现“每一个对象被释放前,自动去完成一些清理工作方面的事情这样的功能。在 C++中,常用析构方法去释放对象在生存期间所占用的一些资源,就好比要求每个人在临终之前都要写出他所知道的自己的债权,不至于将这些只有他知道的东西在其死后成为永远的秘密,我们可以在“人”类的析构函数中增加“写出他所知道的他的债权”的程序代码。只要某个对象的构造方法被调用了,知道一个对象刚产生了,那么只要某个对象的析构方法被调用了,我们就知道这个对象即将消亡了。由于类代码的编写早于对象的产生,利用构造和析构方法,我们就可以提前对对象的产生和消亡过程进行一些控制。我经常问学员们这样的一个问题,构造方法被调用时,对象产生了吗?析构方法被调用时,对象还在内存中存在吗?俗话说:“皮之不存,毛将附焉?”,如果对象都不存在,又怎么能够调用它的方法,所以,无论是构造方法被调用,还是析构方法被调用,对象都在内存中存在。

finalize0方法的作用类似 C++中的析构方法,但由于Java 有垃圾回收的机制,当一个对象变成垃圾,它所引用的其他对象在没有被别的有效的句柄引用的话,也会随之变成垃圾,也就是不用程序员再去做“释放对象在生存期间所占用的一些资源”这样的事情了,finalize0方法的作用就不如C++中的析构方法那么重要了。finalize0方法是在对象被当成垃圾从内存中释放前调用,而不是在对象变成垃圾前调用,垃圾回收器的启用不由程序员控制,也无规律可循,并不会一产生了垃圾,它就被唤起,甚至有可能到程序终止,它都没有启动的机会。因此这并不是一个很可靠的机制,所以,我们无法保证每个对象的 finalize(方法最终都会被调用

3.6 函数的参数传递

对象的引用变量并不是对象本身,它们只是对象的句柄(名称)。就好像一个人可以有多个名称一样(如中文名、英文名),一个对象可以有多个句柄,我们在前面已经讲过对象的生命期与引用变量之间的关系

API(Application ProgrammingInterface):应用程序编程接口编写程序去控制机器人踢足球,程序需要向机器人发出向前跑、向后跑、射门、抢球等各种命令。机器人厂商定会提供一些用于控制机器人的接口类,这些类中定义好了操作机器人各种动作的方法。其实,这些接口类就是机器人厂商提供给应用程序编程的接口,大家把这些类称为API

JavaAPI:指的就是JDK中提供的各种功能的Java类这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用

String类在java.lang 包下,所以使用的时候不需要导包

string 类代表字符串,Java程序中的所有字符串文字(例如“abc“都被实现为此类的实例也就是说,Java 程序中所有的双引号字符串,都是 String 类的对象

字符串不可变,它们的值在创建后不能被更改

String字符串的特点

Java程序中所有的双引号字符串,都是String类的对象

字符串不可变,它们的值在创建后不能被更改

虽然String的值是不可变的,但是它们可以被共享

publicchar charAt(intindex): 返回指定索处的char值,字符串的索引也是从0开始的

publicintlength0:返回此字符串的长度

import java.util.Scanner;

public class Demo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入:");
        String s = sc.nextLine();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            System.out.println(c);
        }
    }
}
import java.util.Scanner;

public class Demo01 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入:");
        String s = sc.nextLine();
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            System.out.println(chars[i]);
        }
    }
}
import java.util.Scanner;

public class Demo02 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入:");
        String s = sc.nextLine();
        int big=0;
        int small=0;
        int num=0;
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            char c = chars[i];
            if (c>='A' && c<='Z'){
                big++;
            }else if (c>='a' && c<='z'){
                small++;
            }else if (c>='0' && c<='9'){
                num++;
            }
        }
        System.out.println("大写字母:"+big);
        System.out.println("小写字母:"+small);
        System.out.println("数字:"+num);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值