java日记(java进阶)

回顾

万物皆对象

学习程序的目的:解决现实的问题。

前提:模拟现实世界

小明(人) – 人类

public class Human {

    String name;
    String gender;
    int height;
    int weight;
}
public class Bear {

    
}
public class Computer {

    
}
Human man = new Human();
man.name = "小明";
man.gender = "男";
man.height = 168;
man.weight = 160;

实例变量和局部变量的区别:

方法的重载:

  • 方法的签名(唯一性)
  • 在一个类中,方法名相同,参数列表不同就叫做方法的重载

今日内容

1. 构造方法

  • 无参构造方法
    • 没有参数
  • 有参构造方法
    • 有参数

定义:

public 类名() {

}

public 类名(参数列表) {

}
  • 构造方法
  • 构造方法,不能被直接调用,只能在创建对象时调用(new)
  • 如果不自己定义一个构造器,那么系统就默认有一个无参构造方法
    • 一旦自己定义一个构造器(无参,有参都可),那么就没有默认的无参构造方法了
package com.qf;

/*
 * 	文件名为Demo01.java
 * 	那么该文件只能定义一个public修饰的类,且类名必须和java文件名一致
 *  但是可以定义很多不用public修饰的类  default
 */
public class Demo01 {

	public static void main(String[] args) {
		Person p = new Person();
		
		System.out.println(p);
		
		//表示自己
		Student stu = new Student();
		stu.name = "小帅哥";
		stu.code = "888888";
		stu.gender = "男";
		stu.cardId = "666999";
		
		
		Student stu2 = new Student("jackma","9999","男","123456");
		
		/*
		 * 通过 对象名.属性名  可以获取属性值
		 */
		String name = stu2.name;
		String code = stu2.code;
		String gender = stu2.gender;
		String cardId = stu2.cardId;
		System.out.println("name:"+name+" code:"+code+" gender:"+gender+" cardId:"+cardId);
		
		
		System.out.println("----------------------------");
		
		
		Computer c = new Computer("华为",5600,"i5","8G");
		
	}
	
}

class Person {
	
	/*
	 * 
	 */
	public Person() {
		System.out.println("执行Person无参构造方法");
	}
	
}

class Student {
	String name;
	String code;
	String gender;
	String cardId;
	
	/*
	 * 构造方法
	 */
	public Student() {
		
	}
	
	/*
	 * 有参构造方法
	 * 目的: 在创建对象的时候(new),为属性赋值
	 * 在什么时候创建呢? 在需要的时候创建
	 */
	public Student(String n, String c, String g, String id) {
		System.out.println("执行有参构造方法--");
		
		name = n;
		code = c;
		gender = g;
		cardId = id;
	}
	
}


class Computer {
	//定义四个属性   品牌  价格 cpu  内存
	String brand;
	double price;
	String cpu;
	String ram;
	
	
	public Computer(String b, double p, String c, String r) {
		brand = b;
		price = p;
		cpu = c;
		ram = r;
	}
	
}

2. this

在有参构造器中,实例变量和局部变量可能会相同

在相同的作用范围中,会优先使用局部变量

可以使用this关键字使用类中的全局变量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z29dFWej-1646829039517)(image-20220309144026907.png)]

package com.qf;

public class Demo02 {

	public static void main(String[] args) {
		
	}
}

class Phone {
	
	String brand;
	double price;
	String cpu;
	String ram;

	/*
	 * 1. 允许出现同名的全局变量和局部变量
	 * 2. 在相同的作用范围中,优先使用局部变量
	 * 3. this就是指向堆内存中的该对象
	 */
	public Phone(String brand, double price, String cpu, String ram) {
		this.brand = brand;
		this.price = price;
		this.cpu = cpu;
		this.ram = ram;
	}
	
	public Phone(String brand, double price) {
		this.brand = brand;
		this.price = price;
	}

	public Phone(String brand, double price, String cpu) {
		this.brand = brand;
		this.price = price;
		this.cpu = cpu;
	}

	public Phone(String brand) {
		this.brand = brand;
	}
	
	/*
	 * 右击 -- source -- Generate Constructor using Fields ---  选择相应的属性生成
	 * 
	 * 一旦生成一个有参,一定给他无参  alt+/
	 */
	public Phone() {
		
	}
	
	
}

class Cup {
	/*
	 * 自定义四个属性
	 * 自动生成4个构造方法
	 */
	String brand;
	double price;
	String name;
	int capacity;
	
	public Cup(String brand) {
		super();
		this.brand = brand;
	}

	public Cup(double price) {
		super();
		this.price = price;
	}

	public Cup(int capacity) {
		super();
		this.capacity = capacity;
	}

	public Cup(String brand, double price) {
		super();
		this.brand = brand;
		this.price = price;
	}

	public Cup(String brand, String name) {
		super();
		this.brand = brand;
		this.name = name;
	}

	public Cup(String brand, int capacity) {
		super();
		this.brand = brand;
		this.capacity = capacity;
	}
	
}

3. 面向对象特征

抽象,封装,继承,多态

  • 抽象 抽取一个事情重要的特性
  • 封装 重要的东西,只能自己用,别人不能获取 属性的私有化
  • 继承 类别与类别之间的关系
  • 多态 相同的种类,执行相同的操作,得到的结果却不一样

3.1 封装

  • 属性私有
  • 为私有属性,添加set,get方法
package com.qf;

public class Person {

	private String name;
	private String gender;
	/*
	 * 如果一个属性,使用private修饰,  那这就叫做封装
	 * 表示这个属性只能在本类中操作,在其他任何地方都不能操作(赋值,获取值)
	 * 这种属性,私有属性
	 */
	private int age;
	
	public Person() {
		
	}
	
	//1.1 定义有参构造器,为属性赋值
	public Person(int age) {
		this.age = age;
	}
	
	//1.2 通过实例方法赋值
	public void setAge(int age) {
		this.age = age;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public void setGender(String gender) {
		this.gender = gender;
	}
	
	
	//1.3 获取age值的方法
	public int getAge() {
		return age;
	}
	
	public String getName() {
		return name;
	}
	
	public String getGender() {
		return gender;
	}
	
	public void printSelf() {
		System.out.println("name:"+name+" gender:"+gender+" age:"+age);
	}
	
}
package com.qf;

public class Phone {

	private String brand;
	private double price;
	private String cpu;
	private String ram;
	
	/*
	 * 自动生成
	 * 
	 * 右击 -- source --
	 */
	
	public String getBrand() {
		return brand;
	}
	public void setBrand(String brand) {
		this.brand = brand;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public String getCpu() {
		return cpu;
	}
	public void setCpu(String cpu) {
		this.cpu = cpu;
	}
	public String getRam() {
		return ram;
	}
	public void setRam(String ram) {
		this.ram = ram;
	}
	
	
	//重写toString
	/*
	 * @Override public String toString() { return "Phone [brand=" + brand +
	 * ", price=" + price + ", cpu=" + cpu + ", ram=" + ram + "]"; }
	 */
	
}
package com.qf;

public class Test01 {

	public static void main(String[] args) {
		Person p = new Person(18);
		p.printSelf();
		
		
		Person p2 = new Person();
		p2.setAge(17);
		p2.setName("pony");
		
		
		p2.printSelf();
		
		int age = p2.getAge();
		System.out.println();
		
		String name = p2.getName();
		System.out.println(name);
		
		
		Phone phone = new Phone();
		phone.setBrand("华为");
		phone.setPrice(3500);
		phone.setCpu("麒麟");
		phone.setRam("8G");
		
		System.out.println(phone);
		
	}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值