面向对象:
1.利用面向对象的语法,实现代码的拆分(数据存储:对象的传值)。
2.利用面向对象的语法,实现程序的结构处理(继承,多态,接口,抽象类)。
3.用面向对象的编程方法,理解实现程序开发的框架和开发模式。
面向过程:代码与数据不相关,通过主函数确立
面向对象:在定义类的时候,数据代码关联,把函数写在类内,而不是主函数内,最终目标是类拿过来就能用
学籍信息管理:(课上示例)
管理的数据:班级,学生,老师(授课,班主任)。
1.计算学生的考试成绩,需要补考的人数。
2.计算出教师或学生的身高体重是否正常。
Java中的注释:
单行(//注释内容),多行(/*注释内容*/):写在类中,函数中。
文档注释(/**文档注释内容*/):定义在类中。有助于程序编写(生成帮助文档 doc文件,系统提示);
项目——>右键——>导出(export)
Java中数据类型转换方式:
基本数据类型之间转换:自动转换(值的大小小于被赋值变量大小),强制转换(值的大小大于被赋值变量大小)。
复合数据类型之间转换,或复合数据类型和基本数据类型之间转换:使用数据类型转换的函数。
Integer.toString();整型--->字符串
Integer.parseInt();字符串--->整型
Double.toString();浮点--->字符串
Double.parseDouble();字符串--->浮点
Java类的定义:公有的,默认的。
- 成员变量(属性):数据存储,数据结构维护。
- 访问权限:公有的,私有的,受保护的,默认的。
- 存储方式:默认的(动态存储),静态存储,只读存储,等。
动态存储:默认的。在创建一个对象时,该成员变量,存储堆区。且创建的每一个对象都独立使用一块内存空间。
对于此成员变量的访问只能通过对象名。
静态存储:在定义成员变量时,加入static关键字。该成员变量在程序时,就已经存储在全局数据区,其创建不依赖于对象的创建。
故,静态成员变量只有一个,被多个对象所共享。既可以通过对象名引用也可以通过类名引用(系统推荐通过类名)。
-
- 数据类型:
- 成员函数(方法):对本类中多定义的成员变量的相关的操作。
- 访问权限:公有的,私有的,受保护的,默认的。
- 存储方式:默认的(动态存储),静态存储,只读存储,抽象,同步等。
动态存储:只能通过对象名称来调用。
为动态成员变量服务的(一般都是写操作动态成员变量的代码,当然在其中也可以出现静态成员变量的访问)。
静态存储:通过类名或对象名称来调用(推荐使用类名)。
为静态成员变量服务的(只能写操作静态成员变量的代码)。
-
- 函数的定义格式:返回值,函数名称,参数列表:
函数在一般情况下,遵循先定义后使用的原则。
函数的定义:参数叫做形参(只能变量,接受数据。占用内存空间)。
函数的调用:参数叫做实参(变量,常量,表达式,发送数据的)。
因为变量的作用域不同,需要在主调函数向被调函数传值时,需要通过参数。
参数的传参的方式:
值传递:参数的数据类型为基本数据类型时,都是值传递。
地址传递:除了基本数据类型,都是地址传递。
在被调函数向主调函数返值时,需要通过参数的地址传递或函数的返回值。
-
- 函数重名:多态性。
1.不同类中同名函数:在调用时通过类名或对象名区分调用的函数具体哪个函数。
2.同一个类中同名函数:函数的重载。
函数的重载规则:函数名相同,但函数参数的类型,个数,顺序,有一个不同。
编译之前:
void aa();
int aa(int i);
int aa(char i);
String aa(int i,int j);
String aa(int a,int b);
String aa(int i,char j);
String aa(char a,int b);
编译之后:
void aa();
int aaint(int i);
int aachar(char i);
String aaintint(int i,int j);
String aaintint(int a,int b);
String aaintchar(int i,char j);
String aacharint(char a,int b);
3.函数重写:子类和父类中有同名函数,调用的是那个函数。
- 构造函数:一般情况下访问权限是public,没有返回值,函数名称必须和类名同名,参数可以任意设定,也有函数重载。(java中乜有拷贝构造函数和析构函数)
一个类可以存在多个构造函数,构造函数使用是在new创建一个对象时,自动调用的。某一个对象创建时,只能调用一个构造函数。
构造函数创建:
1.当在类中没有为其指定一个构造函数时,系统会为其自动添加一个构造函数,这个构造函数就做默认构造函数(无参数,无代码)。
public 类名()
{
//默认构造函数
}
2.如果指定了类的构造函数,那么其默认的构造函数,系统将不会自动创建。
3.构造函数不能显示调用,它是new对象调用,作用是用来进行对对象的初始化赋值。
注意:创建一个对象时,先开辟内存空间,然后执行变量定义时赋值,最后才是执行构造函数赋值。
final 作用于成员变量时,这个成员变量代表只读变量。只能在定义变量时,或构造函数中对其赋值一次。
如果定义变量时赋值,在构造函数中就不能再次赋值(赋值一次,在new对象时)。
this指针和this函数();
this指针:代表本对象的内存地址。
this函数:代表调用本类的其它构造函数。
类的定义习惯:
1.动态成员变量私有访问权限,通过get,set方法来进行操作。静态成员变量直接定义公有的访问权限。
2.定义两个构造函数(一个为无参构造函数,一个具有对该类所有成员变量进行初始化赋值参数的构造函数)
Ctrl +A ——>Ctrl + I(界面美化)
将很多行同时缩进:选中这些行 Tab(增加缩进) Shift+Tab (减少缩进)
类成员 定义为私有——>选中函数——>右键——>Source——>getandset (直接生成getName(),setName())
类的关系:组合(一个类包含另一个类,两个类分别创建实例),继承(一个类是另一个类功能扩展,只需要创建一个类实例)
类的组合:
public class A
{
public int i=10;
}
public class B
{
public A a=new A();
public int i=10;
}
public static void main(String arg[])
{
B b=new B();
b.a.i;
b.j;
}
类的继承:
public class A
{
public int i=10;
}
public class B extends A
{
public int i=10;
}
public static void main(String arg[])
{
B b=new B();
b.i;
}
继承特性:
1.继承代码实现,继承的存储结构(和组合对比)。
2.Java中所有的类彼此之间都有继承关系,所有类都继承Object类,将其称为基类。如果不手动设定一个类的父类,系统会默认其父类为Object类。
3.一个类只能有一个父类(单一的继承),一个类可以有多个父接口(多重的继承)。
4.在父类和子类同名成员变量。
创建子类对象,其会先将父类的成员变量都创建出来,然后在创建其自己的成员变量。同名时,两个同名的成员变量分别占用自己的内存空间。
对象名.成员变量、this.成员变量代表都是子类中的成员变量。在子类内部使用super.成员变量代表其父类同名成员变量。
注意:子类不能直接查找其父类的父类的同名变量,需要通过其父类中转。
5.super指针和super函数:super指针代表子对象中属于父对象部分内存空间的地址。super函数代表调用其父类的成员函数。
如果在子类的够着函数中没有指定其调用其父类的哪一个构造函数,则系统默认调用父类的默认构造函数。否则,不再自动调用super函数。
6.构造函数中:this函数和super函数,只能出现一个,因为这个函数的使用规则,都必须写在构造函数的第一行。
7.在父类和子类同名成员函数。。。。
静态变量:存在于全局数据区,不以来于对象的创建
//班级类中
public ststc String no;
//主函数中
TClass.no = "001";——>通过类名引用(系统推荐)
new TClass().no = "002";——>通过对象名引用
形参占用内存(栈区,调用函数时即生成)
字符串占2块内存,一是地址,二是内容 null和空字符串是不同的
TClass() {no="";} 等价于 在外边定义时private String no = null;
创建一个对象时,先开辟内存空间,然后执行变量定义时赋值,再执行构造函数(构造函数防止空指针异常)
Object java中的亚当夏娃,是所有类的父类
public class A {int i=10;}
public class B {int i=20;}
输出 b.i = 20
内存空间仍然存在,只是被自雷覆盖,内存结构如图