【幻化万千戏红尘】qianfengDay06-java基础学习:重载、方法、类、对象、构造方法

时间:2022-10-06 10:27:05

课程回顾:

 

标识符

数据类型

变量

 

分支

循环

方法

 

eclipse创建项目project后必须先新建包package,有包才有类class

 

今日内容:

面向对象:是一种思想

指导编程的思想

起源于现实社会的认知

 

面向过程思想:按照事件的发展流程来考虑事件的实现,注重过程

面向对象思想:只关心涉及到的对象的特征(属性)和行为(方法)

 

面向对象2大核心:

1、类:类别、定义、模板、抽象的、一些共同拥有的属性(特征)和方法(行为/功能)

2、对象:实实在在的事物,具体的

 

所以类是概念性的定义,而对象是具体的事物

类是模板,对象是根据模板生成的产品

 

 

面向对象终极目标:消除重复代码

面向对象三大特征:封装、继承、多态

 

类:

格式:

[修饰符] class类名

{

[属性/全局变量]

[修饰符] 数据类型 变量名/属性名[=初始化];

[方法]

[修饰符] 返回值类型 方法名([形式参数列表])

{

实现特定功能的代码块;

}

}

 

学生类:

姓名、学号、性别、年龄

 

对象:具体的

对象的声明格式:

类名 对象名;

对象的实例化格式:

对象名=new 类名();

 

对象的创建格式:

类名 对象名[=new 类名()];

 

属性的使用:

对象名.属性名[=赋值];

方法的使用:

对象名.方法名([实际参数]);

 

属性的默认值:

数值类型的都是:0

boolean:false

char:0

引用类型:null

在创建对象的时候,会默认的为属性赋值

 

package com.qianfeng.demo1;

 

//测试类/场景类

public class Test01 {

 

public static void main(String[] args) {

//对象的声明--变量的声明

Student stu1;

//对象的实例化

stu1=new Student();

stu1.name="王麻子";

stu1.age=18;

stu1.no=16060090;

stu1.sex='';

System.out.println(stu1.name);

stu1.study();//调用方法

stu1.eat("豆腐");

//练习:创建一个Person类,

//并创建对象调用属性和方法

}

 

}

package com.qianfeng.demo1;

 

/**创建学生类*/

public class Student {

 

public int no;//学号

public String name;//姓名

public int age;//年龄

public char sex;//性别

//方法

public void study(){

System.out.println("学习是学生的天职");

}

public void eat(String food) {

System.out.println("学生都喜欢吃:"+food);

}

}

 

 

 

构造方法:创建对象并且对属性完成默认初始化,是一种特殊的方法

构造方法的方法名只能是类名,并且没有返回值,连void都没有

格式:

[修饰符] 类名([形式参数列表])

{

代码块;

}

 

构造方法的调用:

通过new 构造方法([实际参数列表]);

 

构造方法的分类:

1、隐式(默认)构造方法:系统默认提供无参的构造方法(一旦有了显示构造那么就不再提供)

2、显式(自定义)构造方法

 

构造方法只能通过new来调用

 

重载的定义:

相似功能的方法采用同一方法名

规则:

1、同一类中

2、方法名相同

3、形式参数列表不同(形式参数的数据类型和顺序和个数)

 

 

构造方法能否重载?

可以

 

//练习:自定义一个类(Food),属性自定义,方法若干

体现重载

再创建测试类,创建3个对象,输出任意一个对象的任何一个属性的值,

并且调用一下方法

 

JAVA原则之一:最小作用域最强原则(就近原则)

 

this:关键字  本类中使用

1、指代本类对象

常常被用来区分同名的局部变量和全局变量

2、调用构造方法

只能在构造方法中调用

必须在第一行使用

格式:this([实际参数列表]);

 

this不能出现在static方法中

 

 

 

构造方法和方法的区别?

方法:

有返回值类型(如果没有返回值也要写void)

方法名可以自定义

可以通过对象名/类名.方法名调用

 

构造方法:

没有返回值类型连void都没有

方法名必须为类名

只能通过newthis调用

 

 

 

标准的Java类:称为javaBean

1、属性私有

2、提供公有的getXXsetXX方法

3、提供公有无参构造方法

 

 

属性封装:

1、将属性私有(private)

2、提供公有的getXXXsetXXX方法(public)

package com.qianfeng.demo2;

 

public class TestMain01 {

 

public static void main(String[] args) {

//调用无参构造方法

Dog dog1=new Dog();

dog1.age=1;

dog1.name="旺财";

dog1.type="土狗";

//调用有参的构造方法

Dog dog2=new Dog("豆豆", "藏獒", 10);

System.out.println(dog2.name);

}

 

}

package com.qianfeng.demo2;

 

public class Dog {

 

public String name;

public String type;

public int age;

//无参构造方法

public Dog(){

}

//有参构造方法,创建对象的时候传入属性的值

public Dog(String n,String t,int a)

{

name=n;

type=t;

age=a;

}

/*练习:创建一个类,要求

体现构造方法的重载,

并调用*/

}

 

 

 

package com.qianfeng.demo3;

 

public class TestMain02 {

 

public static void main(String[] args) {

// TODO Auto-generated method stub

Cat cat=new Cat();//创建对象并完成实例化

//cat.show("咪咪");

System.out.println(cat.name);

// cat.Cat();

}

 

}

package com.qianfeng.demo3;

 

public class Cat {

 

public String name;//名称

public int price;//价格

public Cat() {

//this的第二种用法:调用构造方法,必须在其它构造方法调用并且只能是第一行

this("小花",666);

System.out.println("哈哈,我是无参");

}

public Cat(String name,int price)

{

this.name=name;

this.price=price;

}

// public void Cat() {

// System.out.println("OK");

// }

public void show(String name)

{

// this();//不可用,只能在构造方法才可以调用其它构造方法

//this可以指代本类对象

this.name=name;

//System.out.println(name);

}

public void print() {

this.show("测试");//也是可以的

}

public static void test() {

// this.name="豆豆";//this不能出现在static

}

}

 

 

//练习学生信息及手机信息。涉及三个类:Student,Phone,TestMain02

package com.qianfeng.demo4;

 

public class TestMain02 {

 

public static void main(String[] args) {

//创建学生对象

Student stu=new Student();

//创建手机对象并赋值

Phone phone=new Phone("苹果", "7", 5999);

//匿名对象:一般只使用一次的时候,我们习惯用匿名对象

stu.setPhone(new Phone("诺基亚", "1300", 999));//设置phone

stu.test();

Student student=new Student("黄恒键", '', 16060007,

new Phone("诺基亚", "5200", 99));

student.test();

}

}

 

package com.qianfeng.demo4;

 

public class Phone {

 

private String type;//品牌

private String name;//名称

private double price;//价钱

public String getType() {

return type;

}

public void setType(String type) {

this.type = type;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public double getPrice() {

return price;

}

public void setPrice(double price) {

this.price = price;

}

public Phone(String type, String name, double price) {

super();

this.type = type;

this.name = name;

this.price = price;

}

public Phone() {

// TODO Auto-generated constructor stub

}

public void show() {

System.out.println("手机:品牌:"+type+",名称:"+name+",价格:"+price);

}

}

 

 

package com.qianfeng.demo4;

 

public class Student {

 

private String name;//姓名

private char sex;//性别

private int no;//学号

private Phone phone;//手机对象

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public char getSex() {

return sex;

}

public void setSex(char sex) {

this.sex = sex;

}

public int getNo() {

return no;

}

public void setNo(int no) {

this.no = no;

}

public Phone getPhone() {

return phone;

}

public void setPhone(Phone phone) {

this.phone = phone;

}

public Student(String name, char sex, int no, Phone phone) {

super();

this.name = name;

this.sex = sex;

this.no = no;

this.phone = phone;

}

public Student() {

// TODO Auto-generated constructor stub

}

public void test() {

//调用手机类中的方法

phone.show();

}

}

 

 

 

 

 

 

练习:

创建类(Phone)

属性若干

方法自定义

创建类(Student)

属性:

姓名、学号、性别、手机信息

方法若干

创建测试类(main方法)

请创建2个学生对象

 

 

 

步骤:

1、创建Phone

2、创建属性和方法

3、创建Student

4、创建属性(要注意手机信息这个属性)

5、创建方法

6、创建测试类,并且创建对象测试

 

作业的格式

文件夹名称:0718--列姓名

文件夹内部放java源文件

每天早上9点之前交

 

明天的内容:

方法的参数传递

static关键字

设计模式之单例模式

继承

super

访问修饰符

扩展:递归

 

周三:

 

重写

Object

抽象类

final

接口

 

周四:

 

多态

设计模式之简单工厂模式

 

周五:

内部类

总结

数组