java学习之面向对象(2)
在描述事物的时候,该事物已存在就具备的一些内容,这是我们就可以把它们都定义在构造函数中,那么什么是构造函数呢?
构造函数就是构建创造对象时调用的函数,它可以给对象进行初始化。构造函数与类名相同,第一个字母大写。一个类中如果没有定义过构造函数,那么该类一定会有一个默认的空参数的构造函数。如果定义了指定的构造函数,那么系统默认的构造函数就没有了,如果还要用到就需要重新定义一次。而且,构造函数不唯一,可以有多个,用于不同的对象进行针对性的初始化。多个构造函数在类中是以重载(后面会讲到)的形式体现的。下面有一些代码:
class Person{
private String name;
private String sex;
private int age;
Person(){}
Person(String name){
this.name=name;
}
Person(String name,String sex){
this.name=name;
this.sex=sex;
}
Person(String name,String sex,int age){
this.name=name;
this.sex=sex;
this.age=age;
}
}
构造函数的出现对我们对对象的初始化提供了极大的帮助。那么构造函数与一般的函数有什么区别呢?
有两种区别:
一:对象创建时就会调用与之对应的构造函数对对象进行初始化。而一般函数是在对象创建之后,需要函数功能时才调用。
二:对象创建时,构造函数会调用并且只调用一次。而一般函数是在对象创建后,还可以调用多次。
什么是封装性?
封装是面向对象思想的三大特征之一。而封装就是隐藏实现细节,仅对外提供访问接口。封装的原则就是将不需要对外提供的内容都隐藏起来,并且属性隐藏之后对外提供公共的方法进行访问。一般封装有属性的封装、方法的封装、类的封装、组件的封装、模块化封装、系统级封装。封装之后有什么好处呢?封装之后可以将对象模块化,信息隐藏,代码重用,插件化易于调试,并具备一定的安全性。
class Person{
private String name;
private String sex;
private int age;
Person(){}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
}
注意:当成员变量与局部变量重名时,可以用关键字this区别。this:代表着当前对象,就是所在函数所属对象的引用。简单点说就是哪个对象调用了this所在的函数,this就代表着哪个对象。this也可以用于构造函数中调用其他的构造函数。但是this的引用只能放在第一行。
什么叫方法的重载?
在类中可以创建多个方法,它们都具有同一个名字,但是却具有不同的参数和不同的定义。方法的命名首个字母要小写,从第二个单词开始首个字母大写如getName();
方法重载如下代码:
class Demo{
.
.
.
public int add(int a,int b){
return a+b;
}
public int add (int a,int b,int c){
return a+b+c;
}
public double add (double a,float b,int c){
return a+b+c;
}
}
浅谈关键字static。
static是静态的意思,是全局变量,static关键字是用于修饰成员,包括成员变量和成员函数。而被修饰后的成员具备着如下特点:随着类的加载而加载、优先于对象而存在、被所有的对象所共享、可以直接被类名调用(类名.静态成员)。
注意:使用了static的修饰的静态方法只能访问静态成员,不能调用非静态数据。而且静态方法中不可以写this,super等关键字。
谈到静态变量也就想到成员变量,那这两种变量有什么区别呢?
1、两个变量的生命周期不同:
成员变量随着对象的创建而存在,随着对象的被收回而释放;
静态变量随着类的加载而加载,随着类的消失而消失。
2、调用的方式不同:
成员变量只能被对象调用,而静态变量可以被对象调用,也可被类名调用。
3、别名不同:
成员变量也称为实例变量,静态变量也可称为类变量。
4、数据存储的位置不同:
成员变量数据存储在堆内存的对象中,也叫对象的特有数据。
静态变量数据存储在方法区的静态区。
静态有这种功能,那什么时候使用静态修饰呢?
1、修饰静态变量时,当分析对象中所具备成员变量的值都是相同的,这时成员变量就可以定义为静态的;只要数据在对象中都是不同的,是对象的特有数据,必须是非静态的;如果是相同的数据,对象不需要修改,只要使用即可,不需要存储在对象中,可以定义为静态的。
2、修饰静态方法时、函数是否用静态修饰就看一点:就是该功能函数是否访问到对象中的特有数据。简单点说:从源码来看,该功能是否需要访问非静态的成员变量,如果需要,该功能就是非静态的。
静态代码块、构造代码块和普通代码块的区别:
静态代码块随着类的加载而执行,而且只执行一次。作用是用于给类进行初始化。
普通代码块直接写在主函数中的代码块(方法);
构造代码块可以给所有的对象进行初始化,初始化的内容是所有对象共有的的功能。
java学习之面向对象(2)的更多相关文章
- 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用
垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
- 0025 Java学习笔记-面向对象-final修饰符、不可变类
final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...
- 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类
static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...
- java学习之面向对象概念
思考的两种方式: 举例: 把大象放到冰箱里 一.面向过程 :[打开冰箱->把大象放里面->关上冰箱门]面向过程注重的是过程,也就是(动作[函数]),然后按照动作依次去执行就好了. 代表语言 ...
- JAVA学习总结-面向对象
前言:java面向对象中的知识可以说是整个java基础最核心的部分,不知不觉已经学完快2个月了,是时候复习一波了,刚开始学习的时候被绕的很懵逼,这次总结完毕之后有了很多新的感悟,这就是所谓的每有会意, ...
- Java学习(一)--面向对象(一)
面向对象的思想一直指导者我们软件的分析.设计与开发.java语言是一种面向对象的语言.在学习java之前,先回想一以下向过程和面向对象. 一面向过程 面向过程主张按功能来划分系统需求.每一个功能都负责 ...
- Java学习: 面向对象的使用与注意事项
面向对象的使用与注意事项 面向过程:当需要实现一个功能的时候,每一个具体的步骤都需要亲力,详细处理每一个细节面向对象:当需要实现一个功能的时候,不关心具体的步骤,而是找一个已经具有该功能的人,来帮我做 ...
- 程序设计基础·Java学习笔记·面向对象(下)
Java程序设计基础之面向对象(下) (补充了上的一些遗漏的知识,同时加入了自己的笔记的ヾ(•ω•`)o) (至于为什么分P,啊大概是为了自己查笔记方便(?)应该是("` 3′") ...
- 程序设计基础·Java学习笔记·面向对象(上)
Java程序设计基础之面向对象(上) (自适应学习进度而进行记录的笔记,希望有一些小小的用处吧(^∀^●)ノシ) (新人上路,望多指教,如有错误,望指正,万分感谢(o゚v゚)ノ) 目录 一.面向对象 ...
随机推荐
- 【笔记】js的内存字节转化
function convertSize(size) { if(!size) { return '0 Bytes'; ...
- LINUX命令批量替换文件中的字符串
sed -i "s/abcd/1234/g" `grep abcd -rl /home/data` find /data/web -type f -exec sed -i 's ...
- linux学习日记之鸟哥
2016年10月11日星期二 df命令解释:用于显示磁盘分区上可以使用的磁盘空间.默认显示单位为KB,可以用该命令来获取硬盘被占用了多少空间,目前还剩多少空间等信息.用法:df 选项 参数例:df – ...
- Office文档在线预览
工具说明:通过传入文档的Web地址,即可进行Office文档的在线预览. 使用方式: 在http://office.qingshanboke.com地址后,通过url参数传入您想预览的文件路径. 如: ...
- 学习微信小程序之css9内边距
padding内边距 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 解决scrollview和viewpager冲突
import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; i ...
- 对rxandroid的简单理解
最近发现这个rxandroid挺火的,我就研究了一下,还真的挺不错. 首先在说之前可能很多人会和我刚刚学习的时候一样有很多疑问,如: 1:rxandroid是什么东西? 2:rxandroid能干嘛? ...
- Angular表单验证
novalidate 去掉html5自带的验证 ng-minlength 规定输入文本的最小长度 ng-maxlength 规定输入文本的最大长度 ng-submit 接收一个方法名 ...
- WPF CodeBehind后台动态创建图片及添加事件
问题:WPF中DataGrid需要动态生成列并绑定值,首列包含图片和文本,点击图片触发事件. 难点:1.图片资源在VisualTree中的绑定 2.图片的事件绑定 public class Mai ...
- Python for Infomatics 第14章 数据库和SQL应用二(译)
14.4 创建数据库和表 相比Python的列表和字典,数据库需要更多的已定义结构. 在我们创建数据库表之前,我们必须预先告诉数据库表和列的命名,以及计划保存到列中和数据类型.当数据库软件预先知道每列 ...