Java的面向对象

05-构造器、this、import、package关键字

2021-07-01 488 0

简介 构造器、this、import、package关键字


1. 构造器

    构造器(或构造方法、constructor)的使用

    

      一、构造器的作用:

    1.创建对象

    2.初始化对象的信息,一般是初始化对象的属性

      二、说明:

    1.如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器

    2.定义构造器的格式:权限修饰符  类名(形参列表){}  ---- 形参列表可为空

    3.一个类中定义的多个构造器,彼此构成重载

    4.一旦显式的定义了类的构造器之后,系统就不再提供默认的空参构造器,提供非空参的构造器后,也提供空参的构造器

    5.一个类中,至少会有一个构造器,类中一定会有构造器

//AccountTest.java
package com.ylaihui.oop2;
class Account{
    	// 属性
    	int id;
    	String name;
	
    	// 方法
	public int getId(){
		return id;
	}
	// 构造器 ---- 一个类中定义的多个构造器,彼此构成重载
	public Account(){
		System.out.println("Account()...");
	}
	public Account(int i){
		id = i;
	}
}
public class AccountTest {
	public static void main(String[] args) {
		//创建类的对象:new + 构造器
		//我们发现 Account(), 很像一个方法,但是又不是方法, Account() 中的 Account 只能跟类名字相同
		Account a = new Account();
	}
}

2. 属性赋值的过程

     总结:属性赋值的先后顺序

    ① 默认初始化

    ② 显式初始化(定义属性的时候初始化)

    ③ 构造器中初始化

    ④ 通过"对象.方法" 或 "对象.属性"的方式,赋值

    以上操作的先后顺序:① - ② - ③ - ④

//BikeTest.java
package com.ylaihui.oop2;

class Bike{
    	String name;
    	double weight = 10.2;
    	
    	public Bike(){}
    	public Bike(double w){
    		weight = w;
      }
	void setWeight(double w){
		weight = w;
	}
}

public class BikeTest {
	public static void main(String[] args) {
		Bike b = new Bike();
		System.out.println(b.weight);
		
		Bike b1 = new Bike(22.3);
		System.out.println(b1.weight);

		b1.setWeight(33.3);
		System.out.println(b1.weight);
	}
}

3. this 关键字的使用

    总结来说就是在调用set方法时,如果set方法的形参与属性同名,为了避免歧义, 引入了this关键字

     在Java中, this关键字比较难理解,它的作用和其词义很接近。

         它在方法内部使用,即这个方法所属对象的引用;

         它在构造器内部使用,表示该构造器正在初始化的对象。

     this 可以调用类的属性、方法和构造器

     什么时候使用this关键字呢?

         当在方法内需要用到调用该方法的对象时,就用this。

        具体的:我们可以用this来区分属性局部变量

        比如: this.name = name;

//PersonTest.java
package com.ylaihui.oop2;

class Person{
    	String name;
    	int age;
    	
    	public void setName(String name){
		// 就近原则,这里的name是 setName 方法的形参,这里因为同名导致赋值失败
		name = name;
	}
	public void setAge(int age){
		// this 理解为当前对象 
		this.age = age;
	}
}

public class PersonTest {
	public static void main(String[] args) {
		Person p = new Person();
		p.setName("TOM");
		p.setAge(11);
		
		System.out.println(p.name);
		System.out.println(p.age);
	}
}

4. this关键字修饰方法或构造器

//StudentTest.java
package com.ylaihui.oop2;

class Student{
    	String name;
    	int age;
    	
    	Student(){
    		System.out.println("null arguments constructor...");
	}
	Student(String name){
		this();
		this.name = name;
	}
	Student(String name, int age){
		this(name);
		this.age = age;
	}
	
	private void method(){
		System.out.println("some comm fun!");
	}
	public void show(){
		this.method();
		System.out.println(this.name);
		System.out.println(this.age);
	}
}

public class StudentTest {
	public static void main(String[] args) {
		Student s = new Student("lisimmy", 33);
		
		s.show();
	}
}

5.this调用构造器

    ① 我们在类的构造器中,可以显式的使用"this(形参列表)"方式,调用本类中指定的其他构造器

    ② 构造器中不能通过"this(形参列表)"方式调用自己----自己调自己,死循环

    ③ 如果一个类中有n个构造器,则最多有 n - 1构造器中使用"this(形参列表)"

    ④ 规定:"this(形参列表)"必须声明在当前构造器的首行

    ⑤ 构造器内部,最多只能声明一个"this(形参列表)",用来调用其他的构造器(由④推出)

    

//StudentTest.java
package com.ylaihui.oop2;

class Student{
    	String name;
    	int age;
    	
    	Student(){
    		System.out.println("null arguments constructor...");
	}
	Student(String name){
		this();
		this.name = name;
	}
	Student(String name, int age){
		this(name);
		this.age = age;
	}
	
	private void method(){
		System.out.println("some comm fun!");
	}
	public void show(){
		this.method();
		System.out.println(this.name);
		System.out.println(this.age);
	}
}

public class StudentTest {
	public static void main(String[] args) {
		Student s = new Student("lisimmy", 33);
		
		s.show();
	}
}



6. package关键字

    1. java.lang----包含一些Java语言的核心类, 如String、 Math、 Integer、 System和Thread, 提供常用功能

    2. java.net----包含执行与网络相关的操作的类和接口。

    3. java.io ----包含能提供多种输入/输出功能的类。

    4. java.util----包含一些实用工具类, 如定义系统特性、 接口的集合框架类、 使用与日期日历相关的函数。

    5. java.text----包含了一些java格式化相关的类

    6. java.sql----包含了java进行JDBC数据库编程的相关类/接口

      package关键字的使用

    1.为了更好的实现项目中类的管理,提出包的概念

    2.使用package声明类或接口所属的包,声明在源文件的首行

    3.package 属于标识符,遵循标识符的命名规则、规范(xxxyyyzzz)、“见名知意”

    4.每"."一次,就代表一层文件目录。

    补充:同一个包下,不能命名同名的接口、类。

    不同的包下,可以命名同名的接口、类。


7. import关键字

    import关键字的使用

    import:导入

      1. 在源文件中显式的使用import结构导入指定包下的类、接口

    2. 声明在包的声明和类的声明之间

    3. 如果需要导入多个结构,则并列写出即可

    4. 可以使用"xxx.*"的方式,表示可以导入xxx包下的所有结构

      5. 如果使用的类或接口是 java.lang 包下定义的,则可以省略 import 结构

    6. 如果使用的类或接口是本包下定义的,则可以省略import结构

    7. 如果在源文件中,使用了不同包下的同名的类,则必须至少有一个类需要以全类名的方式显示比如 java.sql.Date    java.util.Date

    java.sql.Date date1 = new java.sql.Date(5243523532535L);

    8. 使用"xxx.*"方式表明可以调用xxx包下的所有结构。但是如果使用的是xxx子包下的结构,则仍需要显式导入  (* 不表示子包)

      9. import static:导入指定类或接口中的静态结构:属性或方法。

    import static java.lang.System.*;

    import static java.lang.Math.*;

    之后就可以这样使用:

    out.println("hello");

    long num = round(123.434);

    

//ImportTest.java
package com.ylaihui.oop2;

import java.util.Date;
import static java.lang.System.*;
import static java.lang.Math.*;

public class ImportTest {
    	public static void main(String[] args) {
		Date d = new Date();
		java.sql.Date d1 = new java.sql.Date(0);
		out.println(d);
		out.println(d1);
		
		out.println("hello");
		long num = round(123.434);
	}
}


点赞 0

文章评论

欢迎您:

纸上得来终觉浅,绝知此事要躬行!

112 文章 36783 浏览 3 评论

联系我

  •   QQ:    361352119
  •  Email:  lisimmy@sina.com
  • 微信: