博主:命运之光 专栏:Java零基础入门
学习目标 理解面向对象三大主要特征; 掌握类与对象的区别与使用; 掌握类中构造方法以及构造方法重载的概念及使用; 掌握包的定义、包的作用等; 掌握方法的参数传递规则。
本意是把物体打包装到箱子里,然后封起来。
引申含义:把一系列功能打包到一台设备里,提供使用这些功能的界面。 常见的封装体:汽车,电脑,洗衣机等。
Java中哪些内容体现了封装? 类、方法……
🍓🍓封装是面向对象编程的特点之一,将对象的属性和方法封装起来,其载体是类,类通常对客户隐藏其实现细节,这就是封装的思想。 🍓🍓案例:观察没有封装的代码。
class Book { // 定义一个新的类
String title; // 书的名字
double price; // 书的价格
public void getInfo() { // 此方法将由对象调用
System.out.println("图书名称:" + title + ",价格:" + price);
}
}
public class text1 {
public static void main(String args[]) {
Book book = new Book(); // 声明并实例化对象
book.title = "Java开发"; // 设置属性内容
book.price = -89.9; // 设置属性内容
book.getInfo(); // 调用方法
}
}
此时代码没有任何语法错误,但在逻辑上是有错误的,因为没有任何一本书的价钱会是负数,为了避免这种错误的出现,需要将此属性设置为“私有属性(private)”。
🍓🍓案例:将成员属性设置为私有属性(private关键字)。
class Book { // 定义一个新的类
private String title; // 书的名字
private double price; // 书的价格
public void getInfo() { // 此方法将由对象调用
System.out.println("图书名称:" + title + ",价格:" + price);
}
}
public class test1{
public static void main(String args[]) {
Book book = new Book(); // 声明并实例化对象
book.title = "Java开发"; // 设置属性内容
book.price = -89.9; // 设置属性内容
book.getInfo(); // 调用方法
}
}
编译出现错误,title,price属性用了private关键字,这样就表示这两个属性只能在Book类被访问,其他类不能直接进行访问。
Java中通过将数据声明为私有的(private),再提供公共的(public)方法:getXXX()和setXXX()实现对该属性的操作,以实现下述目的:
🍓🍓开发中,针对属性有这样一种定义:所有在类中定义的属性都要求使用private声明,如果属性需要被外部所使用,那么按照要求定义相应的setXXX、getXXX方法,以String title为例。 🍓🍓setXXX方法主要是设置属性内容,public void setTitle(String t),有参; 🍓🍓getXXX方法主要是取得属性内容:public String getTitle( ),无参
🍓🍓案例:为Book类中的封装属性设置setXXX、getXXX操作。
class Book { // 定义一个新的类
private String title; // 书的名字
private double price; // 书的价格
public void setTitle(String t) { // 设置title属性内容
title = t;
}
public void setPrice(double p) { // 设置price属性内容
if (p > 0.0) { // 进行数据验证
price = p ;
}
}
public String getTitle() { // 取得title属性内容
return title;
}
public double getPrice() { // 取得price属性内容
return price;
}
public void getInfo() { // 此方法将由对象调用
System.out.println("图书名称:" + title + ",价格:" + price);
}
}
public class text1{
public static void main(String args[]) {
Book book = new Book(); // 声明并实例化对象
book.setTitle("Java开发"); // 设置属性内容
book.setPrice(-89.9); // 设置属性内容
book.getInfo(); // 调用方法
}
}
🍓🍓在类中除了成员方法之外,还存在一种特殊类型的方法,那就是构造方法,就是专门用来创建对象的方法,当通过new关键字创建对象时,其实就是在调用构造方法。
类名称 对象名称 = new 类名称()
构造方法一直存在 !
构造方法:构造方法是类中一个特殊的成员方法,用于为类中属性初始化。
//构造方法的定义格式:
public 方法名(【参数列表】) {
……….. //方法体
}
说明: 1、public:构造方法修饰符; 2、构造方法方法名与类名相同; 3、构造方法在实例化新对象(new)的时候调用一次; 4、构造方法没有返回值类型说明,不需要用void修饰符; 5、在构造方法中可以为成员变量赋值;
如果想改变默认成员属性的初始化值,让系统创建对象时就为该对象的成员属性显式地指定初始值,可以通过构造方法来实现。
当类未定义任何构造方法时,系统会自动提供一个默认的构造方法(不带参数的),又称缺省构造方法。
缺省构造方法:进行对象初始化操作,默认初始化值。
说明: 1、构造方法的核心作用:实例化对象时设置设置属性的初始值; 2、一个类中至少保留一个构造方法;(若一个也未定义,系统会自动生成默认的无参构造方法)。
在Java中,this关键字比较难理解,它的作用和其词义很接近。 this关键字的作用:
🍓🍓案例:局部变量与成员变量同名。
class Book {
private String title;
private double price;
public Book(String title, double price) {
title = title; // 原本目的是将构造方法的title变量内容设置给title属性
price = price; //原本目的是将构造方法的price变量内容设置给price属性
}
// setXXX、getXXX略
public String getInfo() {
return "书名:" + title + ",价格:" + price;
}
}
public class text1 {
public static void main(String args[]) {
Book book = new Book("Java开发", 89.2);
System.out.println(book.getInfo());
}
}
🍓🍓案例:使用this关键字明确的表示访问类中的属性。
class Book {
private String title;
private double price;
public Book(String title, double price) {
this.title = title; // this.属性表示的是本类属性
this.price = price;
}
// setter、getter略
public String getInfo() {
return "书名:" + title + ",价格:" + price;
}
}
public class text1 {
public static void main(String args[]) {
Book book = new Book("Java开发", 89.2);
System.out.println(book.getInfo());
}
}
在一个类之中,可以使用this调用两种方法(普通方法、构造方法),而在要调用本类方法也就分为两种形式:
🍓🍓范例:调用本类普通方法
class Book {
private String title;
private double price;
public Book(String title, double price) {
this.title = title;
this.price = price;
}
public void print() {
System.out.println("调用本类的普通方法") ;
}// setter、getter略
public String getInfo() {
this.print() ; // 调用本类方法
return "书名:" + title + ",价格:" + price;
}
}
public class text1 {
public static void main(String args[]) {
Book book = new Book("Java开发", 89.2);
System.out.println(book.getInfo());
}
}
🍓🍓范例:调用构造方法
class Book {
private String title;
private double price;
public Book() { // 无参构造方法
System.out.println("一个新的Book类对象产生。");
}
public Book(String title) {
this() ; // 调用本类无参构造方法
this.title = title;
}
public Book(String title, double price) {
this(title) ; // 调用本类有一个参数的构造方法
this.price = price;
}// setter、getter略
public String getInfo() {
return "书名:" + this.title + ",价格:" + this.price;
}
}
public class text1 {
public static void main(String args[]) {
Book book = new Book("Java开发", 89.2);
System.out.println(book.getInfo());
}
}
说明:
🍍🍍在Java中,可以将一个大型项目中的类分别独立出来,分门别类的存到功能类似的程序里,保存到不同的包中,再将这些包中的程序文件一起编译执行,这样程序代码更易维护。
一个程序由多个不同的程序包组成
🍓🍓在Java程序之中的包,主要的目的是可以将不同功能的文件进行分割。所谓的包实际上指的就是文件夹。在Java之中使用package关键字来定义包,此语句必须写在*.java文件的首行。 包的定义格式: package 包名 ;
package javase.ch3.demo ; // 定义程序所在包,此语句必须放在首行
public class Hello {
public static void main(String args[]) {
System.out.println("Hello World !") ;
}
}
🍓🍓使用包可以将一个完整的程序拆分为不同的文件进行分别保存,这样就会造成一个问题,不同包之间有可能要进行互相访问,那么此时就需要使用包的导入(import语句)操作。
语法格式: import 包.类
🍓🍓范例:导入一个包中的多个类。 要在一个类中导入同一个包中许多类的时候,则这样每次都重复编写“import 包.类”语句会很麻烦,所以可以使用“包.*”的方式来代替一个包中多个类的导入操作。
package demo02;
import demo03.*; // 自动导入demo03包中所需要的类
public class TestMessage {
public static void main(String args[]) {
Message msg = new Message(); // 实例化对象
msg.getMessage(); // 调用方法
}
}
Java 中方法的参数主要有3种,分别为值参数、引用参数和可变参数。 1、值参数(基本类型) 🍓🍓表明实参与形参之间按值传递,当使用值参数的方法被调用时,编译器为形参分配存储单元,然后将对应的实参的值复制到形参中,由于是值类型的传递方式,所以,在方法中对值类型的形参的修改并不会影响实参。 2、引用参数 🍓🍓如果在给方法传递参数时,参数的类型是数组或者其他引用类型,那么,在方法中对参数的修改会反映到原有的数组或者其他引用类型上,这种类型的方法参数被称之为引用参数。 3、可变参数 🍓🍓声明方法时,如果有若干个相同类型的参数,可以定义为可变参数,该类型的参数声明如下: 🍓🍓权限修饰符 返回值类型 方法名(参数类型… 参数名)
注意: