1.面向对象
- 什么是面向对象?
- 面向对象的语言有很多种如C++,Java等等,在面向对象对象的语言没出现的时候,我们通常去写一个程序都是面向过程的思想,
- 面向过程的思想和面向对象的思想有什么不同之处呢?
- 举个简单的例子:如我现在开车去北京:
- 面向过程思想:1.打开车门,2.坐到驾驶坐.3.启动车子.4.踩油门.5.经过各种城市…等等一些操作.才到达北京!这是面向过程的思想!
- 面向对象思想:1.我叫个司机.2.到达了北京:我不关注,司机怎么做的,我只知道我到达了北京就可以了
- 面向过程的思想就是自己做的每一步都了如指掌,而面向对象的思想就是我不需要知道这个程序他在干嘛,我只要结果,至于这个程序做了什么操作我都不用管!
2.类与对象
-
1.什么是对象?
-
举个例子:世界是由什么组成的?
-
世界是由一个个对象组成的如:名胜古迹,动物,人,植物,物品…都可以说它是一个对象,所以我们可以说它是一个个对象组成的
-
所以得出一个概念
-
万物皆对象
-
面向对象---->就先相当于是---->指挥者–>指挥一个事务或者多个事务去做一个或者多个事情
-
1.1.在打个比方
-
如我要去超市买东西到付账的时候,那个营业员就可以是一个对象,属于什么类呢?人类!
-
2.什么类?
-
类就是一个抽象的概率 而对象是一个看得见摸得着的
-
如:营业员是一个对象 他(她)看得见摸得着而
-
人类看不见也摸不着所以是一个抽象的概念
-
把一类具有共同的属性,特征,行为的事物归于一类----如:人类(属性—姓名–年龄)(特征–帅哥(美女))(行为—说话)
3.创建类与对象
- 怎么创建类
public class Mankind{
}
- 这就是一个类(人类),
- 注意!在创建类的时候class是必不可少的!(类名必须要和文件名一样)
- 在类里面必不可少的二大元素 ----属性----行为.而行为也可以称之为方法
- 而人类有什么属性呢?
- 属性------具有相同特征和行为的如:人类有什么属性呢?----名字–年龄—性别…等等一些
- 如何创建属性?
public class Mankind{
//姓名
String name;
//性别
String gender;
//年龄
int age;
}
- 注意这里不需要写public static void main(String[] args)!
- 这里的姓名,性别,年龄,就称之为属性
- 如何使用呢?
- 语法格式
- 调用的类名 对象名=new 调用的类名();如:Mankind b1=new Manknd();
- 需要在创建一个类,因为从代码的设计原则来讲它追求的单一性!
- 什么是单一性?
- 就是这里面最好描述一种功能–它只做单一的工作不要做的很复杂(虽然类的个数会变多 但是结构会变的清晰)
- 代码演示
//类
public class Mankind{
//姓名
String name;
//性别
String gender;
//年龄
int age;
}
//测试类
public class MankindTest{
//主函数
public static void main(String[] args){
//1.创建内存存放地址如:小明需要地球给他一个地方用来生存
//调用类---->new Manking();
Mankind b1=new Mankind();
//打印
System.out.println(b1);
}
}
- 运行结果
ClassesAndObjects.Mankind@1b6d3586
- 这个叫对象地址ClassesAndObjects.Mankind是包名和类名@1b6d3586则是地址是HashCode(哈希值)十六进制的表示方式
- 为什么是这样的表示方式呢?
- 我们看看源代码
- 源代码里有一个方法(toString)是返回一个类的名称+@+HashCode(哈希值)的十六进制表示方式
- 为什么打印的是这个样子呢?因为源代码里声明了这种格式就必须这样写
- 2.给属性赋值
- 语法格式 (用法格式):
- 地址名(对象名).属性名=具体的数数值
- 如:b1.name=“小明”;
- 代码演示
//类
public class Mankind{
//姓名
String name;
//性别
String gender;
//年龄
int age;
}
//测试类
public class MankindTest{
//主函数
public static void main(String[] args){
//1.创建内存存放地址如:小明需要地球给他一个地方用来生存
//调用类---->new Manking();
//初始化
Mankind b1=new Mankind();
//打印
System.out.println(b1);
//b1的有些叫法:引用变量,引用地址值
//属性赋值
//地址名.属性名=具体的数值 (固定用法)
b1.name="小明";
b1.gender="男性";
b1.age=18;
//打印 变量.属性名
System.out.println("对象的name属性值"+b1.name);
System.out.println("对象的gender属性值"+b1.gender);
System.out.println("对象的age属性值"+b1.age);
}
}
- 运行结果
ClassesAndObjects.Mankind@1b6d3586
对象的name属性值小明
对象的gender属性值男性
对象的age属性值18
- 注意如果不给属性赋值的话打印的是默认值!!
2.行为/动作:方法–函数
- 2.1.普通方法:需要通过引用变量调用的反法
- 如:随机数
- Randon r=new Randon():
- int i=r.nextInt(100);//只关注结果,不关注里面的每一步怎么实现的过程
- //行为/动作:打扮
- //语法:修饰符 返回值 方法名(数据类型 变量名){ }
public void dress(){ 无参无放回
}
public void dress(int a){ 有参无返回
}
pulic int dress(){ 无参有返回
return 返回值;
}
public int dress(int a){ 有参有返回
return 返回值;
}
代码演示:
public class Mankind{
//姓名
String name;
//性别
String gender;
//年龄
int age;
}
public void dress(){
System.out.println("正在耍帅中,,,,");
}
//测试类
public class MankindTest{
//主函数
public static void main(String[] args){
//1.创建内存存放地址如:小明需要地球给他一个地方用来生存
//调用类---->new Manking();
//初始化
Mankind b1=new Mankind();
//打印
System.out.println(b1);
//b1的有些叫法:引用变量,引用地址值
//属性赋值
//地址名.属性名=具体的数值 (固定用法)
b1.name="小明";
b1.gender="男性";
b1.age=18;
//打印 变量.属性名
System.out.println("对象的name属性值"+b1.name);
System.out.println("对象的gender属性值"+b1.gender);
System.out.println("对象的age属性值"+b1.age);
//调用行为
//语法: 变量.方法名();
b1.dress();
}
}
运行结果:
ClassesAndObjects.Mankind@1b6d3586
对象的name属性值小明
对象的gender属性值男性
对象的age属性值18
正在耍帅中,,,,
4.this关键字
this访问本类中自己的属性;
语法: this.属性名:
代码演示:
public class Mankind{
//姓名
String name;
//性别
String gender;
//年龄
int age;
}
public void dress(){
System.out.println(this.name+"正在耍帅中,,,,");
}
//测试类
public class MankindTest{
//主函数
public static void main(String[] args){
//1.创建内存存放地址如:小明需要地球给他一个地方用来生存
//调用类---->new Manking();
//初始化
Mankind b1=new Mankind();
//打印
System.out.println(b1);
//b1的有些叫法:引用变量,引用地址值
//属性赋值
//地址名.属性名=具体的数值 (固定用法)
b1.name="小明";
b1.gender="男性";
b1.age=18;
//打印 变量.属性名
System.out.println("对象的name属性值"+b1.name);
System.out.println("对象的gender属性值"+b1.gender);
System.out.println("对象的age属性值"+b1.age);
//调用行为
//语法: 变量.方法名();
b1.dress();
}
}
运行结果:
ClassesAndObjects.Mankind@1b6d3586
对象的name属性值小明
对象的gender属性值男性
对象的age属性值18
小明正在耍帅中,,,,
定义一个简单打印的方法(增加代码的复用性)
public class Mankind{
//姓名
String name;
//性别
String gender;
//年龄
int age;
}
//定义一个方法
public void dress(){
System.out.println(this.name+"正在耍帅中,,,,");
}
//定义一个打印反法
public void myprint(){
System.out.println("对象的name属性值"+this.name);
System.out.println("对象的gender属性值"+this.gender);
System.out.println("对象的age属性值"+this.age);
}
//测试类
public class MankindTest{
//主函数
public static void main(String[] args){
//1.创建内存存放地址如:小明需要地球给他一个地方用来生存
//调用类---->new Manking();
//初始化
Mankind b1=new Mankind();
//打印
System.out.println(b1);
//b1的有些叫法:引用变量,引用地址值
//属性赋值
//地址名.属性名=具体的数值 (固定用法)
b1.name="小明";
b1.gender="男性";
b1.age=18;
//调用行为
//语法: 变量.方法名();
//调用打印方法
b1.myprint();
//调用耍帅方法
b1.dress();
}
}
运行结果:
ClassesAndObjects.Mankind@1b6d3586
对象的name属性值小明
对象的gender属性值男性
对象的age属性值18
小明正在耍帅中,,,,
这里只有一个对象看着没有作用也没有什么效果我们试试在创建一个对象看看
public class Mankind{
//姓名
String name;
//性别
String gender;
//年龄
int age;
}
//定义一个方法
public void dress(){
System.out.println(this.name+"正在耍帅中,,,,");
}
//定义一个打印反法
public void myprint(){
System.out.println("对象的name属性值"+this.name);
System.out.println("对象的gender属性值"+this.gender);
System.out.println("对象的age属性值"+this.age);
}
//测试类
public class MankindTest{
//主函数
public static void main(String[] args){
//1.创建内存存放地址如:小明需要地球给他一个地方用来生存
//调用类---->new Manking();
//初始化
Mankind b1=new Mankind();
//打印
System.out.println(b1);
//b1的有些叫法:引用变量,引用地址值
//属性赋值
//地址名.属性名=具体的数值 (固定用法)
b1.name="小明";
b1.gender="男性";
b1.age=18;
//调用行为
//语法: 变量.方法名();
//调用打印方法
b1.myprint();
//调用耍帅方法
b1.dress();
//初始化
Mankind b2=new Mankind();
//b1的有些叫法:引用变量,引用地址值
//属性赋值
//地址名.属性名=具体的数值 (固定用法)
b2.name="小红";
b2.gender="女性";
b2.age=14;
//调用行为
//语法: 变量.方法名();
//调用打印方法
b2.myprint();
//调用耍帅方法
b2.dress();
}
}
运行结果:
ClassesAndObjects.Mankind@1b6d3586
对象的name属性值小明
对象的gender属性值男性
对象的age属性值18
小明正在耍帅中,,,,
对象的name属性值小红
对象的gender属性值女性
对象的age属性值14
小红正在耍帅中,,,,
这样我们可以看到代码的复用性如果不写打印反法就要写6次System.out.printl打印了!
所以写一个反法不仅仅可以让代码简约也可以增加复用性
5.变量
----类和对象
成员变量:name gender age 类里面
实列变量:对象里面的变量:具体存在的对象里面属性值 b1.name
—范围
局部变量;某一部分可以使用 方法里
全局变量:name gender age 整个类里面都可以用