黑马程序员_面向对象(二)
来源:互联网 发布:网络不通怎么解决 编辑:程序博客网 时间:2024/04/27 16:24
------- android培训、java培训、期待与您交流! ----------
在上一篇的博文中已经介绍了基本的面向对象的知识,今天这篇博文主要介绍的有以下几个内容
1、成员变量和局部变量
2、匿名对象
3、封装
4、this关键字
5、构造方法
6、static关键字
1、成员变量和局部变量
成员变量是定义在类中的变量,而局部变量是定义在方法上或某个代码块中,比如for中等等
package day06;public class ClassDemo01 {public static void main(String[] args) {Demo d = new Demo();d.method();}}class Demo{int num; //成员变量public void method(){int num2 = 5; //局部变量System.out.println("num:"+num+",num2:"+num2);}}运行结果
通过运行结果我们发现,num没有初始化也有值,这个值为0,而局部变量如果没有被初始化就使用的话,编译就会报错。
这边我们就需要说说成员变量和局部变量的区别:
1、定义的位置不一样,成员变量定义在类中方法以外,而局部变量则定义在方法的声明上或者一些代码块中
2、在内存中的位置不一样,成员变量定义在堆中,局部变量定义在栈中,定义在堆中的变量都会有一个初始化的值。
3、生命周期不一样,成员变量的随着对象的创建而创建,随着对象的消失而消失,局部变量是随着方法的调用而存在,随着方法调用完毕而消失。
4、初始化值不同,成员变量有默认初始化值,而局部变量没有,必须定义赋值后才能使用。
在开发中我们常常会将对象作为形参,那么这时候实际上需要的是一个对象,即是对对象的引用。
2、匿名对象,匿名对象其实就是直接new出一个对象进行使用,不需要使用一个对象去接收new出来的对象。
package day06;public class NoNameDemo {public static void main(String[] args) {new Demo2().method();;Demo2 d3 = new Demo2();d3.show(new Demo2());}}class Demo2{public void method(){System.out.println("匿名对象调用");}public void show(Demo2 d){d.method();System.out.println("传过来一个匿名对象");}}匿名对象的使用场景:当方法仅仅只需要调用一次的时候,还可以作为参数进行传递。
3、封装
封装是面向对象的三大特性之一,什么是封装呢?
封装就是将一些不需要对外提供的细节隐藏起来,并且对外提供一个公共的访问方式。
封装的体现之一就是private,private是一个修饰符,用于修饰变量、方法。
被private修饰的方法和变量只能在本类中被访问。
package day061;public class PrivateDemo {public static void main(String[] args) {//new Demo().show();报错new Demo().method();}}class Demo{private String str;private void show(){str = "hello world";System.out.println(str);}public void method(){show();}}
4、this关键字
this关键字是对当前对象的引用,this关键字代表的是一个对象,this.变量名或者this.方法名,该变量或者该方法属于哪个类,this就代表该类对象。
假设我有一个方法,方法中有一个成员变量和一个方法,方法上有一个形参,形参的名称与成员变量名相同,如果在方法中是用变量的话,使用的会是哪一个呢?
package day061;public class PrivateDemo2 {public static void main(String[] args) {new Demo01().show("张三");}}class Demo01{String name;public void show(String name){System.out.println("name:"+name);}}
发现打印结果是张三,其实在java当中,如果成员变量和局部变量同名的话,首先会在方法中寻找是否有该变量,如果有,使用的就是局部变量,没有就使用成员变量,那么如果我们需要使用成员变量又该如何呢?需要使用成员变量的话就用this.成员变量名使用的就是成员变量了。
5、构造方法
构造方法是指与类名相同的方法,并且该方法没有返回值类型,默认的构造方法是无参构造方法,如果手动给定了一个带参的构造方法,那么系统就不再默认生成构造方法了。
构造方法的作用其实是对对象进行初始化操作
package day062;public class Demo {public static void main(String[] args) {Student s = new Student();System.out.println(s.name+":"+s.age);Student s2 = new Student("张三",25);System.out.println(s2.name+":"+s2.age);}}class Student{int age;String name;public Student(){ //无参构造方法age = 18;name = "小李";}public Student(String name,int age){this.name = name;this.age = age;}}
6、static关键字
static是静态的意思,用于修饰方法和变量。被static修饰的方法或者变量被所有对象所共享。
static特点:
随着类的加载而加载
优先于对象存在
被类的所有对象共享
在静态方法中只能访问静态成员,不能访问非静态成员
静态变量和成员变量的区别:
A:所属不同
静态变量:属于类,类变量
成员变量:属于对象,对象变量,实例变量
B:内存位置不同
静态变量:方法区的静态区
成员变量:堆内存
C:生命周期不同
静态变量:静态变量是随着类的加载而加载,随着类的消失而消失
成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失
D:调用不同
静态变量:可以通过对象名调用,也可以通过类名调用
成员变量:只能通过对象名调用
- 黑马程序员_面向对象(二)
- 黑马程序员_面向对象(二)
- 黑马程序员_面向对象(二)
- 黑马程序员_面向对象基础知识二
- 黑马程序员_面向对象二
- 黑马程序员_Java基础_面向对象(二)_06
- 黑马程序员_面向对象(1)
- 黑马程序员_面向对象(2)
- 黑马程序员_面向对象(1)
- 黑马程序员_面向对象(2)
- 黑马程序员_面向对象(3)
- 黑马程序员_面向对象(上)
- 黑马程序员_面向对象(下)
- 黑马程序员_面向对象(上)
- 黑马程序员_面向对象(下)
- 黑马程序员_面向对象(1)
- 黑马程序员_面向对象(继承)
- 黑马程序员_面向对象(封装)
- UIScrollView上部空白的问题
- IOS小菜鸟养成记00
- 是什么能够两小时写出《flppybird》游戏
- 11g RAC完全安装图解(VM Workstation8.0+Centos5.5)02-Oracle安装
- 用 Python 和 OpenCV 检测图片上的条形码
- 黑马程序员_面向对象(二)
- Could not find the main class: org.apache.catalina.startup.Boostrap. Program will exit
- Android开发之浅谈内容提供者provider的使用
- 编译内核模块 .ko文件缺少:mmzone.h bounds.h
- IOS游戏 与PHP服务器端的AES通讯加密
- 倒入appcompatv7项目各种报错问题汇总
- servlet生命周期,servlet与CGI的区别
- 关于error:Cannot assign to 'self' outside of a method in the init family
- 单元测试——NUnit测试简单实例