Java基础——面向对象+(匿名)对象+封装(修饰符权限)+变量+构造函数+This关键字
来源:互联网 发布:搜狗推广账户怎么优化 编辑:程序博客网 时间:2024/05/17 00:57
1. 面向对象
面向对象与面向过程的不同
面向对象:是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
面向过程:分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用。强调的是功能行为。
例子:大象放冰箱;买电脑面向对象(自己去买转变为叫人-对象,帮助买);公司招人,自己做项目,时间长,面向过程。指挥别人-对象做,用员工对象的功能来完成项目;到什么场景举什么例子;从自己执行动作变为指挥对象去做。
面向对象的特点
是一种符合人们思考习惯的思想
可以将复杂的事情简单化
将程序员从执行者转换成了指挥者
完成需求时:
•先要去找具有所需的功能的对象来用。
•如果该对象不存在,那么创建一个具有所需功能的对象。
•这样简化开发并提高复用。
面向对象三个特征
封装,继承,多态;
2. 类
现实生活中一类事物的描述(class定义的类),是抽取出共性的内容,对具体的抽象;
在一个程序中可以有N个内部类,只有一个公共类,每个内部类都可以有主函数,只要一个入口(主函数)就可以;
子类只能继承父类中的非私有属性和函数;
3. 对象
就是这类事物(万物皆对象),实实在在存在的个体,是new出来的一个实体,在堆内存中。是类的实例化;
定义类就是在描述事物,就是在定义属性和行为。属性和行为是类的成员(成员变量和成员方法)
new car():产生一对象;
car c = new car();c为类类型变量,也是new出的对象的名字,类类型变量指向对象;
成员变量:在堆内存中,因为对象的存在而存在。
局部变量:在栈内存中
4. 匿名对象
new People().name="张三";相当于:People p=new Peolple();p.name=”张三”;
使用方式1:当对对象的方法(非属性)只调用一次时,比较简化(局限性);
使用方式2:匿名对象可作为实际参数进行传递
5. 匿名对象,有名对象区别
匿名对象创建完执行下一条语句前就销毁了,即是无意义的调用属性,用在只调用对象的方法,一次时,比较简化(调用属性一般是没意义的),有名对象进行多个成员(属性,行为)调用
匿名对象可作为实际参数进行传递。
6. 封装
隐藏对象的属性和实现细节,仅对外提供公共访问方式;
好处:将变化隔离;
便于使用;
提高重用性;
提高安全性;
封装原则:
将不需要对外提供的内容隐藏起来;
把属性全隐藏,提供公共方法对其访问;
私有修饰符修饰的属性只能用于本类;为了能够在其他类中访问,可以设置一个方法,并将值赋给私有属性,起到访问私有属性的作用,即是常见的set方法;
一个成员变量对应两个访问方式(set,get方法)
属性的私有化是为了不被外直接访问,提供访问的方法可以控制传输的数据
私有仅仅是封装的一种表现形式;封装不是私有;
私有成员变量之所以要提供访问方式,是因为可以再访问方式中加入逻辑判断等语句;对访问的数据进行操作,提高代码的健壮性;
Void是一种返回值类型,代表没有具体结果返回
例如:
public class Text6 { private String s1="我是私有成员变量";//私有成员变量 public void setS1(String s1)//私有成员变量的访问方式set方法 { this.s1 = s1; } public String getS1()//私有成员变量的访问方式get方法 { return s1; } static void show(){ //在外部类的静态方法中,因为没有this,所以必须先获得外部类引用,然后创建非静态内部类。 Text6 t2=new Text6(); nClass n=t2.new nClass(); n.display();//在外部类函数中调用内部类函数。 } //内部类 class nClass{ public void display(){ Text6 t1=new Text6(); String s2="我是内部类属性"; t1.setS1(s2);//在内部类函数中访问外部成员变量,并调用外部函数。 System.out.println(t1.getS1()); } } public static void main(String[] args) { Text6 t3=new Text6(); t3.show(); } }
7. 变量
成员变量和局部变量:
成员变量创建好后,在堆内存,可以不用初始化,有默认值,直接使用;
局部变量创建好后,在栈内存,无默认值,不初始化就不能参与运算;方法运行时,在栈内存中;
People p=null;p在栈内存(变量);p=new People();NEW对象赋值给P,此时在堆内存;
java中为什么在主函数中创建外部类对象可以,创建内部类对象就失败了呢?
1:非静态内部类,必须有一个外部类的引用才能创建。People p=new People(); Man man=p.new Man();
2:在外部类的非静态方法中,因为有隐含的外部类引用this,所以可以直接创建非静态内部类。
3:在外部类的静态方法中,因为没有this,所以必须先获得外部类引用,然后创建非静态内部类。
4:静态内部类,不需要外部类引用就可以直接创建。
5:同时静态的内部类,也不能直接访问外部类的非静态方法。
6:由此可以推测,非静态内部类之所以可以直接访问外部类的方法,是因为创建非静态内部类时,有一个隐含的外部类引用被传递进来。
常见问题
内部类访问外部类的局部变量,应把外部类的局部变量用final修饰
内部类访问外部类的成员变量,应外部类名.this.成员变量;
8. 构造函数
当一个类中,没有定义构造函数时,默认给该类加入一个空参数的构造函数;当构造函数定义了,就不在使用默认空的构造函数.设此时类中只有一个构造方法:Person (String name){this.name=name}
当创建一个对象:Person p=new Person();编译时便会出错;
应该:Person p=new Person(“aaa”);
NEW出对象时,就会调用与之对应的构造函数。
一个类可以有多个不同的构造函数,使得不同的对象有不同的初始化值;
构造函数不需要返回值类型
特点:
1. 函数名与类名相同
2. 不用定义返回值类型
3.不可以写return语句
作用:
给对象进行初始化。
注意:
1. 默认构造函数的特点。
2. 多个构造函数是以重载的形式存在的。
构造函数与一般函数的不同:
写法上不同;
运行上不同;
构造函数是在对象建立后就运行,给对象初始化;不带参数的匿名对象首先运行空构造函数;
一般方法是对象调用才执行,是给对象添加对象具备的功能;
一个对象建立,构造函数只运行一次,一般函数可以被该对象调用多次;
构造函数,构造代码块的区别:
构造代码块是给所有对象初始化,一建立就运行,优先于构造函数;--格式:
构造函数是初始化对应的对象;
使用:所有不同对象的共性内容,初始化方式可以定义在构造代码块中;
ew People().name="张三";
当所有构造函数都私有化时,是不可能建立对象的,因为对象都无法初始化动作;
9. This关键字
案例:
class Person{ private String name; privateintage; Person(int age)//局部变量时age,成员变量也是age { this.age = age;//这里用this表示调用构造方法的对象 } Person(String name) { this.name = name; } Person(String name,int age) { this(name);//this.name = name; this.age = age; } publicvoid speak() { System.out.println("name="+name+"...age="+age); show(); } publicvoid show() { System.out.println(this.name); }} class Test{ publicstaticvoid main(String args[]) { Person p1 = new Person(20); Person p2 = new Person("张三"); Person p13 = new Person("李四",21); }}
以上程序综合了构造函数和this的用法。看上去,是用于区分局部变量与成员变量同名情况。
1. This代表它所在函数所属对象的引用;既哪个对象调用this所在函数,this就代表哪个对象。
this的应用:
当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。
但凡本类功能内部使用到了本类对象,都用this表示。
2. 构造函数之间的调用只能用this关键字(语句)
This语句只能放在构造函数的第一行;因为初始化动作要先执行
this的两种用法:
1、用于区分同名变量的情况,说的成员和局部同名的时候;
2、用于构造函数间调用。
注:一般函数不能直接调用构造函数,因为this语句不能用在一般函数中,只能用在构造函数间。
- Java基础——面向对象+(匿名)对象+封装(修饰符权限)+变量+构造函数+This关键字
- Java基础(面向对象一——理解、匿名函数、封装、构造函数和this关键字的使用)
- 黑马程序员--03.Java面向对象--01.【OOP基本概念】【匿名对象】【封装】【构造函数】【this关键字】
- JAVA基础再回首(四)——面向对象思想、类与对象、成员/局部变量、匿名对象、封装、private、this、构造方法
- 黑马程序员——>第五天<面向对象(匿名对象-封装-构造代码块-this关键字)>
- JAVA面向对象知识点总结(2)—封装、构造函数、构造代码块、this关键字
- Java基础--面向对象(封装、构造函数、构造代码块、this关键字)
- Java基础05:面向对象;类与对象;匿名对象;成员变量;局部变量;封装;构造函数
- 面向对象( 5 )上(匿名对象 封装 构造函数 this)
- 黑马程序员 JAVA初级-面向对象 匿名对象、封装、构造函数、构造代码块、this
- Java基础---面向对象(面向对象,类,对象,匿名对象,封装,构造函数,构造代码块,this,static,main,帮助文档,静态代码块,单例)
- 黑马程序员 Java基础<一>---> 面向对象与类之概述(匿名对象、封装、构造函数、this、静态等)
- 黑马程序员—Java面向对象(类和对象、封装、构造方法、this关键字、static关键字)
- Java基础05天 学习笔记_面向对象(概念,封装,匿名对象,this关键字)
- 面向对象、匿名对象、成员、封装、主函数、成员变量、局部变量、构造函数、this、静态、主函数
- 面向对象:封装¥构造函数&this关键字&static静态关键字
- 黑马程序员——java第五天:面向对象(类、对象、变量、封装、构造、this)
- 黑马程序员——Java基础---面向对象(封装、构造函数、this关键字)--第5天--第67-73集
- some code about intent
- CALayer 详解(转载)
- 二分图
- Factory design pattern in java
- ARM汇编程序---通过ARM汇编调用C语言函数实现累加
- Java基础——面向对象+(匿名)对象+封装(修饰符权限)+变量+构造函数+This关键字
- Java web基础总结五之—— HttpServletRequest与HttpServletResponse
- Spark导入eclipse
- 限制字符串输入——正则表达式(VB.NET)
- java外观模式
- JS原型与原型链终极详解
- tomcat user 配置
- iOS CALayer讲解(转载)
- nodejs mysql