Java基础知识每日总结(8)---Java类与对象

类与对象

1.简介
类是构造对象的模板或蓝图,由类构造对象的过程叫做创建类的实例。创建类的实例要使用构造器,构造器是一种特殊的方法,用来构造并初始化对象。构造器的名字应该与类名相同。
注:一个对象的变量并不是包含一个对象,而是引用了一个对象,new操作符的返回值是一个引用。
所有的Java对象都存储在堆中。

2.使用Java提供的类
Java中有Date类,它是用来表示时间点的,还有一个LocalDate类,这是用日历表示法表示时间的。不能使用构造器来构造LocalDate类的对象。例,

Date da=new Date();
String da1 = da.toString();
System.out.println(da1);  //输出:Wed May 13 11:23:51 CST 2020
System.out.println(LocalDate.now());  //输出:2020-05-13

LocalDate.now();这个语句会构造一个新对象,表示构造这个对象的日期。可以使用下面的语句提供年月日来构造一个对应特定日期的对象,通常都会将它保存在一个对象变量中。例,

LocalDate da = LocalDate.of(1999,5,15);
System.out.println(da);  //输出:1999-05-15

有了对象以后就可以调用类中的一些方法,如plusDays()这个方法需要一个参数,它的作用是计算当前对象+这个参数的结果。例,

LocalDate da = LocalDate.of(1999,5,15);
LocalDate da1 = da.plusDays(300);
System.out.println(da);  //输出:1999-05-15
System.out.println(da1);  //输出:2000-03-10

Java中有一种更改器方法,它是对象调用了一个方法,调用完成后这个对象发生了改变。还有一个方法是访问器方法,它是一个只访问对象而不修改对象的方法。
注:在源文件中只能有一个公有类(public 修饰的类),但可以有很多用户自定义的非公有类。

3.静态量与静态方法
如果在一个类中定义了静态的常量或变量即在常量或变量名前添加关键字static,那么在程序中可以通过类名.常量/变量名来获取它。如果关键字static被除去,则只能通过类的对象来访问这个常量或变量。
注:由关键字static修饰的常量或变量在类中只有一份,它属于类,不属于任何独立的对象。

静态方法是一种不能向对象实施操作的方法。例如,Math类的pow方法就是一个静态方法。在使用它时,不能使用任何Math对象,直接通过类名.方法名来使用。如,Math.pow(x,a)这是计算xa
注:在静态方法中没有this参数,静态方法可以访问自身类中的静态常量/变量。
需要使用静态方法的两种情况:

  • 一个方法不需要访问对象的状态,它所需要的数据都是通过参数直接获得。
  • 一个方法只需要类的静态量

4.方法参数
按值调用:方法接收调用者提供的值,基本数据类型为参数。
按引用调用:方法接收调用者提供的变量地址,引用数据类型为参数。
方法可以修改按引用调用对应的变量值,而不能修改按值调用对应的变量值,即如果参数传的是基本数据类型的变量则方法调用完成后该变量的值不发生改变,如果参数传的是引用数据类型的变量则值会改变。
Java对对象采用的不是引用调用,实际上,引用调用是按值传递的。

  • 一个方法不能修改一个基本数据类型的参数
  • 一个方法可以改变一个对象参数的状态
  • 一个方法不能让对象参数引用一个新的对象

5.对象构造
①重载
有些类有多个构造器就是利用了重载,重载就是多个方法有相同的名字,不同的参数。
注:Java允许重载任何方法而不仅仅是构造器方法。
重载必须满足以下条件:方法名相同、参数不同(参数的数据类型、参数个数、参数数据类型顺序)、返回类型和方法的修饰符可以不同。

    public static int add(int a,int b) {
		return a+b;
	}
	public static int add(int a,byte b) {
		return a+b;
	}

上述代码当在主方法中写add(1,2);它会调用第一个add方法而不是第二个,这是因为给一个整型值它默认是int类型的,如果想使用第二个add需要这样add(1,(byte)2),默认是int想要变成byte需要强制类型转换。

   public static long add(long a,long b) {
		return a+b;
	}

此时,调用上面的add方法不需要强制类型转换,需要这样写add(1L,2L)或add(1L,2),大转小不需要强制类型转换。同样给一个浮点数默认是double类型。

②默认初始化
如果在构造器中没有给初始值,那么就会自动给默认值:整型0、布尔型false、引用类型为null。
注:局部变量必须进行初始化,而全局变量可以不进行初始化。
③无参构造器
构造器是一个方法,它的方法名和类名相同,它没有返回类型,有返回类型的构造器就成了普通方法。
如果在构造类时没有给出构造器那么在创建对象时系统会自动调用无参构造器。
注:域即属性。
④在构造器中调用另一个构造器
在构造器第一行使用this(需要调用的另一个构造器的要求参数)语句来调用同一个类的另一个构造器。例,

public class Students {
	public Students() {
		System.out.println("你是学生");
	}
	public Students(int a) {
		this();
		System.out.println("你是"+a+"级学生");
	}
	public static void main(String[] args) {
		Students st=new Students(2020);  //输出  你是学生  你是2020级学生
	}
}

注:一个构造器只能调用一个构造器,且构造器调用另一个构造器的语句只能位于该构造器的第一行。
当可以用下面的程序来实现调用多个构造器,例

public class Students {
	public Students() {
		System.out.println("你是学生");
	}
	public Students(int a) {
		this();
		System.out.println("你是"+a+"级学生");
	}
	public Students(int a,String s) {
		this(a);
		System.out.println("你是"+a+"级"+s+"学生");
	}
	public static void main(String[] args) {
		Students st=new Students(2020,"Java学院");  // 输出为 你是学生 你是2020级学生 你是2020级Java学院学生
	}
}

注:普通方法是不能调用构造器的(因为是先有new构造器才会有内存地址才会生成普通方法),但是构造器可以调用普通方法。
使用this语句来调用构造器使得构造器程序变得美观且简单。例,

public class Students {
	private int Sno;
	private String Sname;
	public Students() {
		this.Sno=01;
		this.Sname="学生";
	}
	public Students(int Sno,String Sname) {
		this.Sno=Sno;
		this.Sname=Sname;
	}
	public Students(int Sno) {
		this.Sno=Sno;
		this.Sname="学生";
	}
	public Students(String Sname) {
		this.Sname=Sname;
		this.Sno=01;
	}
}

使用this语句进行简化后:

public class Students {
	private int Sno;
	private String Sname;
	public Students() {
		this(01,"学生");
	}
	public Students(int Sno,String Sname) {
		this.Sno=Sno;
		this.Sname=Sname;
	}
	public Students(int Sno) {
		this(Sno,"学生");
	}
	public Students(String Sname) {
		this(01,Sname);
	}
}

6.包
在Java中可以使用import来导入Java提供的包。但是当两个不同的包提供相同的类名,如java.util和java.sql中都有Date类,当在一个程序中要同时使用这两个包中的Date类时,可以在每个类名前加上完整的包名。例,

java.util.Date da=new java.util.Date();
java.sql.Date da1=new java.sql.Date(0, 0, 0);

import语句不仅可以导入类,还可以导入静态方法和静态属性。例,import static java.lang.System.*;这样就可以使用System类中的静态方法和静态属性。
注:默认包—defaulf package

7.final特性
final关键字可以用来修饰类、成员变量和方法等。它通常表示不可变化。使用final修饰的成员变量,一旦赋值之后就不能再更改;使用final修饰的类,是不能够继承的。通常由final定义的变量为常量,例,final double PI=3.1415926;
final除了可以修饰基本类型的常量之外,还可以修饰引用类型。由于数组变量也可以被看作一个对象引用,所以final可修饰数组。一旦一个对象引用被修饰为final后,它只能恒定指向一个对象,无法将其改变指向另一个对象。一个既是static又是final的成员变量只占据一段不能改变的存储空间。
可以将方法的参数定义为final类型的。
定义为final的方法不能被重写,同时定义为final的方法执行效率要高于非final方法。
如果一个父类中某个方法被设置为private修饰符,子类将无法访问该方法,自然无法覆盖该方法,所以一个定义为private的方法隐式被指定为final类型,这样无须将一个定义private的方法再定义为final类型。
定义为final的类不能被继承。将某个类设为final形式,类中的所有方法都被隐式设置为final形式,但是final类中的成员变量可以被定义为final或非final形式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值