六 . 面向对象
一 . 对象
1.什么是程序?
程序是为了模拟现实世界,解决现实问题而使用计算机语言编写的指令集合。(微信 网易云等)
2.世界是由什么组成的?
在程序猿的眼里,世界是由无数个对象组成的。
2.什么是对象(object)?
某一类事物的具体存在。(对象即引用)
(1)特征:称为属性,一般为名词,代表对象有什么。
(2)行为:称为方法,一般为动词,代表对象能做什么。
3.程序中的对象:
在程序当中,必须具有和现实中相同的对象,用以模拟现实世界;
使用程序中的对象代表现实中的对象,并执行操作,进而解决现实问题。
4.对象的创建:
类名 对象名 = new 类名();(对象名也叫引用名)
访问属性:对象名.属性名 = 值;//赋值
调用方法:对象名.方法名();
5.面向对象思想
(1)符合人们思考习惯,将复杂的事情简单化,把人们从执行者变成了指挥者。
(2)面向对象的程序开发就是不断的找对象,使用对象,指挥对象做事情的过程。没有对象就创建一个。
(3)思想特征:封装(encapsulation) 继承(inheritance) 多态(polymorphism)
二 . 类
1.类:
Java中通过”类“来描述事物,类主要由属性和行为构成。
概念:是一系列具有相同属性和行为的事物的统称。
2.类的抽取:
在一组相同或类似的对象中,抽取出共性的特性和行为,保留所关注的部分。
注:在类中方法外所定义的变量称为实例变量。
3.类的定义:
class{
属性:通过变量表示,又称为实例变量。
语法:数据类型 属性名;
位置:类的内部,方法的外部。
方法:通过函数表示,又称实例方法。
语法:public 返回值类型 方法名(形参){
//方法的主体(成员方法是有地址值的)
}
}
注意:不再书写static。
4.类与对象的关系
类:定义了对象应具有的特征和行为,类是对象的模板。(类中可定义多个对象)
对象:拥有多个特征和行为的实体,对象是类的实例。
思考:学习局部变量时必须先赋值再使用,否则编译错误。对于实例变量而言,未赋值并不会出现编译错误,能否直接访问?
实例变量的默认值:
整数:0 小数:0.0 字符:\u0000 布尔:false 其他:null
5.实例变量和局部变量的区别:
局部变量 实例变量
定义位置 方法或方法内的结构当中 类的内部,方法的外部
默认值 无默认值 字面值(与数组相同)
使用范围 从定义行到包含其结构结束 本类有效
命名冲突 不允许重名 可与局部变量重名,局部变量优先
6.实例方法
对象的实例方法包含两部分:方法的声名和方法的实现。
方法:
(1)代表对象能做什么,即如何实现对应的功能。
(2)组成:修饰符 返回值类型 方法名(形参列表)
package Winter . class1;
public class Constructor01 {
String name;
int age;
String sex;
double score;
public Constructor01 ( ) {
name = "melody" ;
age = 20 ;
sex = "男" ;
score = 88.8 ;
}
public void sayHi ( ) {
System . out. println ( "大家好,我是" + name+ "," + sex+ "我今年" + age+ "岁了!,考了" + score+ "分" ) ;
}
}
public class ConstructorTest01 {
public static void main ( String [ ] args) {
Constructor01 xiaoming = new Constructor01 ( ) ;
xiaoming. sayHi ( ) ;
}
}
三 . 方法重载
方法重载(Overload):
一个类中定义多个相同名称的方法(通过改变参数类型)
eg:人对象的吃行为,吃饭和吃药的过程就存在差异。
要求:方法名称相同。
参数列表不同(类型,个数,顺序)。
与访问修饰符,返回值类型,变量名无关。
调用带有重载的方法时,需要根据传入的实参去找到与之匹配的方法。
好处:屏蔽使用差异,灵活,方便。
注意:只是参数名称不同,并不能构成方法的重载
package Winter . class1;
public class Overload01 {
public void show ( ) {
System . out. println ( "无参方法" ) ;
}
public void show ( int num) {
System . out. println ( "有参方法" + num) ;
}
public void show ( String name) {
System . out. println ( "有参方法" + name) ;
}
public void show ( int num, String name) {
System . out. println ( "1:" + num+ "2:" + name) ;
}
public void show ( String name, int num) {
System . out. println ( "1:" + name+ "2:" + num) ;
}
}
package Winter . class1;
public class OverloadTest01 {
public static void main ( String [ ] args) {
Overload01 o1 = new Overload01 ( ) ;
o1. show ( 12 ) ;
o1. show ( "melody" ) ;
o1. show ( 200 , "melody" ) ;
o1. show ( "melody" , 200 ) ;
}
}
四 . 构造方法
构造方法(构造器):
类中的特殊方法,主要用于创建对象。
特点:
名称与类名完全相同。
没有返回值类型。
创建对象时,调用构造方法,不可通过"."调用。
注意:
如果没有在类中显示定义构造方法,则编译器默认提供无参构造方法。
package Winter . class1;
public class Constructor01 {
String name;
int age;
String sex;
double score;
public Constructor01 ( ) {
name = "melody" ;
age = 20 ;
sex = "男" ;
score = 88.8 ;
}
public void sayHi ( ) {
System . out. println ( "大家好,我是" + name+ "," + sex+ "我今年" + age+ "岁了!,考了" + score+ "分" ) ;
}
}
五 . Java程序的内存分配
一.Java程序的内存分配
1.方法区(Method Area)
存储可运行的class文件,包含方法,静态成员,常量等
2.栈(Stack)
方法运行时使用的内存,特点是”后进先出“,即最先进入栈的方法最后出栈,例如main方法。
3.堆(Heap)
存储new出来的数组或对象。
4.本地方法栈
JVM在调用操作系统功能时使用,与开发无关。
5.寄存器
CPU使用,与开发无关。