javaSE:面向对象基础

面向对象基础

  我们可以用关键字class来定义一个类,一个java文件可以同时定义多个class。每一个源文件必须有且只有一个public class,并且类名和文件名保持一致!
类的组成: [修饰符] 属性类型 属性名 = [默认值]
方法组成:[修饰符] 返回值类型 方法名(形参列表) {}

创建对象:

  对象?当然这里不是我们想要有的那个对象哈。java中对象(object)是实例存在的某些事物的个体,也称实例。(class)类是创建对象的模板,对象是类的实例。定义一个类,也就是说明一个类。创建了一个类,一定要实例化对象后,才能访问和调用。

  1. 声明对象:类定义了一类对象的特征,每一个对象都是相应类的实例。
    结构: 类名 对象名; 例如 Person a;
  2. 创建对象:要为对象分配内存空间,还需要用new关键字来创建对象。
    结构:对象名 = new 构造方法名(实参列表); Person a=new Person();
  3. 对象的使用:对象创建后,可以访问对象的属性和方法。
    结构: 对象名 . 属性名 或 对象名 . 属性名(实参列表);

构造方法(重点):

  构造方法是一种特殊的方法,利用构造方法能够初始化对象的属性,注意的是,构造方法必须与定义它的类有完全相同的名字。
  构造方法的结构:

  [修饰符] 类名(参数列表){
   //方法体
  }

构造方法具有以下特点:
  1)具有与类相同的名称
  2)不含返回值类型
  3)不能在方法中用return语句返回一个值
  4)一般访问权限为public

构造方法的作用:
  1)完成对象的创建,即完成对象的实例化
  2)一般使用构造方法来完成对属性的初始化

  在开发中,我们编写自己的类时,应该根据需要提供相应的构造方法,保证在用这个类时,能够选择合适的构造方法。构造方法可以像普通方法一样发生重载,声明多个有不同参数的构造方法。任何对象都是通过内存分配操作符new创建和开辟内存空间。
如果在开发时,没有明确的写出构造方法,在编译时编译器会发现该类没有构造方法,这时编译器会自动地给这个类增加一个构造方法,该构造方法没有任何参数,称之为“默认的空构造方法”。要养成写构造方法的习惯,哪怕是无参构造方法。

		//无参构造方法	
		class Person{
			String name;
			int age;
			String address;
			/*
			默认存在的无参构造方法
			public Person() {}
			*/
		}
		public class Text{
			public static void main(String[] args){
			Person P = new Person();
			P.name="xiaohong";
			P.age=23;
			P.address="召唤兽峡谷";
			System.out.println("姓名:"+P.name+"\n年龄:"
			+P.age+"\n地址"+P.address);
		}
	}

this关键字介绍:

  当创建一个对象成功后(在构造方法调用前,对象已经创建成功),虚拟机(JVM)会动态的分配一个引用,该引用指向的就是当前对象,这个引用的名字叫做this。
在成员方法中:谁调用这个方法,那么this就指向那个对象。
在构造方法中:this指向新创建的那个对象。
this关键字主要应用:
  1、this调用本类中的成员变量;
  2、this调用本类中的成员方法;
  3、this调用本类中的其它构造方法

class Person{
    		//有参构造方法
			String name;
			int age;
			String address;
		public  Person(String name,int age,String address){
			this.name=name;
			this.age=age;
			this.address=address;
		}
	}
		public class Text{
			public static void main(String[] args){
			Person P = new Person("xiaohong",23,"召唤兽峡谷");
			System.out.println("姓名:"+P.name+"\n年龄:"+P.age+"\n地											址:"+P.address);
		}
}

注意:
  1、如果定义了指定的构造方法,那么默认提供的构造方法就没有了。
  2、当局部变量和成员变量同名,使用this来区分成员变量。
  3、建议:不要省略无参构造方法,每个类中都应该有自己的无参构造方法。

Static关键字:

在类中(方法之外),用static修饰的变量我们称之为静态变量或类变量。
切记:static不能用于修饰局部变量!!!

静态变量:

  1、 静态变量优先于对象存在,静态变量随着类的加载就已经存在了。
  2、 一个类中,静态变量只有一份,可以被该类和该类的对象所共享。
  3、 我们可以通过 类名.静态变量或 对象.静态变量 来操作静态变量。

	//今天变量案例
	class Person{
			String name;
			int age;
			String address;
			static String sex;
		public  Person(String name,int age,String address){
			this.name=name;
			this.age=age;
			this.address=address;
		}
		void show(){
			System.out.println("姓名:"+name+"\n年龄:"+age+"\n地址:"+address);
		}
		
	}
		public class Text{
			public static void main(String[] args){
			Person P = new Person("xiaohong",23,"召唤兽峡谷");
			P.show();
			Person.sex="男";
			System.out.println(Person.sex);
		}
}
静态变量和成员变量区别

区别一:生命周期不同
成员变量随着对象的创建而创建,随着对象的回收而释放。
  静态变量随着类的第一次加载而存在,随着类的消失而消失。
区别二:调用方式不同
  成员变量只能被对象调用。
  静态变量可以被类名调用,也可以被对象调用。
区别三:数据存储位置不同
  成员变量存储在堆中,也称为对象的特有数据。
  静态变量存储在方法区(共享数据区)的静态区,也称为对象的共享数据。
区别四:创建次数不同
  成员变量可以创建任意多次,每创建一次对象就创建了一次成员变量。
  静态变量只能创建一次,被该类和该类的对象所共享。

静态方法:

静态方法特点
  1、静态方法优先于对象存在,静态方法随着类的加载就已经存在了。
  2、我们可以通过 类名.静态方法() 或 对象.静态方法() 来调用静态方法。
  3、用static修饰的方法我们称之为静态方法或类方法。

	//静态方法案例
	class Student {
	String name;
	// 构造方法
	public Student(String name) {
		this.name = name;
	}
	// 静态方法
	public static void study() {
		System.out.println("我是一个静态方法。");
	}
}
public class StaticMethodDemo {
	public static void main(String[] args) {
		// 使用类名调用静态方法
		Student.study();
		// 实例化一个对象
		Student stu = new Student("小明");
		// 使用对象来调用静态方法
		stu.study(); // 不建议使用!
	}
}
静态方法和成员方法区别

区别一:访问变量区别
  成员方法中既能访问成员变量,又能访问静态变量。
  静态方法中只能访问静态变量,不能访问成员变量,因为对象可能还未初始化。
区别二:访问方法区别
  成员方法中既能访问成员方法,又能访问静态方法。
  静态方法中只能访问静态方法,不能访问成员方法,因为对象可能还未初始化。
区别三:访问this区别
  成员方法中可以访问this。
  静态方法中不能访问this,因为对象可能还未初始化。

静态代码块:

  在类中,没有用static修饰的代码块叫做构造代码块(非静态代码块),主要用于给所有对象共性特点进行初始化操作

构造代码块特点:
  1、 构造代码块只能定义在类里面,独立于任何方法,不能定义在方法里面。
  2、 一个类中允许定义多个构造代码块,执行的顺序根据定义的顺序进行。
  3、 构造代码块中的变量都是局部变量,既可以访问静态变量也可以访问实例变量。
  4、 构造代码块随着对象的创建而加载,每创建对象一次就执行一次!
构造代码块作用:
  可以将各个构造方法中公共的代码提取到构造代码块。
  匿名内部类不能提供构造方法,此时初始化操作可以放到构造代码块中。

class BlockDemo {
	String name;
	static String sex;
	{
		// 可以访问静态变量也可以访问实例变量
		name = "小明";
		sex = "男";
	}
}

代码块执行顺序

  静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。是因为被static修饰的成员都是类成员,会随着JVM加载类的时候加载而执行,而没有被static修饰的成员也被称为实例成员,需要创建对象才会随之加载到堆内存。所以静态的会优先非静态的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值