面向对象1
1. 一切皆对象。
对象:属性和行为的组成。
类 :具有相同属性和行为的的一组对象的集合(抽象的)。
属性:成员变量。 行为:方法。
创建对象:new + 构造方法
构造方法:(1)名字和类名一摸一样 (2)没返回值类型,连void都没有
(3)每一个类都有一个空的隐式的构造方法
(4)若手动地去写一个显式的构造方法,那么隐式的构造方法不存在
(5)构造方法的作用就是来创建对象的,不能调用,还可以初始化成员变量
2. 栈:保存小数据,速度快。(局部变量保存在栈里)
堆:保存大数据,速度慢。(成员变量保存在堆里)
一个对象未被引用就相当于找不到这块内存,也就是垃圾,所以把一个对象销毁的
最简单的方法就是把它的引用设为null值。
3. 写出一个类的方法步骤:
(1)找出哪些对象 (2)找出类中的属性和方法
(3)确定有几个类 (4)最后创建对象,调用方法完成实际功能。
this 指针:解决成员变量和局部变量同名的问题,static 变量不能重复设置。
4. 若成员变量和局部变量同名,则加上this的为成员变量,如:this.name 和 this.age都是指
成员变量的name和age,即this 指针相当于对当前对象的引用。
5. 成员变量的初始化问题:如果成员变量未被初始化则会被默认初始化,而局部变量则不能。
6. 加了static 的变量叫静态变量,加了static 的方法叫静态方法。栈内static 里所有的变量都是共享的,
所有的对象都共享它,故static 里的变量的数据不能重复。
7. 相关的程序体现的知识点如下:
public class Ma {
public static void main( String args[]){
Person p1 = new Person("张三",19); //构造方法初始化成员变量
Person p2 = new Person("李四",20); //构造方法初始化成员变量
Person.m(); //因为方法m()是静态的,所以可以不用对象直接调用
}
}
class Person {
public Person(String name,int age){
this.name = name ;
this.age = age ; //this指针指向类Person的成员变量
}
String name;
int age;
public static void m(){
System.out.println("我是中国人");
}
}
//张三吃了李四的一根头发
public class Mda {
public static void main( String args[]){
Person p1 = new Person();
p1.name = "张三";
Person p2 = new Person();
p2.name = "李四";
Hair h = new Hair("的头发");
p2.eat(p1,h);
}
}
class Person {
String name ;
Hair h ;
public void eat(Person p , Hair h){
System.out.println(name + "吃了" + p.name + h.info);
}
}
class Hair {
String info ;
public Hair(String inf) {
info = inf ;
}
}
//tom猫抓住了老鼠jacky ,jacky哭了
public class Mb {
public static void main(String args[]){
Cat cat = new Cat();
cat.name = "tom";
Mouse m = new Mouse();
m.name = "jacky";
cat.catchmouse(m);
}
}
class Cat {
String name;
public void catchmouse(Mouse m) {
System.out.print(name + "猫抓住了老鼠" + m.name + ",");
m.cry();
}
}
class Mouse {
String name;
public void cry(){
System.out.println(name + "哭了");
}
}