面向对象基础
60
C: 面向过程——1、2、3…
C++ 、JAVA: 面向对象
61
对象的进化史
1、数据无管理时代
2、数据管理和企业部门制
3、对象和企业项目制
62
对象和类的概念
对象:是具体的事物 xiaoming xiaohong
类:是对对象的抽象(抽象 抽出象的部分)Person
先有具体的对象,然后抽象各个对象之间象的部分,归纳出类通过类再认识其他对象。
• 类:class
• 对象:Object, instance(实例)。以后我们说某个类的对象,某个类的实例。是一样的意思。
063
类方法的定义!
[修饰符] 方法返回值类型 方法名(形参列表) {
// n条语句
}
内存分析!!!!
class computer{
String brand; // 品牌
}
public class student{
int id;
int age;
String sname;
computer comp;
void study() {
System.out.println("我在认真学" + "并正在使用"+comp.brand+"电脑");
}
student(){
}
public static void main(String[] args) {
student stu = new student(); // 创建一个对象
stu.id = 1001;
stu.sname = "mqt";
computer comp1 = new computer();
comp1.brand = "联想";
stu.comp = comp1;
stu.study();
}
}
只要看到new…就是创建了一个对象 student stu = new student(); /
student(){
}
//构造方法,用于创建这个类的对象。无参的构造方法可以由系统自己创建。
64内存分析
public class student {
//属性
int id;
String sname;
int age;
Computer comp;// 计算机
//方法
void study() {
System.out.println("w我在认真学" + "正在使用"+comp.brand+"电脑");
}
void play() {
System.out.println("我在玩游戏农药");
}
// 构造方法。用于创建这个类的对象。无参的构造方法可以由系统自动创建。
student(){
}
//程序执行的入口,必须要有main函数
public static void main(String[] args) {
student stu = new student(); // 创建一个对象
stu.id = 1001;
stu.age = 18;
stu.sname = "mqt";
Computer c1 = new Computer();
c1.brand = "联想";
stu.comp = c1;
stu.play();
stu.study();
}
}
class Computer{
String brand;
}
栈
存放:局部变量 先进后出,自下而上存储 方法执行完毕,自动释放空间
堆
存放new出来的对象 需要垃圾回收器来回收
方法区(静态区):
jvm中只有一个方法区,被所有线程共享
方法区实际也是堆,只是用于存储类、常量相关的信息!
存放:类的信息(代码)、static变量、字符串常量等.
示意图:
65
this:表示创建好对象的成员变量!
super(); 构造方法的第一句总是super()
66垃圾回收机制(Garbage Collection)
67通过分代的垃圾回收机制
- 年轻代
- 年老代
- 持久代
68 this
this本质就是“创建好对象的地址!”由于在构造方法调用前,对象已经创建。因此,在构造方法中也可以使用this代表“当前对象”。
public class TestThis {
int a,b,c;
TestThis(int a,int b){
this.a = a;
this.b = b;
}
TestThis(int a,int b,int c){
this(a,b); //构造器的调用必须位于第一句
this.c = c;
}
void sing() {
}
void eat() {
this.sing();
System.out.println("你妈妈喊你回家吃饭!");
}
public static void main(String[] args) {
TestThis hi = new TestThis(2,3);
hi.eat();
}
}
在程序中产生二义性之处,应使用this来指明当前对象;普通方法中,this总是指向调用该方法的对象。构造方法中,this总是指向正要初始化的对象。
使用this关键字调用重载的构造方法,避免相同的初始化代码。但只能在构造方法中用,并且必须位于构造方法的第一句。
this不能用static方法中
070 静态初始化块!
071参数传递机制
Java中,方法中所有参数都是“值传递”,也就是“传递的是值的副本”。
也就是说,我们得到的是“原参数的复印件,而不是原件”。因此,复印件改变不会影响原件。
· 基本数据类型参数的传值
传递的是值的副本。 副本改变不会影响原件。
· 引用类型参数的传值
传递的是值的副本。但是引用类型指的是“对象的地址”。因此,副本和原参数都指向了同一个“地址”,改变“副本指向地址对象的值,也意味着原参数指向对象的值也发生了改变”。
072 package
我们通过package实现对类的管理,package的使用有两个要点:
1. 通常是类的第一句非注释性语句。
2. 包名:域名倒着写即可,再加上模块名,便于内部管理类。
注意事项:
1. 写项目时都要加包,不要使用默认包。
2. com.gao 和 com.gao.car,这两个包没有包含关系,是两个完全独立的包。只是逻辑上看起来后者是前者的一部分。
按住ctrl键 点关键字可以看源码
073 import详解_ 静态导入详解
同一个包里有相同的类,可以直接使用。如果包不相同,需要导入类。
例如: import cn.st.oo.User; // 表示导入了User类
例如: import cn.st.oo.*; // 表示导入了oo下面所有的类 会降低编译速度,不会降低运行速度
静态导入(static import)是在JDK1.5新增加的功能,其作用是用于导入指定类的静态属性,这样我们可以直接使用静态属性。
package cn.sxt;
//以下两种静态导入的方式二选一即可
import static java.lang.Math.*;//导入Math类的所有静态属性
import static java.lang.Math.PI;//导入Math类的PI属性
public class Test2{
public static void main(String [] args){
System.out.println(PI);
System.out.println(random());
}
}
第五章 面向对象三大特征— 继承、封装、多态–
**
074
**
在我们编程中,如果新定义一个B类,发现已经有A包含了我们需要的属性和方法,那么B类只需要继承A类即可拥有A类的属性和方法。
class Person {
String name;
int height;
public void rest(){
System.out.println("休息一会!");
}
}
class Student extends Person {
String major; //专业
public void study(){
System.out.println("在尚学堂,学习Java");
}
}
instanceof 运算符
instanceof是二元运算符,左边是对象,右边是类;当对象是右面类或子类所创建对象时,返回true;否则,返回false。
1.Java中只有单继承,接口有多继承
2.子类继承父类,可以得到父类的全部属性和方法 (除了父类的构造方法),但不见得可以直接访问(比如,父类私有的属性和方法)。
3.如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object。
075.方法的重写
override 即是覆盖,也是重写!
077.equals方法的重写
alt+ctrl+C 上下键 复制