Java自学笔记2

    技术2026-02-19  10

    第六章 类

    一、新建类

    1、什么是类?

    类, class :用于描述一种数据类型

    在Java里,通过新建 class 来描述各种自定义的数据类型。一个class可以若干基本类型的组合。

    2、如何新建一个类?

    (1)、打开Eclipse,在左侧的Package Explorer窗口中,右键点 src下的my (2)、在右键菜单里, 选择New | Class (3) 、在新建类(New Class)对话框里 则Eclipse为我们添加了一个Student.java (4)、为类添加内容 Student的属性:学号 姓名 性别 手机号

    package my; public class Student { public String id; // 学号 public String name; // 姓名 public boolean sex; // true: 男 false 女 public String cellphone; // 手机号 }

    (5)、创建对象 在HelloWorld.java里,

    package my; public class HelloWorld { public static void main(String[] args) { Student s1 = new Student(); s1.id = "20171001"; s1.name = "小王"; s1.sex = true; s1.cellphone = "18600010201"; System.out.println("学号: " + s1.id); System.out.println("姓名: " + s1.name); System.out.println("性别: " + s1.sex); System.out.println("手机号: " + s1.cellphone); } }

    3、理解:“类”与“对象”

    类:类型,描述某一类事物的共性 Student是一个类型 所有的Student都有id,name,sex, cellphone这几个属性

    对象:一个具体实例 s1是一个Student类型的对象, 因而,s1具有id, name, sex, cellphone这几个属性

    二 、类的属性

    1、注意事项

    ① 起一个合适的类名

    类名应该有意义,让人能顾名思义类名一般以大写开头 例如 Movie , ActionMovie

    ② 属性:定义合适的名字和类型

    属性名一般以小写开头 如 fontSize lineWidth应该用什么类型

    2、类的嵌套

    比如,每个学生,除了有学号、姓名、手机号等基本信息之外。还绑定了一个校园卡、一个银行账号。

    public class Student { public String id; public String name; public boolean sex; public String cellphone; public StudentCards cards = new StudentCards(); } 在main里创建Student对象,对其属性cards赋值。由于cards本身也是对象,所以可对s1.cards.bankCardNumber赋值。 ```java public static void main(String[] args) { // 第一个学生的信息 Student s1 = new Student(); s1.id = "20171001"; s1.name = "王草"; s1.sex = true; s1.cellphone = "18610022345"; s1.cards.schoolCardNumber = "230920390q302"; s1.cards.bankCardNumber = "2923923023293023"; }

    `

    三、再说对象与引用

    1、类的属性的默认值

    在Java语言里:

    整数类型(long int short byte):默认值为 0 小数类型(double float):默认值为 0.0 boolean类型:默认值为 false 引用类型 (String, Student…) : 默认值为 null 数组类型:默认值为null 因为引用类型和数组类型默认值为null,此处容易出现 NullPointerException,空指针错误


    第七章 类的方法(相当于c++的函数)

    1、类的方法

    (1)一个类里,不仅可以添加属性,还可以添加方法。 类 { 属性 : 描述“我有什么” 方法 : 描述“我能做什么” } (2)类的方法的基本形式 修饰符 返回值类型 名称 ( 参数列表 ) { 方法体 } (3)如何使用类的方法 为了使用的类的方法我们首先必须创建一个对象: Student s = new Student(); 然后通过点运算符来调用类的方法: s.show();

    2、方法的参数

    参数列表: ( 0…N个参数 )

    以逗号分隔类型,变量名

    void show (int a, double b , String s) void show (boolean checked, String msg)

    3、方法的返回值

    (1)return 语句

    在Java语言里,使用return语句来返回一个值。

    return语句执行后,函数不再往下执行,直接退出方法。

    例题1 求两个数组的最大值

    ①写出函数

    package my; public class max { public int MAX=0; public int getmax(int[] a) { for(int i=0;i<a.length;i++) { if(a[i]>MAX)MAX=a[i]; } return MAX; } }

    ②调用函数

    package my; public class HelloWorld { public static void main(String[] args) { int[] a={3,4,5}; int[] b= {7,8,9}; max m=new max(); int m1=m.getmax(a); int m2=m.getmax(b); System.out.println("最大值为:"+m.MAX); } }

    例题2

    给定一个int值,如果打印一个三角型 如 1 2 3 4 5 6 7 8 9 10

    public void print ( int n ) { if(n<=0) { System.out.println("给定的数<=0!!"); return; } if(n>10) { System.out.println("给定的数太大了!"); return; } int rows = 0; // 行数 int cols = 0; // 列数 for(int k=1; k<=n; k++) { System.out.print( k + " "); cols ++; if( cols > rows ) { System.out.print("\n"); // 换行 rows ++; cols = 0; } } }

    return语句:在得到结果之时,立即终结方法

    return语句可以放在方法的任何一个位置,可以放在while{} 也可以放在if{}中,没有限制如果返回值是void,也可以直接终结函数return;

    例题3

    给定一个数组,求里面的能被8整除的数 int[] arr = { 18, 28, 32, 36, 48 };

    // 把符合要求的数放在返回值里 public int[] find8 ( int[] arr) { // 创建等大的数组 int[] temp = new int[ arr.length]; int count = 0; for (int i=0; i<arr.length; i++) { if( arr[i] % 8 == 0) { temp[count] = arr[i]; count ++; } } // 拷贝到结果数组里 int[] result = new int[ count ]; for(int i=0; i<count; i++) { result[i] = temp[i]; } return result; }

    调用:

    int[] arr = { 18, 28, 32, 36, 48 }; MyMath m = new MyMath(); int[] result = m.find8( arr ); System.out.println("完成");

    各处类型的值都可以被return:

    int , double, boolean, String引用类型: Student这样的对象数组对象

    4、方法名的重载、

    (1) 重载 (overload) Java语言里,允许方法的名字相同(参数不同即可)

    public class Simple { public void test() {} public void test (int a, int b) {} public void test (int a, String b) {} }

    调用的时候,编译器会根据参数列表来匹配不同的方法。


    第八章 当前对象

    一、当前对象 this

    this表示当前对象,当访问对象自身的属性时,可以直接用this访问 this : 表示当前对象

    要访问自己的属性和方法时,可以用this来访问 this.width this.height this.isPrime( … )

    二、省略与重名

    1、通常情况下,this是可以省略的(让代码更简洁)

    2、当与方法内变量重名时,不能省略this,因为方法内的变量称为 局部变量,局部变量的名字会覆盖 属性 的名字

    package my; public class Example { public int number = 10; public void showNumber() { System.out.println("当前值: " + number); } // 方法内有一个变量叫number ,与属性number重名 public void test() { int number = 12; // 局部变量 System.out.println("number is " + this.number); // } public void setNumber (int number) // 局部变量 { // 左边this.number指的是属性 // 右边 number指的是局部变量 this.number = number; } }

    3、例题来提现面向对象的思维

    package my; public class Machine { public int money = 0; // 机器里投入了多少钱 // 人民币:1,5,10 public void insertCash ( int cash ) { if( cash > 10) { System.out.println("只能识别1元,5元,10元!"); return; } this.money += cash; System.out.println("当前余额: " + this.money); } // 交易完成 public int exchange () { int numOfCoin = this.money / 1; this.money = 0; System.out.println("交易完成, 当前余额: " + this.money); return numOfCoin; } }

    调用

    // HelloWorld.java ,main里的测试代码/// Machine m = new Machine(); m.insertCash( 5 ); m.insertCash( 10); m.insertCash( 50); // 按一下按钮 int coins = m.exchange(); System.out.println("拿到了" + coins + "个游戏币");

    对象就是数据和算法的一个融合体 面向对象的思维方式: 给它所需的数据 >> 让它干活 >> 取出结果


    第九章 访问控制与封装

    1、访问修饰符

    在 属性/方法 前面, public(公开的): 该成员可以被外部访问 (类的外部 ) private(私有的): 该成员不可以被外部访问 示例:

    public class Example { public int number = 10; public void show() { System.out.println("number: " + number); } }

    注意 (1)内部访问时不受private限制(内部:指类的内部方法) (2)不写访问修饰符,则一般默认为private( 忽略这种规则)

    2、Getter与Setter(重点,写管理系统的时候超级好用!!!)

    在Java里,类的属性一般设置为private。那么,外部还怎么访问属性的值呢? Getter: 添加一个方法,用于读取该属性的值 Setter: 添加一个方法,用于设置该属性的值 方法的命名规则: get + 属性名 set + 属性名 注意把属性名的首字母大写,如setNumber

    当写一个系统的时候,有时候也许你会需要些十七八个甚至更多的set或是get函数,注意,eclipse里可以自动添加 Getter/Setter!

    步骤如下 右击界面出现如下内容 选择之后会出现 选择你想创建的对应的函数即可

    3、封装

    封装:是一种设计思想,将实现细节封装到内部,不让用户看到,从而达到对内部信息进行保护的目的。用户能操作的,都是public的。


    第十章 对象的创建与销毁

    一、构造方法(在c++里面称为构造函数)

    1、定义:

    构造方法:用于构造对象的方法 ( 当创建对象时系统自动调用的方法 ) 规则:

    (1) 方法名与类名相同(2) 无返回值

    示例:

    package my; public class Student { public String id; public String name; public boolean sex; // 构造方法 public Student (String id, String name, boolean sex) { this.id = id; this.name = name; this.sex = sex; } }

    创建对象:

    Student s = new Student("2019215xxx", "徐同学", true);

    2、构造方法的好处

    在创建对象的同时,传入参数,达到初始化对象的目的

    3、构造方法的重载

    通常一个类可以加多个构造方法,一般至少要加一个“默认构造方法”(即无参数的构造方法)

    示例:

    package my; public class Student { public String id; public String name; public boolean sex; public Student () { this.id = "00000"; this.name = ""; } public Student (String name) { this.name = name; } // 构造方法 public Student (String id, String name, boolean sex) { this.id = id; this.name = name; this.sex = sex; } }

    4、构造方法的访问控制

    构造方法一般用public修饰。 某些特殊的情形用private(比如说:单例模式,初学者暂不需要了解)

    5、构造方法的简化写法

    第一种写法:在构造方法里初始化

    public class Example { int[] arr ; public Example() { arr = new int[4]; } }

    第二种写法:直接初始化

    public class Example { int[] arr = new int[4]; public Example() // 构造方法可以省略不写 { } }

    此时,构造方法可以省略不写。所以,在Java里我们经常看不到构造方法,大家都是简化写法,即在定义属性的时候直接初始化。

    需要注意的是,普通语句必须写在构造方法里。 例如

    public class Example { int[] arr = new int[4]; arr[0] = 1; // 错!赋值语句必须写在方法体里! arr[3] = 20; // 错!赋值语句必须写在方法体里! }

    上面这种写法是错误的 正确的写法为:

    public class Example { int[] arr = new int[4]; // 定时变量时可以初始化 public Example() { arr[0] = 1; // 语句必须写在方法体里 arr[3] = 20; } }

    二、对象的销毁

    在Java语言,程序员只管创建对象,不管销毁对象,这是因为对象的销毁由系统自动完成。

    Student stu = new Student();

    当对象不再被使用时,由圾圾回收机制GC 自动回收。( GC: Garbage Collect ) 注意,回收的不是垃圾,而是不再被使用的对象

    那么,何为对象不再被使用呢? 对象不再被使用,即对象失去引用。当一个对象,没有任何引用指向它时,称为“失去引用”,该对象即将被GC回收。

    Student stu = new Student(); // 对象1 stu = new Student(); // 对象2被stu引用。对象1失去引用
    Processed: 0.037, SQL: 9