在描述事物的时候,该事物已存在就具备的一些内容,这是我们就可以把它们都定义在构造函数中,那么什么是构造函数呢?

  构造函数就是构建创造对象时调用的函数,它可以给对象进行初始化。构造函数与类名相同,第一个字母大写。一个类中如果没有定义过构造函数,那么该类一定会有一个默认的空参数的构造函数。如果定义了指定的构造函数,那么系统默认的构造函数就没有了,如果还要用到就需要重新定义一次。而且,构造函数不唯一,可以有多个,用于不同的对象进行针对性的初始化。多个构造函数在类中是以重载(后面会讲到)的形式体现的。下面有一些代码:

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)的更多相关文章

  1. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  2. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  3. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  4. 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类

    static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...

  5. java学习之面向对象概念

    思考的两种方式: 举例: 把大象放到冰箱里 一.面向过程 :[打开冰箱->把大象放里面->关上冰箱门]面向过程注重的是过程,也就是(动作[函数]),然后按照动作依次去执行就好了. 代表语言 ...

  6. JAVA学习总结-面向对象

    前言:java面向对象中的知识可以说是整个java基础最核心的部分,不知不觉已经学完快2个月了,是时候复习一波了,刚开始学习的时候被绕的很懵逼,这次总结完毕之后有了很多新的感悟,这就是所谓的每有会意, ...

  7. Java学习(一)--面向对象(一)

    面向对象的思想一直指导者我们软件的分析.设计与开发.java语言是一种面向对象的语言.在学习java之前,先回想一以下向过程和面向对象. 一面向过程 面向过程主张按功能来划分系统需求.每一个功能都负责 ...

  8. Java学习: 面向对象的使用与注意事项

    面向对象的使用与注意事项 面向过程:当需要实现一个功能的时候,每一个具体的步骤都需要亲力,详细处理每一个细节面向对象:当需要实现一个功能的时候,不关心具体的步骤,而是找一个已经具有该功能的人,来帮我做 ...

  9. 程序设计基础·Java学习笔记·面向对象(下)

    Java程序设计基础之面向对象(下) (补充了上的一些遗漏的知识,同时加入了自己的笔记的ヾ(•ω•`)o) (至于为什么分P,啊大概是为了自己查笔记方便(?)应该是("` 3′") ...

  10. 程序设计基础·Java学习笔记·面向对象(上)

    Java程序设计基础之面向对象(上) (自适应学习进度而进行记录的笔记,希望有一些小小的用处吧(^∀^●)ノシ) (新人上路,望多指教,如有错误,望指正,万分感谢(o゚v゚)ノ) 目录 一.面向对象 ...

随机推荐

  1. Linux中文件颜色所代表的属性和颜色

    绿色文件: 可执行文件,可执行的程序    红色文件:压缩文件或者包文件   蓝色文件:目录   白色文件:一般性文件,如文本文件,配置文件,源码文件等    浅蓝色文件:链接文件,主要是使用ln命令 ...

  2. c# 使用泛型类型作为参数

    泛型作为一种经常使用的类型,有时需要在方法之间传递,不了解的话可能会束手无策. 比如我定义一个方法 processList  需要把List<T>  作为参数传入,这时可以这样写 publ ...

  3. C# Cookie

    1  推荐使用 is 或 as 操作符而不是强制 2  编码风格:Tab ——改成两个 C# 文档注释的快捷键  (将配置表压缩,从压缩文件中查找xml配置表 这个是指Unity项目上面)   尽量使 ...

  4. 【leetcode】Valid Sudoku

    题目简述: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board cou ...

  5. 【leetcode】Largest Number

    题目简述: Given a list of non negative integers, arrange them such that they form the largest number. Fo ...

  6. 移动适配请使用比rem等更好的布局方案

      移动端大行其道,rem/em.百分比.响应式方案更是层出不穷,看见周围的伙伴们都在对使用rem和百分比情有独钟,可我却偏不爱,之所以出现如此多的方法,其目的只有一个屏幕适配.   屏幕适配顾名思义 ...

  7. js获取url以及截取后边所带参数

    var shopId = ""; function GetRequest() { var url = location.search; //获取url中"?"符 ...

  8. C#开发中常用方法2------json转DataTable

    /// <summary>/// 将json转换为DataTable/// </summary>/// <param name="strJson"&g ...

  9. 递归 CTE

    公用表表达式 (CTE) 具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE.递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式. 当某个查询引用递归 ...

  10. mongoose数据库连接和操作

    var mongoose = require('mongoose') mongoose.connect('mongodb://localhost:27017/hometown'); var db = ...