配套视频教程

软件出现的目的

用计算机的语言描述现实世界

用计算机解决现实世界的问题

为什么使用面向对象

世界由对象组成

面向对象的思想 描述 面向对象的世界 符合人类思维习惯

从现实中抽象出类分三步:找出它的种类

找出它的属性

找出它的行为

用面向对象描述世界

第一步:发现类

class Dog {

}

根据“对象”抽象出“类”

第二步:发现类的属性

狗类共有的特征:品种

年龄

昵称

健康情况

跟主人的亲密度

… …class Dog {

String name = "旺财"; // 昵称

int health = 100; // 健康值

int love = 0; // 亲密度

String strain = "拉布拉多犬"; // 品种

}只放和业务相关的属性

第三步:发现类的方法

狗类共有的行为:跑

输出自己的信息

… …class Dog {

String name = "旺财"; // 昵称

int health = 100; // 健康值

int love = 0; // 亲密度

String strain = "拉布拉多犬"; // 品种

/* 输出狗的信息 */

public void print() {

// 输出狗信息的代码

}

}只放和业务相关的方法

使用类图描述类

实践

实现领养宠物功能

编写宠物类Dog和Penguin

创建宠物对象,输入领养的宠物信息并输出

对象初始化Penguin pgn = new Penguin();

pgn.name = "qq";

pgn.sex = "Q仔";能否在创建对象的同时就完成赋值?

使用构造方法:

Penguin pgn1 = new Penguin();class Penguin {

// 属性

/* 无参构造方法 */

public Penguin() {

name = "qq";

love = 20;

sex = "Q仔";

System.out.println("执行构造方法");

}

}

构造方法

系统提供默认无参构造方法public Penguin() {

}

自定义构造方法public Penguin () {

name = "qq";

love = 20;

sex = "Q仔";

}public Penguin (String name,int health,int love,String sex ) {

this.name = name;

this.health = health;

this.love = love;

this.sex = sex;

}系统不再提供默认无参构造方法

this关键字是对一个对象的默认引用,这里用以区分同名成员变量

方法重载

System.out.println(45);

System.out.println(true);

System.out.println("狗在玩耍!");

调用重载方法pgn = new Penguin();

pgn.print();

pgn = new Penguin("美美", 80, 20, "Q仔");

pgn.print();

一个例子class Penguin {

String name = null; //昵称

int health = 0; // 健康值

String sex = null; // 性别

public void Penguin() {

health=10;

sex="雄";

System.out.println("执行构造方法");

}

public void print() {

System.out.println("企鹅的名字是" + name + ",健康值是"

+ health + ",性别是" + sex);

}

}Penguin pgn3= new Penguin();

pgn3.print();

找出下面代码的问题class Dog {

private String name = "旺财"; // 昵称

private int health = 100; // 健康值

private int love = 0; // 亲密度

public void play(int n) {

int localv;

health = health - n;

System.out.println(name+" "+ localv +" "+health+" "+love);

}

public static void main(String[] args) {

Dog d=new Dog();

d.play(5);

}

}

static静态成员

一个例子 统计对象被创建出来的个数class Person

{

public String name;

public int age;

static public long all_count;

public Person(){

all_count++;

}

public Person( String name , int age ){

all_count++;

this.name = name;

this.age = age;

}

// 统计人数的函数

public long getCount(){

return all_count;

}

// 应该具备找同龄人的功能

public boolean isSameAge( Person p1 ){

return this.age == p1.age;

}

}

class Demo9

{

public static void main(String[] args)

{

Person p1 = new Person( "jame" , 34 );

Person p2 = new Person( "lucy" , 34 );

Person p3 = new Person( "lili" , 34 );

Person p4 = new Person();

System.out.println( p1.getCount() + " " + p2.getCount() + " " + p3.getCount() );

System.out.println( p1.isSameAge( p2 ) );

System.out.println( p1.isSameAge( p3 ) );

}

}

4:static特点

1 随着类的加载而加载,静态会随着类的加载而加载,随着类的消失而消失。说明它的生命周期很长。2 优先于对象存在。—>静态是先存在,对象是后存在。

3 被所有实例(对象)所共享。

4 可以直接被类名调用

使用static定义方法

用类名调用: Person.print();静态方法只能访问静态属性,不能访问实例属性

找错误class Dog {

private String name = "旺财"; // 昵称

private int health = 100; // 健康值

private int love = 0; // 亲密度

public void play(int n) {

static int localv=5;

health = health - n;

System.out.println(name+" "+localv+" "+health+" "+love);

}

public static void main(String[] args) {

Dog d=new Dog();

d.play(5);

}

}

封装

Dog d = new Dog();

d.health = -1000;

属性随意访问,不合理的赋值

封装的概念

封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问

封装的好处

1.隐藏类的实现细节

2.只能通过规定方法访问数据

3.方便加入控制语句

4.方便修改实现

封装的步骤

class Dog {

private String name = "旺财"; // 昵称

private int health = 100; // 健康值

private int love = 0; // 亲密度

private String strain = "拉布拉多犬"; // 品种

public int getHealth() {

return health;

}

public void setHealth (int health) {

if (health > 100 || health < 0) {

this.health = 40;

System.out.println("健康值应该在0和100之间,默认值是40");

} else

this.health = health;

}

// 其它getter/setter方法

}

this

用类名定义一个变量(对象,实例)的时候,定义的只是一个引用,外面可以通过这个引用来访问这个类里面的属性和方法。

那么类里面是够也应该有一个引用来访问自己的属性和方法呢?

JAVA提供了一个很好的东西,就是 this 对象,它可以在类里面来引用这个类的属性和方法。

先来个简单的例子:public class ThisDemo {

String name="Mick";

public void print(String name){

System.out.println("类中的属性 name="+this.name);

System.out.println("局部传参的属性="+name);

}

public static void main(String[] args) {

ThisDemo tt=new ThisDemo();

tt.print("Orson");

}

}

关于返回类自身的引用,《Thinking in Java》有个很经典的例子。

通过this 这个关键字返回自身这个对象然后在一条语句里面实现多次的操作public class ThisDemo {

int number;

ThisDemo increment(){

number++;

return this;

}

private void print(){

System.out.println("number="+number);

}

public static void main(String[] args) {

ThisDemo tt=new ThisDemo();

tt.increment().increment().increment().print();

}

}

一个类中定义两个构造函数,在一个构造函数中通过 this 这个引用来调用另一个构造函数public class ThisDemo {

String name;

int age;

public ThisDemo (){

this.age=21;

}

public ThisDemo(String name){

this();

this.name="Mick";

}

private void print(){

System.out.println("最终名字="+this.name);

System.out.println("最终的年龄="+this.age);

}

public static void main(String[] args) {

ThisDemo tt=new ThisDemo("zhangsan"); //随便传进去的参数

tt.print();

}

}

练习

创建Dog类

编写Test类

package com.company;

/**

* Created by ttc on 2017/12/28.

*/

//private ,default, protected,public

public class Dog {

private String name = "旺财"; // 昵称

private int health = 100; // 健康值0---100 private私有的

private int love = 0; // 亲密度

private int type;//类型:1狗2企鹅

private int kind;//品种

public String toString()

{

String strKind = "";

if(kind == 1)

{

strKind = "拉布拉多";

}

else if(kind == 2)

{

strKind = "雪纳瑞";

}

String str = "宠物的自白,我的名字叫"

+name+"健康值是"+health+"和主人的亲密度是"+love+"我是一只"+strKind;

return str;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getHealth() {

return health;

}

public void setHealth(int health) {

this.health = health;

}

public int getLove() {

return love;

}

public void setLove(int love) {

this.love = love;

}

public int getType() {

return type;

}

public void setType(int type) {

this.type = type;

}

public int getKind() {

return kind;

}

public void setKind(int kind) {

this.kind = kind;

}

}package com.company;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

System.out.println("欢迎来到宠物店");

System.out.println("请输入宠物名字");

String name = scanner.next();

System.out.println("请输入宠物类型:1狗,2企鹅");

int type = scanner.nextInt();

if(type == 1)

{

Dog d = new Dog();

System.out.println("请输入品种,1聪明的拉布拉多,2酷酷的雪纳瑞");

int kind = scanner.nextInt();

d.setKind(kind);

d.setName(name);

System.out.println(d);

}

else

{

//new 企鹅();

}

}

}

创建Penguin类

编写Test类

java基本数据类型与封装类 示例_Java零基础系列教程10Java抽象与封装相关推荐

  1. java数组的四个要素_Java零基础系列教程04Java数组

    配套视频教程 问题Java考试结束后,老师给张浩分配了一项任务,让他计算全班(30人)的平均分int stu1 = 95; int stu2 = 89; int stu3 = 79; int stu4 ...

  2. java基础教程 类_Java零基础系列教程06初识类和对象

    配套视频教程 万物皆对象 分类是人们认识世界的一个很自然的过程,在日常生活中会不自觉地进行分类 身边的对象 顾客 姓名-张浩 年龄-20 体重-60kg 操作: 购买商品 收银员 员工号-10001 ...

  3. java二重循环换行_Java零基础系列教程05Java二重循环

    配套视频教程 循环回顾某次程序大赛,S1班有4名学员参加,学员的成绩由用户输入,计算该班参赛学员的平均分 二重循环若有3个班级各4名学员参赛,如何计算每个班级参赛学员的平均分? 使用二重循环实现--一 ...

  4. C语言数据类型 / 变量类型 - C语言零基础入门教程

    目录 一.C 语言数据类型分类 二.C 语言整形 1.无符号整形(16 位系统) 2.有符号整形(16 位系统) 3.int 和 long 区别 4.超出取值范围的整形 三.C 语言浮点型 float ...

  5. python怎么输出浮点数_python 零基础入门教程第 2 章:基本数据类型 (一)

    一.什么是数据类型 编程语言通过一些复杂的计算机物理底层机制,创造不同类型的数据,用来表示现实世界中的不同信息,以便于计算机更好的存储和计算. 每种编程语言都会有一些基本的数据类型用来表示现实世界中的 ...

  6. Java零基础系列003——变量

    Java零基础系列003--变量 //变量(variable):程序中最基本的存储单元,包括变量名.类型.作用域 //变量应该先声明,只有声明后系统才会为其分配相应长度的存储空间,变量实质上就是存储单 ...

  7. Java零基础系列001——第一个程序

    Java零基础系列001--第一个程序 public class Welcome {public static void main(String[] args) {//args为arguments的缩 ...

  8. 今天用Java开发主机IP扫描神器,零基础Socket编程详细

    目录 一.开发背景 二.准备工作 三.远程主机 IP 探测 四.核心算法 1.IP地址转化为十进制数 2.十进制数转化为IP地址 五.主机 IP 扫描神器界面 六.各功能代码及IP扫描演示 1.主机扫 ...

  9. Java如何学才能快速入门(零基础入门)

    对于初入Java的伙伴们来说,都会有一个疑惑?我适合学习编程吗? 编程入门遇到难题的时候想到过放弃,当你写完一个程序的时候感到内心的欣慰,这都取决你自己. 对于初学者来说(或者每一种编程语言)都会有这 ...

最新文章

  1. dalsa线扫相机调试文档_线阵相机调试文档
  2. 记录vmware的bug failed to install hcmon deriver
  3. snowflake 使用_如何使用机器学习模型直接从Snowflake进行预测
  4. ubuntu 14.04 环境下打开xls、pdf与png文件
  5. auto cad 打印颜色变浅_CAD制图软件中如何设置CAD打印样式表(CTB)?
  6. 生命计算机在线,抖音生命计算器
  7. javamail 收件人/发件人 乱码解析
  8. Steam游戏上线初期的总结与思考
  9. 快来加入阿里云大学【云学院】班级助理—机会稍纵即逝,错过遥遥无期
  10. 64位驱动 hp630打印机_HP LaserJet1010 打印机驱动win7 64位
  11. 制造企业生产排产现状和APS系统的解决方案
  12. 如何在windows11系统中打开ie11浏览网页
  13. David I 盛大之行
  14. 【论文解读 | AAAI2020】NeuralCD:Neural Cognitive Diagnosis for Intelligent Education Systems
  15. insert 锁表 mysql_mysql insert锁机制【转】
  16. 财务管理考研计算机,财务管理考研专业课包括什么
  17. 深入理解机器学习——概率图模型(Probabilistic Graphical Model):马尔可夫随机场(Markov Random Field,MRF)
  18. 到海马体照相馆,get你的仙女气息吧!
  19. 家用宽带电脑传输速率达到1000Mbps/1000Mbps设置方法
  20. 《计算机网络自顶向下》Socket Lab2 UDP Pinger Lab

热门文章

  1. gin context和官方context_Gin框架系列01:极速上手
  2. unity Android 指南针,Unity之一天一个技术点(十二)---指南针的实现
  3. linux手动生成dump文件权限不足_来玩一玩Linux常见命令~
  4. HADOOP学习笔记(一):HDFS
  5. 通用shellcode代码
  6. hdu 3706 Second My Problem First 单调队列
  7. 【转】【Asp.Net】Asp.net发送邮件的两种方法小结
  8. Mac10.9 Mavericks 输入法切换快捷键
  9. Linux iptables 防火墙相关命令介绍及使用
  10. 读取String数组内的内容