0.面向对象(Object Oriented:OO):
0、OOA(面向对象分析) OOD(面向对象的设计) OOP(面向对象编程)
1、是软件开发方法
2、扩展的领域:数据库系统、交互式界面、应用平台、分布式系统、人工智能等领域
3、是一种对现实世界的理解和抽象的方法,是计算机编程技术发展到一定阶段的产物
1.类和对象的基本概念
1.类:类是对具有相似性质的一类事物的抽象,类封装了相似性质事物的属性(特征)和方法(行为) (即类的成员)
2.对象:对象是一类事物中具体的个体
3.类——对象 关系参考 种群——个体
4.类的构成:零个或多个成员变量 零个或多个方法 零个或多个构造器
成员变量:定义该类或该类的实例所包含的状态数据
方法:用来定义该类或该类的实例的行为特征或者功能实现
构造器:用于构造该类的实例(关于构造器后面会着重讲解)
5.对象的产生和使用:
创建创建出来后就可以使用了,Java的对象大致有如下作用:访问对象的实例变量和调用对象的方法
创建对象的根本途径是构造器,通过new关键字来调用某个类的构造器即可以创建这个类的实例(对象)
对象名.实例变量|方法
类名.类变量|方法
6.一般实体类例子 Dog.java ; 对象的声明和创建; 程序入口类(主类),带有main方法的类
7.一个人(张三)在街上散步,遇到一条狗(大黄),狗(大黄)咬了人(张三),人(张三)打了狗(大黄),狗(大黄)跑了~!
package Chapter7_2;
//Dog类的申明
public class Dog {
String name;
public void beatPersion(People p){
System.out.println(name+"咬了"+p.name);
}
public void dogRun(){
System.out.println(name+"跑了......");
}
}
package Chapter7_2;
//People类的申明
public class People {
String name;
public void walk(){
System.out.println(name+"街上散步");
}
public void meetDog(Dog dog){
System.out.println(name+"遇到"+dog.name);
}
public void beatDog(Dog dog){
System.out.println(name+"打了"+dog.name);
}
}
package Chapter7_2;
//主类
public class DogAndPeople {
public static void main(String[] args) {
People peo=new People();
Dog dog =new Dog();
peo.name="张三";
dog.name="大黄";
peo.walk();
peo.meetDog(dog);
dog.beatPersion(peo);
peo.beatDog(dog);
dog.dogRun();
}
}
2.练习: Car类,描述汽车的属性(品牌mark、排量power、颜色color、价格price)
和方法(启动start、加速speedup、正常行驶run,碰到hit(人))
写一个People类,有属性(姓名name、性别sex、年龄age)、
方法(驾驶drive(car),以Car类对象为参数),
在主类中
1)让一个人张三驾驶一辆宝马车在街上飞奔
2)碰到了一个叫做李四的人
package Chapter7_3;
//定义Car类
public class Car {
String mark;
int power;
String color;
int price;
public void start(People p) {
System.out.println(p.name + "启动了"+mark);
}
public void speedUp(){
System.out.println(mark+"加速");
}
public void run(){
System.out.println(mark+"正常行驶");
}
public void hit(People p){
System.out.println(mark+"撞了"+p.name);
}
}
package Chapter7_3;
//People类申明
public class People {
String name ;
char sex;
short age;
public void dirve(Car car){
System.out.println(name+"驾驶"+car.mark);
}
}
package Chapter7_3;
//主类
public class CarAndPerple {
public static void main(String[] args) {
Car car=new Car();
People p1=new People();
People p2=new People();
car.color="black";
car.mark="宝马";
car.power=123;
car.price=123143;
p1.age=20;
p1.name="张三";
p1.sex='m';
p2.age=21;
p2.name="李四";
p2.sex='m';
car.start(p1);
car.speedUp();
p1.dirve(car);
car.run();
car.hit(p2);
}
}
3.类和对象的使用总结
1.抽象出具有相似特征(属性)和行为(方法)的一类事物封装到类里
2.根据业务需要实例化(new)出具体的对象
3.对对象进行初始化赋值,以便得到具体对象的特征
4.根据业务需要组合对象之间的行为(方法)
4.成员变量和局部变量
1.成员变量定义在类中,方法的外面;又叫全局变量,有效作用域是整个类体
2.局部变量定义在方法里面,作用域是方法内部
3.当局部变量和成员变量名字相同的时候,成员变量在该局部变量所在的方法中被隐藏。如果需要在这个方法里使用被隐藏的全局(成员)变量,需要使用this关键字
this:如果局部变量和成员变量同名,可以在局部变量所在的代码块里调用成员变量
5.关于方法的设计
1.方法的所属性
2.方法的组成 :访问修饰符 返回值 方法名 方法参数列表
3.重载:方法重载是指一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。
练习:简易计算器(能实现两个、三个、四个数的加)
6.构造方法(构造器)
1.什么是构造方法?有何特点?
2.构造方法的作用?
3.构造方法何时被调用?
例子:7
练习:8
4.构造方法可以重载吗?
5.其他说明:
构造器是创建对象的重要途径,一个类中至少要包含一个构造器
程序员如果不给一个类加构造器,则系统会默认添加一个没有参数的构造器
7.示例:建立一个学生类,有学号、姓名、年龄、性别属性,有描述个人信息的方法,通过键盘输入获取两个学生的信息,并且打印出描述信息
8.构建一个员工信息类(Employee),有员工编号、员工姓名、性别、年龄、工龄、工资等属性,有工作和休息的方法,还有打印自身信息的方法;
在入口类中通过键盘输入,获取两个员工的对象,要求通过带参数的构造方法来进行成员变量的初始化。然后根据输入星期几,来输出员工当前的状态(周一至周五工作、周六和周日休息)
package Chapter8_2;
//所有类与方法在同一个文件中
import java.util.Scanner;
public class Staff {
int number;
String name;
char sex;
short age;
short w_age;
long mon;
public Staff(String name, int number, char sex, short age, short w_age,
long mon) {
this.name = name;
this.number = number;
this.sex = sex;
this.age = age;
this.w_age = w_age;
this.mon = mon;
}
public void rest() {
System.out.println(name + "今天休息");
}
public void work() {
System.out.println(name + "今天工作");
}
public void printSelf() {
System.out.println(name + "\t" +number+"\t" +sex + "\t" + age + "\t" + w_age + "\t"
+ mon + "\t");
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入第一个员工的信息:姓名,工号,性别,年龄,工龄,工资");
String name = scan.next();
int number = scan.nextInt();
char sex = scan.next().charAt(0);
short age = scan.nextShort();
short w_age = scan.nextShort();
long mon = scan.nextLong();
Staff sta = new Staff(name, number, sex, age, w_age, mon);
System.out.println("今天星期几");
short day = scan.nextShort();
if (day < 6) {
sta.work();
} else if (day >= 6 && day <= 7) {
sta.rest();
} else {
System.out.println("error!");
}
System.out.println("员工信息如下");
System.out.println("姓名"+"\t"+"工号"+"\t"+"性别"+"\t"+"年龄"+"\t"+"工龄"+"\t"+"工资");
sta.printSelf();
}
}
9.变量、方法的分类:
内存的分配:栈内存 堆内存
创建对象时,通过new关键字调用构造函数,返回当前类的对象:People p=new People();
对象里有成员变量,会在堆内存中开辟连续的空间存储成员变量。
p是People类型的引用,p存储在栈内存中,它指向堆内存中的对象
这种引用就是C语言中的指针,只是Java语言把这个指针封装了起来
变量:成员变量 局部变量
成员变量:类变量(有static关键字修饰) 和 实例变量(没有static关键字修饰)
局部变量:形参、方法内的变量、代码块的变量
方法:类方法(有static关键字修饰)、实例方法(没有static关键字修饰)
java中类的生命周期:加载(Loading)-->验证(Verification)-->准备(Preparation)-->解析(Resolution)-->
初始化(Initialization)-->使用(Using)-->卸载(Unloadling)
1、类变量和实例变量的区别:类变量共享 ,类变量在类加载时分配入内存;实例变量每个对象独有 ,实例变量在类初始化的时候分配内存。
2、类方法和实例方法的区别:类方法在类加载时分配入口地址;实例方法在类初始化时分配入口地址 (创建第一个对象时)
3、访问和调用规则:
1、实例方法既能能访问实例变量又能访问类变量
2、类方法只能访问类变量
3、实例方法能调用类方法,但是类方法只能调用类方法
10.对象默认初始化
11.总结
1.类的概念、对象的概念;通过群体和个体的概念理解类和对象的关系
2.类的成员包括—— 属性、方法 (有啥,能干啥)
3.方法的设计
a.方法名首字母小写;望文生义;多个单词组成的方法名首字母小写,第二个单词开始首字母大写
b.返回类型
c.方法的重载(参数的不同,要么参数个数不同,要么参数类型不同)
4.成员变量和局部变量的区别;this关键字的作用(this相当于对象自身的意思)
5.关于构造方法
a.每一个类都有构造方法,不写不代表没有(默认无参的构造方法)
b.构造函数与new关键字息息相关,直接决定了对象的构成方式
c.带参数构造方法的常用方式(给成员变量进行赋值)
6.实例变量和类变量、实例方法和类方法;关键字static
13.作业
1.比较大小:写一个有两个int型的参数的方法,要求方法能够比较这两个参数的大小,并且返回比较大的一个,在另外一个类里使用这个方法。
2.判断 :在一个类里有一个方法,能判断给定的参数是否为偶数,如果是偶数返回true,否则返回false。在另一个类里调用该方法。
3.写一个方法,有三个参数,分别为三个线段的长度,判断三条线段是否能组成一个三角形,如果能返回true,否则返回false。在另一个类中使用
4.写一个三个参数的方法,判断给定的三个参数能否构成直角三角形。另一个类里使用。
- JAVA04类与对象之课后问题解决
1.验证ClassAndObjectTest.java(使用自定义类) public class ClassAndObjectTest { public static void main(String ...
- java04 Sacnner的使用
import java.util.Scanner; /** * 所有在java.lang包下面的所有类 不需要显示的引入包! * java.util.Scanner : 想获取用户的输入 必须引入相关 ...
- java-04流程控制语句
这里先简单介绍几种流程控制语句 包括if/if-else.switch语句 1.三大流程控制结构 所谓流程控制,就是说要控制程序的执行方式,根据不同的情况执行不同的代码,从而得到不同情况下的不同结果. ...
- java-04类和对象课堂练习
1.请运行并输入以下代码,得到什么结果 public class Test { public static void main(String[] args){ Foo obj1=new Foo(); ...
- java-04 数组和二维数组
java 中内存分配地址值以及栈和堆得区别: ##########数组操作的两个常见小问题(越界和空指针)############## 数组索引越界异常,访问了不存在的索引: 空指针: ####### ...
- 重新梳理IT知识之java-04数组
一.数组的概述 1.数组的理解:数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理. 2.数组的相关概念 数组名 元素 索引 数组的 ...
- java04异常处理课堂总结
一,动手动脑 1,请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. import javax.swing.*; class Abo ...
- 集合2--毕向东java基础教程视频学习笔记
Day14 08 LinkedList09 LinkedList练习10 ArrayList练习11 ArrayList练习2 12 HashSet13 HashSet存储自定义对象14 HashSe ...
- Java_Map_Map详解
本博客为子墨原创,转载请注明出处! http://blog.csdn.net/zimo2013/article/details/8867065 1.Map概述 Map<K,V> Map集 ...
随机推荐
- 几个SQL小知识
写在前面的话:之前做的一个项目,数据库及系统整体构架设计完成之后,和弟兄们经过一段时间的编码,系统如期上线,刚开始运行一切良好,后来随着数据量的急剧膨胀,慢慢出现了很多莫名其妙的问题,经过调试,修改了 ...
- JavaScript常见原生DOM操作API总结
[TOC] 最近面试的时候被这个问题给卡了,所以抽时间好好复习一下. 几种对象 Node Node是一个接口,中文叫节点,很多类型的DOM元素都是继承于它,都共享着相同的基本属性和方法.常见的Node ...
- .NET core for docker
本文描述下 .net core 在 docker 里面的玩法 首先按照官方文档先 拉取镜像 docker pull microsoft/dotnet:latest 然后就有了 dotnet 这个运行时 ...
- Ajax概要:
Ajax概要: Ajax不是个全新的技术,它是多种技术合并在一起产生的,包括XHTML,CSS,JavaScript,XmlHttpRequest,XML,JSON,DOM等 优点:(这也解释了为何我 ...
- 免费获取WP之类的开发者权限或免费使用Azure 2015-10-19
上一次弄wp真机调试的时候,卡住了,这里讲一下怎么解决(http://www.cnblogs.com/dunitian/p/4870959.html) 进这个网址注册一下:https://www.dr ...
- jQuery源码分析系列(39) : 动画队列
data函数在jQuery中只有短短的300行代码,非常不起点 ,剖析源码的时候你会发现jQuery只要在有需要保存数据的地方无时无刻不依赖这个基础设施 动画会调用队列,队列会调用data数据接口还保 ...
- Angular.js Services
Angular带来了很多类型的services.每个都会它自己不同的使用场景.我们将在本节来阐述. 首先我们必须记在心里的是所有的services都是singleton(单例)的,这也是我们所希望得到 ...
- 如何用Dummy实例执行数据库的还原和恢复
今天实验了一下,如何在所有文件,包括数据文件,在线日志文件,控制文件都丢失的情况下,利用RMAN备份恢复和还原数据库.该实验的重点是用到了Dummy实例. 具体步骤如下: 备份数据库 [oracle@ ...
- OWIN 中 K Commands(OwinHost.exe)与 Microsoft.AspNet.Hosting 的角色问题
问题详情:K Commands(OwinHost.exe)是不是 OWIN 中的 Host 角色?如果是,那 Microsoft.AspNet.Hosting 对应的是 OWIN 中的哪个角色? OW ...
- 实现tap的多种方式
一.tap.js 这是一个比较轻量的插件tap.js,142行代码,支持模块化开发. 1)handleEvent addEventListener方法中的第二个参数,我原先并没有注意到其实可以传一个对 ...