课程回顾:
标识符
数据类型
变量
分支
循环
方法
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都没有
方法名必须为类名
只能通过new、this调用
标准的Java类:称为javaBean类
1、属性私有
2、提供公有的getXX和setXX方法
3、提供公有无参构造方法
属性封装:
1、将属性私有(private)
2、提供公有的getXXX和setXXX方法(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
接口
周四:
多态
设计模式之简单工厂模式
周五:
内部类
总结
数组