一、面向对象
 
1.1、面向对象的概念
 
 很经典的一句话----------万物皆对象
定义:面向对象一相对面向过程而言的
       面向对象和面向过程都是一种思想
      面向过程------强调的是功能行为  语言:C语言
面向对象------将功能封装进对象,强调具备了功能的对象。
面向对象是基于面向过程的。
 
1.2、什么是类
 

我肯定说,不知道、不清楚。

简单讲类是java中的基本单元,类是具有相同特性和行为的对象集合

1.3、类的定义

class 类名{

数据类型  属性 ;
….                           
 
public 返回值的数据类型 方法名称(参数1,参数2…){
    程序语句 ;    
     [return 表达式;]
}

}

1.4、类包含

类中包含成员和行为(方法)


package com.pb.demo2;
/*
* 人类
*/
public class Person { //Persion为类名
/*
* 属性,name,sex,age
*/
public String name; //名字
public String sex ; //性别
public int age; //年龄 /*
*方法(行为)
*/
//吃饭
public void eat(){
System.out.println("吃饭");
}
//工作
public void work(){
System.out.println("工作");
}
}

1.5、三大特征

封装、继承、多态

二、类和对象关系

2.1、类和对象

类就是对现实生活中事物的描述。

对象就是这些事物,实实在在的个体

package com.day05;

/**
* 汽车类
*
* @author Denny 属性对应类中变量 行为对应类中的函数(方法) 定义类就是在描述事物,就是在定义属性和行为
* 属性和行为共同成为类中的成员变量(成员变量和方法)
*/
public class Car { // 颜色
String color = "红色";
// 轮胎
int num = 4; // 运行跑起来的行为
public void run() { //局部变量
//int num=10;
System.out.println(color + " " + num);
} public static void main(String[] args) { Car c = new Car();// 声明汽车对象c
c.color = "黄色"; // 更改属性值
c.num = 8;
c.run(); // 调用方法 Car c1=c;
c1.color="白色";
c1.num=6;
c.run();
}
}
结果:
黄色   8
白色   6
 
2.2、成员变量和局部变量
 作用范围
      成员变量作用于整个个类中
      局部变量作用于方法或者文句中
在内存中的位置
     成员变量在堆内存
     局部变量在栈内存
 
使用this.成员变量 调用成员变量
局部变量直接使用变量名
如果成员变量和局部变量同名,且没有使用this关键字调用,在同一个方法中默认使用局部变量
 
2.3、匿名对象
package com.day05;

/**
* 汽车类
*
* @author Denny 属性对应类中变量 行为对应类中的函数(方法) 定义类就是在描述事物,就是在定义属性和行为
* 属性和行为共同成为类中的成员变量(成员变量和方法)
* 作用范围
* 成员变量作用于整个个类中
* 局部变量作用于方法或者文句中
* 在内存中的位置
* 成员变量在堆内存
* 局部变量在栈内存
*/
public class Car { // 颜色
String color = "红色";
// 轮胎
int num = 4; // 运行跑起来的行为
public void run() { //局部变量
//int num=10;
System.out.println(color + " " + num);
} public static void main(String[] args) {
new Car().num=99;
new Car().color="blue";
new Car().run();
}
}

红色   4

匿名对象,对一个的方法调用一次时, 可以使用。
对一个对象进行多次调用时,要声明对象
第二种方式:
匿名对象可以做为参数传递
 
 
三、封装
 
 

3.1、隐藏对象的属性和实现细节,公对外提供公共的访问方式。

好处:
 将变化隔离
便于使用
提高重用性
提高安全性
封装原则:
将不需要对外提供的内容隐藏起来
把属性都隐藏,提供公共方法对其访问
package com.day05;

/**
* 人类
*
* @author Denny
*
*/
public class Person { private String name; // 姓名
private int age; // 年龄
private String gender; // 性别 // 自我介绍的方法
public void say() {
System.out.println("姓名:" + this.name + " 年龄:" + this.age + " 性别:" + this.gender);
} // getter、setter方法 提供的对外的访问
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
// 检查年龄是不是在0-150之间
if (age >= 0 && age <= 150) {
this.age = age;
} else {
System.out.println("年龄不合法!");
}
} public String getGender() { return gender;
} public void setGender(String gender) {
// 检查条件
if (gender.equals("男") || gender.equals("女")) {
this.gender = gender;
} else {
System.out.println("性别不合法只能是男或者女!");
}
} public static void main(String[] args) {
Person p = new Person();
p.setName("张三");
p.setAge(-20);
p.setGender("人妖");
p.say();
} }

结果:

年龄不合法!
性别不合法只能是男或者女!
姓名:张三    年龄:0  性别:null

3.2、访问修饰符
 
四、构造函数
 
4.1、构造方法定义
构造方法的主要目的是为类中的属性初始化
class 类名称{
访问权限 类名称(类型1 参数1,类型2 参数2,…){
程序语句 ;
…    // 构造方法没有返回值
}
}

在构造方法的声明中读者一定要牢记以下几点:
· 构造方法的名称必须与类名称一致
· 构造方法的声明处不能有任何返回值类型的声明
· 不能在构造方法中使用return返回一个值
例:
每个类中肯定都会有一个构造方法
如果一个类中没有声明一个明确的构造方法则会自动生成一个无参的什么都不做的构造方法
 
public class Person {

    private String name; // 姓名
private int age; // 年龄
private String gender; // 性别 public Person() { //无参数构造方法 }
//实现构造方法重载
public Person(String name, int age, String gender) { //有参数构造方法 this.name = name;
this.age = age;
this.gender = gender;
} // 自我介绍的方法
public void say() {
System.out.println("姓名:" + this.name + " 年龄:" + this.age + " 性别:" + this.gender);
} // getter、setter方法 提供的对外的访问
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
// 检查年龄是不是在0-150之间
if (age >= 0 && age <= 150) {
this.age = age;
} else {
System.out.println("年龄不合法!");
}
} public String getGender() { return gender;
} public void setGender(String gender) {
// 检查条件
if (gender.equals("男") || gender.equals("女")) {
this.gender = gender;
} else {
System.out.println("性别不合法只能是男或者女!");
}
} } public static void main(String[] args) {
Person p = new Person("张三",13,"男");//调用有参数的构造方法
p.say();
}
}
4.2、构造代码块
package com.day05;

/**
* 人类
*
* @author Denny
*
*/
public class Person { private String name; // 姓名
private int age; // 年龄
private String gender; // 性别 /*
* 构造代码块:
* 作用:给对象进行初始化
* 对象 一建立就运行,而且优先于构造方法执行
* 构造代码块是给所有对象进行统一初始化
* 构造方法是给对应的对象初始化
*/
{ System.out.println("这是Person 的构造代码块");
} public Person() { } public Person(String name, int age, String gender) { this.name = name;
this.age = age;
this.gender = gender;
} // 自我介绍的方法
public void say() {
System.out.println("姓名:" + this.name + " 年龄:" + this.age + " 性别:" + this.gender);
} // getter、setter方法 提供的对外的访问
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
// 检查年龄是不是在0-150之间
if (age >= 0 && age <= 150) {
this.age = age;
} else {
System.out.println("年龄不合法!");
}
} public String getGender() { return gender;
} public void setGender(String gender) {
// 检查条件
if (gender.equals("男") || gender.equals("女")) {
this.gender = gender;
} else {
System.out.println("性别不合法只能是男或者女!");
}
} public static void main(String[] args) {
Person p = new Person("张三",13,"男");
Person p1=new Person(); } }

结果:

这是Person 的构造代码块
这是Person 的构造代码块

 
 
五、this关键字
 
 
5.1、this关键字作用
 
调用成员变量
当成员变量和局部变量同名时,优先使用局部变量,如果要调用成员变量
当成员变量和局部变量同名时,要调用成员变量可以使用this.成员变量名 来调用成员变量
 
// 自我介绍的方法
public void say() {
System.out.println("姓名:" + this.name + " 年龄:" + this.age + " 性别:" + this.gender);
}

this:代表什么?

本类的对象,到底代表哪一个?
this代表它所在函数所属对象的引用。
哪个对象在调用的this所在的函数,this就代表哪个对象.
package com.day05;

/**
*
* @author Denny this 语句的调用
*/
public class Person1 {
private String name; // 姓名
private int age; // 年龄 public Person1() { } public Person1(String name) {
this.name = name; // 为本对象name赋值 } public Person1(String name, int age) {
// 在构造方法中调用另一个构造方法时this必须放在第一行
this(name); // 调用另一个构造方法
this.age = age; } public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
// 自我介绍的方法
public void say() {
System.out.println("姓名:" + this.name + " 年龄:" + this.age);
}
public static void main(String[] args){
//声明一个参数的对象
Person1 p1=new Person1("张三");
p1.say();
Person1 p2=new Person1("张三",25);
p2.say(); } }

结果:

姓名:张三    年龄:0
姓名:张三    年龄:25

基础学习day05---面向对象一类,对象、封装的更多相关文章

  1. java基础学习总结——面向对象1

    目录 一.面向过程的思想和面向对象的思想 二.简单理解面向对象 三.面向对象的设计思想 四.对象和类的概念 五.如何抽象出一个类? 六.类(对象)之间的关系 七.Java与面向对象 八.为什么使用面向 ...

  2. python基础学习Day17 面向对象的三大特性之继承、类与对象名称空间小试

    一.课前回顾 类:具有相同属性和方法的一类事物 实例化:类名() 过程: 开辟了一块内存空间 执行init方法 封装属性 自动的把self返回给实例化对象的地方 对象:实例 一个实实在在存在的实体 组 ...

  3. python基础学习Day15 面向对象、类名称空间、对象名称空间 (2)

    一.类 先看一段代码: class Person: animal = '高级动物' walk_way = '直立行走' # 静态属性,静态变量,静态字段 language = '语言' def __i ...

  4. python基础学习 Day19 面向对象的三大特性之多态、封装 property的用法(1)

    一.课前内容回顾 继承作用:提高代码的重用性(要继承父类的子类都实现相同的方法:抽象类.接口) 继承解释:当你开始编写两个类的时候,出现了重复的代码,通过继承来简化代码,把重复的代码放在父类中. 单继 ...

  5. python基础学习 Day19 面向对象的三大特性之多态、封装

    一.课前内容回顾 继承作用:提高代码的重用性(要继承父类的子类都实现相同的方法:抽象类.接口) 继承解释:当你开始编写两个类的时候,出现了重复的代码,通过继承来简化代码,把重复的代码放在父类中. 单继 ...

  6. Java基础学习(三)—面向对象(上)

    一.理解面向对象       面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节:这种思想是将数据作为第一位,而方法或者说是 ...

  7. 零基础学习python_类和对象(36-40课)

    今天我们开始学习面向对象的知识咯,之前我对面向对象也学的懵懵的,因为感觉知道好像又不是特别清楚,接下来我们一起来学习类和对象吧.零基础的课程我都是看小甲鱼的视频学的,没基础的可以去这个网址下载视频学习 ...

  8. java基础学习05(面向对象基础01--类实例分析)

    面向对象基础01(类实例分析) 实现的目标 1.如何分析一个类(类的基本分析思路) 分析的思路 1.根据要求写出类所包含的属性2.所有的属性都必须进行封装(private)3.封装之后的属性通过set ...

  9. java基础学习05(面向对象基础01)

    面向对象基础01 1.理解面向对象的概念 2.掌握类与对象的概念3.掌握类的封装性4.掌握类构造方法的使用 实现的目标 1.类与对象的关系.定义.使用 2.对象的创建格式,可以创建多个对象3.对象的内 ...

  10. Java基础学习之面向对象(4)

    目录 1.面向对象概述 1.1.类与对象的关系 1.2.类的具体描述 2.面向对象的三大特性 2.1.继承 2.2.多态 2.3.封装 1.面向对象概述 1.1.类与对象的关系 有对象吗,没有的话我给 ...

随机推荐

  1. Knockout 新版应用开发教程之Observable与computed

    KO是什么? KO不是万能的,它的出现主要是为了方便的解决下面的问题: UI元素较多,用户交互比较频繁,需要编写大量的手工代码维护UI元素的状态.样式等属性? UI元素之间关系比较紧密,比如操作一个元 ...

  2. 【原创】C#搭建足球赛事资料库与预测平台(4) 比赛信息数据表设计

            本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源C#彩票数据资料库系列文章总目录:[目录]C#搭建足球赛事资料库与预测平台与彩票数据分析目录 本篇文章开始将逐步介 ...

  3. teamcity设置

    建立项目后首先要设置svn地址,并绑定 名字随便起 url是svn的地址 之后来做build step 有一个按钮可以自动检测,一般都能检测出来 执行这个似乎需要代理装什么东西 可以查看目前代理有那些 ...

  4. MMM和MHA的对比和应用(PPT分享)

    分享主题:MySQL高可用架构 --- MMM&MHA在大众点评应用和改进 内容简介:本次演讲,主要讲述以下几个方面 1. MMM在点评网是如何使用的 2. 细数MMM上踩过的坑以及如何填坑 ...

  5. Windows及Linux平台下的计时函数总结

    本文对Windows及Linux平台下常用的计时函数进行总结,包括精度为秒.毫秒.微秒三种精度的各种函数.比如Window平台下特有的Windows API函数GetTickCount().timeG ...

  6. [Code] C#与js的正则表达式

    元字符: 单个字符: . [] 限定符: * + ? {n} {n,} {n,m} 头尾: ^ $' 其他: | () 正则表达式在js和C#中都有. C#中: 创建: var regex = new ...

  7. 用Qt写软件系列二:QCookieViewer(浏览器Cookie查看器)

    预备 继上篇<浏览器缓存查看器QCacheViewer>之后,本篇开始QCookieViewer的编写.Cookie技术作为网站收集用户隐私信息.分析用户偏好的一种手段,广泛应用于各大网站 ...

  8. Entity FrameWork 增删查改的本质

    之前的文章里面已经说了,EF的增删查改.那时候的修改,删除,只能是先查询出来要修改的数据,再修改,删除...现在来一个改进版的,增删查改. 1.Add static void Add() { //1. ...

  9. zTree的使用

    一.节点模糊搜索功能:搜索成功后,自动高亮显示并定位.展开搜索到的节点. 二.节点异步加载:1.点击展开时加载数据:2.选中节点时加载数据. 前台代码如下: <script type=" ...

  10. ubuntu E: Could not get lock /var/lib/dpkg/lock - open

    sudo rm /var/lib/apt/lists/lock apt-get update