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゚)ノ) 目录 一.面向对象 ...
随机推荐
- runtime运行时
/** * Describes the instance variables declared by a class. * * @param cls The class to inspect. * @ ...
- 微信JS SDK配置授权,实现分享接口
微信开放的JS-SDK面向网页开发者提供了基于微信内的网页开发工具包,最直接的好处就是我们可以使用微信分享.扫一扫.卡券.支付等微信特有的能力.7月份的时候,因为这个分享的证书获取问题深深的栽了一坑, ...
- CNN初步-2
Pooling 为了解决convolved之后输出维度太大的问题 在convolved的特征基础上采用的不是相交的区域处理 http://www.wildml.com/2015/11/unde ...
- opencv2.4更换为opencv3.1后,mxnet编译错误(libpng16.so.16)
编译显示错误为: /usr/bin/ld: warning: libpng16.so.16, needed by /usr/local/lib/libopencv_imgcodecs.so, not ...
- 使用Nito.AsyncEx实现异步锁(转)
转载地址:http://www.cnblogs.com/1zhk/p/5269279.html Lock是常用的同步锁,但是我们无法在Lock的内部实现异步调用,比如我们无法使用await. 以下面的 ...
- ppmoney
build/config.js 改 8080端口 build/webpack.dev.conf.js 改路径简写 alias:{ 'vux-components':'vux/dist/componen ...
- 使用Spring发送带附件的电子邮件(站内和站外传送)
JavaMail的介绍 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输. 虽然JavaMail是 ...
- vuex
英文:(Introduction)中文:https://github.com/vuejs/vuex/issues/176(贡献者努力中)
- 安装HBase
安装HBase 1.默认已经安装好java+hadoop+zookeeper 2.下载对应版本的HBase 3.解压安装包 tar zxvf hbase-1.0.2-bin.tar.gz 4.配置环境 ...
- 【监听文件 多线程】使用java--WatchService监听文件 开启多线程copy文件
有一个小需求: 在PC跟前没有人的时候,迅雷下载文件 至PC磁盘上,并且自动移动文件到U盘上,小主只要在走的时候取走U盘即可. 基于这个需求,有了下面这段代码:[JDK 1.8] package c ...