2020-05-24-类和对象

1.对象
万物皆对象
2. 面向对象
3. 类
确定对象的属性和方法
特点:
1. 类是对象的类型
2. 具有相同属性和方法的一组对象的集合
4. 属性
5. 方法
6. 类与对象的关系与区别
类是抽象的概念,对象是看得见摸得着的
7. 如何定义类?
类的组成:属性和方法
1.定义类名
2.编写类的属性
3.编写类的方法
4.语法
	public class 类名{
	属性1的类型  属性1;
	方法1;
}
8. 使用对象的步骤
1.创建对象
 类名  对象名  = new  类名();
2.使用对象
  引用对象的属性:对象名.属性
  引用对象的方法:对象名.方法
9. 成员变量和局部变量
写面向对象时主要用到两种变量:
1.成员变量
  在类中定义,用来描述对象将要有什么
2.局部变量
  在类的方法中定义,在方法中临时保存数据

两种变量的区别:
1.作用域不同
   局部变量:仅限于定义它的方法
   成员变量:在整个类内部都是可用的
2.初始值不同
   Java会给成员变量一个初始值;
   Java不会给局部变量赋予初始值
3.在同一方法中,不允许有同名局部变量
   在不同方法中,可以有同名局部变量
4.两类变量同名时,局部变量具有更高的优先级(就近原则)
10. 构造方法
JAVA中的构造方法
1.使用new+构造方法  创建一个新的对象
2.构造方法是定义在Java类中一个用来初始化对象的方法
3.构造方法与类同名且没有返回值

括号里面可以指定参数
public  构造方法名() {
	// 初始化代码
}

5.当没有指定构造方法时,系统会自动添加无参的构造方法
6.当有指定构造方法时,无论是有参还是无参的构造方法,都不会自动添加
无参的构造方法
7.构造方法的重载:方法名相同,单参数不同的多个方法,调用时会自动根据不同的参数选择相应的方法
8.构造方法不但可以给对象的属性赋值,还可以保证给对象的属性赋一个合理的值(在构造方法中可以判断传入的参数是否合理)
package java_learn_2;

public class Demo5 {
	int num1;
	int num2;
	static int num3;
	
	public Demo5() {
		/*
		 * 构造方法
		 */
		num1 = 91;
		System.out.println("通过构造方法为变量num1赋值");
	}
	
	static {
		/*
		 * 静态初始化块
		 */
		num3 = 83;
		System.out.println("通过静态初始化块为静态变量num3赋值");
	}
	
	public static void main(String[] args) {
		Demo5 hello = new Demo5();
		System.out.println("num1:" + hello.num1);
		System.out.println("num2:" + hello.num2);
		System.out.println("num3:" + num3);
		Demo5 hello2 = new Demo5();
		
	}
}

11. 静态变量
Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。当然,鉴于他作用的特殊性更推荐用类名访问~~
使用 static 可以修饰变量、方法和代码块。
package java_learn_2;

public class Demo2 {
	/*
	 * 静态变量
	 */
	// static修饰的变量是静态变量,所有类的对象共享hobby
	static String hobby = "imooc";
	
	public static void main(String[] args) {
		// 静态变量可以直接通过类名来访问,无需创建类的对象
		System.out.println("通过类名访问hobby:" + Demo2.hobby);
		
		// 创建类的对象
		Demo2 hello = new Demo2();
		// 使用对象名的方式访问静态变量
		System.out.println("通过对象名访问hobby:" + hello.hobby);
		
		// 使用对象名的形式修改静态变量的值
		hello.hobby = "hahahha";
		System.out.println("通过类名访问hobby:" + Demo2.hobby);
	}
}
package java_learn_2;

public class InitialTelPhone {
	/**
	 * 
	 */
	public static void main(String[] args) {
		// 无参的方法创建TelPhone对象
		TelPhone phone = new TelPhone();
		
		// 有参的方法创建TelPhone对象
		TelPhone phone2 = new TelPhone(5.0f,1.4f,2.0f);
	}
}


// 为什么这个里面没有TelPhone方法,我们还能调用??
// 原因:如果我们没有指定一个无参的构造方法,系统会自动帮我们创建一个无参的构建方法;如果我们对系统的无参构造方法不满意,可以自定义
// 一个无参的构造方法

// 重点:当我们创建对象的时候,其实执行的是构造方法    有参的构造方法和无参的构造方法是可以并存的
package java_learn_2;

public class TelPhone {
	float screen;
	float cpu;
	float mem;
	
	public TelPhone() {
		/*
		 * 无参的构造方法
		 */
		System.out.println("无参的构造方法执行");
	}
	
	public TelPhone(float newScreen, float newCpu, float newMem) {
		/*
		 * 有参的构造方法
		 */
		if(newScreen<3.5f) {
			System.out.println("您输入的参数有问题,自动赋值3.5");
			screen = 3.5f;
		}
		screen = newScreen;
		cpu = newCpu;
		mem = newMem;
		System.out.println("有参的构造方法执行");
	}
	
}

// 有参的构造方法和无参的构造方法相当于方法的重载

12. 静态方法
1、 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员
如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。如:
2、 在普通成员方法中,则可以直接访问同类的非静态变量和静态变量
3、 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法
package java_learn_2;

public class Demo3 {
	/*
	 * 静态方法
	 */

	// 使用static关键字声明静态方法
	public static void print() {
		System.out.println("这是静态方法");
	}

	public static void main(String[] args) {
		// 直接使用类名调用静态方法
		Demo3.print();

		// 也可以通过对象名调用,但是更推荐使用类名调用
		Demo3 demo = new Demo3();
		demo.print();
	}

}

package java_learn_2;

public class Demo4 {
	/*
	 * 静态方法的注意点
	 */
	String name = "zhangsan"; // 非静态变量name
	static String hobby = "imooc"; // 静态变量hobby

	public static void main(String[] args) {
		Demo4.print();
		Demo4 test = new Demo4();
		test.show();
	}

	public static void print() {
		/*
		 * 1.静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员
		 */
		// System.out.println("静态方法中调用非静态变量:" + name); // 不能直接调用非静态变量
		System.out.println("静态方法中调用静态变量:" + hobby);

		Demo4 demo = new Demo4();
		System.out.println("静态方法中调用非静态变量:" + demo.name); // 可以通过对象.非静态变量进行调用
		
		// 3.静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法
		demo.show();
		}

	public void show() {
		/*
		 * 2.在普通成员方法中,则可以直接访问同类的非静态变量和静态变量
		 */
		System.out.println("普通方法中调用非静态变量:" + name);
		System.out.println("普通方法中调用静态变量:" + hobby);
	}
}

13. 静态初始化
Java 中可以通过初始化块进行数据赋值.
在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。

需要特别注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。

通过输出结果,我们可以看到,程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值