黑马程序员_面向对象之构造方法

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流------


构造方法:
特点:
a: 方法名和类名相同
b: 没有返回值类型,连void也没有
c: 没有返回值
构造方法的作用:
给成员变量赋值
构造方法的注意事项:
a: 如果我们没有提供构造方法,系统会默认提供一个无参的构造方法
b: 如果我们提供了构造方法,系统不会在提供默认的无参的构造方法
描述一个类的组成:
a: 成员变量
b: 构造方法
c: 成员方法
给类的成员变量赋值:
a: 通过set方法
b: 通过构造方法
// 学生类
class Student {
	
	// 成员变量
	String name ;
	int    age  ;

	// 构造方法
	public Student(){
		name = "小强";
		age = 24 ;
	}

	public Student(String name ){
		this.name = name ;
	}

	public Student(int age){
		this.age = age ;
	}

	public Student(String name , int age){
		this.name = name ;
		this.age = age ;
	}

	// 成员方法
	public void show(){
		System.out.println(name + "----" + age);
	}
	
}

// 测试类
class StudentTest  {

	public static void main(String[] args)  {

		
		// 创建对象
		Student s1 =  new Student();

		// 调用show方法
		s1.show();

		System.out.println("--------------------");

		// 创建对象2
		Student s2 = new Student("小迪");

		// 调用show方法
		s2.show();

		System.out.println("--------------------");

		// 创建对象3
		Student s3 = new Student(24);

		// 调用show方法
		s3.show();

		System.out.println("--------------------");

		// 创建对象3
		Student s4 = new Student("小迪" , 21);

		// 调用show方法
		s4.show();
		

		// 创建对象
		Student s = new Student();

		// 调用show方法
		s.show();

	}
}

给成员变量赋值:
a: 构造方法
b: 通过set方法
set方法更加灵活(开发中常用)
获取成员变量的值:
a: 通过show方法
b: 通过get方法
get方法常用(开发中常用)
// 完善的学生类
class Student {
	
	// 成员变量
	private String name ;	// 姓名
	private int age ;		// 年龄

	// 构造方法
	public Student(){}

	public Student(String name , int age){
		this.name = name ;
		this.age = age ;
	}
	
	// 成员方法
	public void setName(String name){
		this.name = name ;
	}
	
	public String getName(){
		return name ;
	}

	public void setAge(int age){
		this.age = age ;
	}

	public int getAge(){
		return age ;
	}

	// 提供一个show方法
	public void show(){
		System.out.println(name + "---" + age);
	}

}

// 测试类
class StudentTest2  {

	public static void main(String[] args)  {
		
		// 调用无参的构造方法创建对象
		Student s1 = new Student();
		
		// 给成员变量赋值
		s1.setName("小强");
		s1.setAge(24);

		// 改名
		s1.setName("小迪");
		
		// 输出成员变量
		// 调用show方法
		s1.show();

		// 通过get方法
		System.out.println(s1.getName() + "---" + s1.getAge());	

		System.out.println("-------------------");

		// 调用有参的构造方法创建对象
		Student s2 = new Student("小强" , 24);
		s2.setName("小迪");

		//  输出成员变量
		s2.show();
	}
}

创建对象的步骤:
Student s = new Student();
步骤:
(1): 加载Student的字节码文件到方法区
(2): 在栈内存中为s开辟空间
(3): 在堆内存中为new Student()开辟空间
(4): 给成员变量进行默认初始化
(5): 给成员变量进行显式初始化
(6): 通过构造方法对成员变量赋值
(7): 将堆内存中的地址值赋值给栈内存中的引用变量s
static 关键字的注意事项:
a: 在静态方法中是没有this关键字的
如何理解呢?
静态是随着类的加载而加载,this是随着对象的创建而存在。
静态比对象先存在。
b: 静态方法只能访问静态的成员变量和静态的成员方法
静态方法:
成员变量: 只能是静态的
成员方法: 只能是静态的
非静态方法:
成员变量: 可以是静态的也可以是非静态的
成员方法: 可以是静态的也可以是非静态的
简单记: 静态只能访问静态
static关键字的特点:
a: 随着类的加载而加载
b: 优先于对象存在
c: 被类的所有对象所共享
d: 可以通过类名调用,也可以通过对象名调用
建议使用类名调用
main方法的格式详细解释:
public static void main(String[] args){}
public: 因为该方法被JVM调用,所有要求权限最大
static: 因为该方法被JVM调用,所以不用创建该类的对应,可以直接使用类名调用
void: 因为该方法被JVM调用,所以不需要明确的返回值
main:   是一个特殊的单词,可以被JVM识别
String[] args: 可以用来接收键盘录入数据
最后为了更好的理解方法:我们设计了一个小游戏:猜数字小游戏!
分析:
a: 使用Math类生产一个1-100之间的随机数
b: 通过键盘录入进行猜测.
  猜中了
  猜大了
  猜小了
需要使用循环
import java.util.Scanner ;

class GuessNumGame {

	public static void main(String[] args){
	
		// 使用Math类的随机数功能
		// public static double random():返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。 [0.0 , 1.0)
		
		// 使用Math类生产一个1-100之间的随机数
		int num = (int)(Math.random() * 100) + 1 ;

		// System.out.println(num);

		// 创建键盘录入对象
		Scanner sc = new Scanner(System.in);

		while(true){

			// 友情提示
			System.out.println("请您猜测一个数: ");

			// 获取键盘录入数据
			int guessNum = sc.nextInt();

			// 进行比较
			if(guessNum == num){
				System.out.println("恭喜您,猜中了!!!");
				break ;
			}else if(guessNum > num){
				System.out.println("对不起,大了!");
			}else {
				System.out.println("对不起,小了!");
			}
		}
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值