黑马程序员-------面向对象-------

来源:互联网 发布:php返回数据格式 编辑:程序博客网 时间:2024/05/23 17:49
------- android培训java培训、期待与您交流! ----------
面向对象:
面向对象是相对面向过程而言
面向对象和面向过程都是一种思想
面向过程
强调的是功能行为
面向对象
将功能封装进对象,强调具备了功能的对象。
面向对象是基于面向过程的。
面向对象的特征:
封装(encapsulation)
继承(inheritance)
多态(polymorphism)
成员变量和局部变量的区别?
1,作用范围。
成员变量:定义在类中,可以被类中的任意方法访问。
局部变量:只在它所属的局部大括号中有效。
2,存储情况。
成员变量(非静态):存储在堆内存中,随着对象的存在而存在。当对象变成垃圾被回收时,该该对象中的成员变量会消失。
      成员变量(静态):存储在方法区中,随着类的加载而加载,随着类的消失而消失
局部变量:存储在栈内存中,当方法被调用,或者语句被执行的时候,才存在。
当方法运行完毕,或者语句运行完毕时,局部会被自动释放。所以成员变量也称之为实例(对象)变量.
3,初始化情况。
成员变量:在堆内存中有默认初始化值。
局部变量:必须手动初始化后,才可以被使用。
class Demo{
int num = 4;
public void show(){
num= 5;
for(int y=0; y<3; y++){
System.out.println(y);
}
}
public static void main(String[] args){
//Demo d = new Demo();
//d.show();
}
}
对象的创建和使用
class Car {//对Car这类事物进行描述
String color = "red";
int num = 4;
void show(){
int num = 100;//我这里再定义一个num可不可以?
System.out.println("color="+color+"..num="+num);
}
}
class CarDemo {
public static void main(String[] args) {
Car c = new Car();//建立对象
c.color = "black";//对对象的属性进行修改
c.show();//使用对象的功能。
}
}
匿名对象
匿名对象是对象的简化形式,是没有名字的对象.(只要是简化形式就有一定局限性)
匿名对象使用时需要注意的两种情况
当对对象方法仅进行一次调用的时
匿名对象可以作为实际参数进行传递
public static void method(Car cc){
cc.num = 3;
cc.color = black;
cc.run();
}
pulic static void main(String[] args){
method(c);
method(c1);
method(c2);
method(new Car());
}
封装(Encapsulation)
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:
将变化隔离。
便于使用。
提高重用性。
提高安全性。
封装原则:
将不需要对外提供的内容都隐藏起来。
把属性都隐藏,提供公共方法对其访问。
联系的实例:
class PersonDemo {
 public static void main(String[] args) {
 Person p = new Person();
p.age = 20;
p.speak();
 }
}
class Person {
 int age;
 public void speak() {
System.out.println(age);
}
}
private关键字:
是一个权限修饰符。
用于修饰成员(成员变量和成员函数)
被私有化的成员只在本类中有效。
当成员私有后,提高了安全性。但是访问权限降低了。这时可以通过对外提供公有方法的形式对其进行访问。
好处是:可以在方法中对成员变量的访问进行控制。
注意:私有仅仅是封装的一种体现形式而已。
常用之一:
将成员变量私有化,对外提供对应的set ,get方法对其进行访问。提高对数据访问的安全性。
void setAge(int a){}int getAge()
构造函数特点:
1.构造方法的方法名必须与类名相同。
2.构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
3.构造方法不能由编程人员调用,而要系统调用。
4.一个类可以定义多个构造方法,也就是构造方法可以重载,以参数的个数,类型,或排列顺序区分。
5.构造函数细节:如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。
6.作用:构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。
实例:
class Person {
 private String name = "haha";
private int age;
//构造函数。
 Person() {
 cry();
 }
 Person(String n) {
 name = n;
 cry();
}
 Person(String n,int a) {
 name = n;
age = a;
 cry();
 }
构造函数和一般函数的区别
1从功能上的区别:
构造函数是给对象初始化的
一般函数是因为对象需要满足某种功能定义的
2从执行上的区别
构造函数,是对象创建的时候被执行,不用调用。
一般函数是什么时候调用,就什么时候执行,不调用就永远不执行。
this关键字
哪个对象调用this所在的函数,this就代表哪个对象。
public boolean compare(Person pp) 
{if(this.age==pp.age)
return true;
return false;
static(静态)关键字
1,static关键字:
static  是一个修饰符,用于修饰成员(成员变量 、成员方法)
2,当成员被静态修饰后,就多了一种调用方式,除了可以被对象调用外,还可以直接被类名调用
   格式:类名.静态成员
3,static特点
随着类的加载而加载。  也就是说:静态会随着类的消失而消失,说明它生命周期最长。
优先于对象存在  。明确一点:静态先存在 对象后存在。
被所有对象共享 ,
可以被类名所调用
练习实例:
class Demo {
 int num1 = 3;
 static int num2;
 void show() {
System.out.println("num1="+this.num1);
System.out.println("num2="+Demo.num2);
 }
 static void method() {

System.out.println("num2="+Demo.num2);
 }
}
局部代码块、构造代码块、静态代码块
1,局部代码块:
作用:控制变量的生命周期;
在程序中,当我们已经使用完 x 后,并且在接下来的代码中,不会再用到x,那么就没必要让x 在内存中占用空间了,这用情况下,可以使用 局部代码块,将x及其所设计到的区域封装为局部代码块,他们在程序执行中顺序不变,只是在执行完成后消失。
2,构造代码块:
作用:它可以给所有对象进行初始化
存在于:类中。
当类中的构造方法以重载的形式存在时,并且有共同成员变量或共同的方法时,可以通过构造代码块对其进行初始化;这样可以减少代码的重复!
3,静态代码块:
作用:给类进行初始化。
当类中的方法都被静态了化,并且构造方法被private了,这时我们不能,在将这个类实例化,然而又想让类增加一些属性,就可以使用静态代码块









0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 保修发票没了怎么办 家电发票丢了怎么办 天猫苏宁发票丢了怎么办 本子密码忘记了怎么办 直属领导抢客户怎么办 老板油烟机坏了怎么办 闲鱼上买洗衣机自提怎么办 水龙头水流太小怎么办 水龙头压力太小怎么办 浴室水龙头水小怎么办 冰箱出水口堵了怎么办 水龙头出水太小怎么办 买东西让骗了怎么办 医疗保险中断5年怎么办 医保断交5年怎么办 医保社保断了怎么办 医保没交够25年怎么办 医保卡外借 保险怎么办 安装系统时断电怎么办 电视不带wifi怎么办 苹果手机呼叫失败怎么办 苹果8呼叫失败怎么办 微信被朋友拉黑怎么办 手机骚扰电话太多怎么办 骚扰电话太多了怎么办 总是接到骚扰电话怎么办 老有骚扰电话怎么办 一直被电话轰炸怎么办 有线电视突然出来雪花怎么办 电视出雪花了怎么办 长虹电视有雪花怎么办 网络电视雪花了怎么办 夏普电视雪花屏怎么办 有线电视显示无信号怎么办 门铃对讲机坏了怎么办 蝴蝶兰叶子晒伤怎么办 杜鹃花浇水多了怎么办 杜鹃花施肥多了怎么办 杜鹃花根变黑了怎么办 杜鹃花叶子蔫了怎么办 杜鹃花花苞干了怎么办