整理----加自己理解------网上参考-----

java封装理念

一 概念:

隐藏对象的属性和实现细节,仅供对外提供公共访问方式。

二 好处

1)  将变量隔离

2)  便于使用

3)  提高重用性

4)  提高安全原则

三 使用原则

将不需要对外提供的内容都隐藏起来。

把属性都隐藏,仅公共方法可访问。

四 使用实例

public class Person {
     private int age;
     public  void setAge(int Age){
          if(Age>0&& Age<130){
            //  age=age;局部变量与成员变量同名,所以这两的两个age都为局部的
              //函数默认现在局部中找变量,然后再成员定义中找,,,
              age=Age;
              speck();
          }
       else
              System.out.println("你输入的年龄有问题");
    }
  public  int getAge(){
         return age;
     }
     public  void speck(){
         System.out .println("age="+age);
     }
}

 public class PersonDo{
    public static void main(String args[]){
        Person a= new Person();
        Person b= new Person();
        a.setAge(20);
        b.setAge(-20);
    }
}

这里age私有化后,类以外的方法将无法访问age
只能用这个类中其他共有的方法来访问它,如setAge/getAge等
值得注意的一点是;私有是封装的一种表现形式而已。
通过-20可知可以在对外提供的访问方式中进行逻辑判断,以增强程序的健壮性。

Java构造函数

特点

1函数名与类名相同

2不用定义返回值类型

3不可写return语句

(5可私有化)

4 一个类中可定义多个够构造函数(构造函数的重载

作用

1 建立一个对象就会调用与之对应的构造函数

2 可用于对对象进行初始化

当类中定义了构造函数后默认的构造函数就没有了

注意:

当在类中遇到

{

System.out.println(“dddfdfdf”);

Speck();

}

称作构造代码块

作用:

1给对象初始化

2对象一建立就运行,优先于构造函数

与构造函数区别

给所有统一初始化

Java中的This

*可用来区分局部变量与成员变量

*当定义类的功能时,该函数内部要用到调用该函数的对象时没用this

*本类内部使用了本类对象

图,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

*构造函数调用别的构造函数,一般不允许互相调用

图-------------------------------------

如上面程序中的的age 若在传参位置定义int age 这个age若要去成员区分

可表示为this.age=age;

1 首先他表示某个对象

2 只能出现在实例方法中,不能出现在类方法中

//实例方法不加关键字static,类方法则有static

3 默认格式this.成员变量

4 实例

class A{

int x;

static int y;

void f() {

this.x=100;//this表示使用x的当前对象(上面的a对象),当有对象调用方法f时,就将100赋值给当前对象的变量x.

A.Y=200; //静态成员变量只能有类名来应用。

}

}

当一个对象调用方法时,方法中的实例成员变量就是指分配给该对象的实例成员,所以通常省略this(上述speck方法中可在age前加this,speck也可加this)

static变量则和其他对象共享  所以通常在实例方法中省略类名如这里的A

值得注意的是:当局部变量名和实例成员变量名相同时 this和类名就不能省略

另外this不能出现在类方法中是应为,类方法可以通过类名直接调用,这时可能还没有任何对象产生

***************this代表所在函数所在对象的应用************

***************即:那个对象访问this 所在的方法,this就代表那个对象*****

Static关键字

用法:用与修饰成员变量,和成员函数(称静态变量/静态方法或类变量/类方法)

一些对象所共性的值,如中国人的国籍,可以定义为static(static String contruy = “中国”;)

(反之特有的特性及一些方法随对象存储。(称实例变量/方法叫实例方法)(String name ;))

定以后除了可被对象调用外,还可直接被类名调用

静态修饰的内容被对象所共享,不用再每个对象创建时都建立一个,只创建一次被其他对象共用。并且在内存中单独有他的空间方法区中(方法区中有方法,和一些数据),而不是在随每个对象放在对应的堆内存中。

static特点总结:

1)  随着类的加载而加载

类的消失而消失

2)  优先于对象存在

3)  被所有对象所共享

4)  可直接被类名所调用

注意

1)静态方法只能访问静态成员变量,静态成员函数。且静态方法中不能出现this,super等关键字(因为静态优先与对象存在,所以不能有this(this代表..对象),)

2 )非静态方法可访问静态成员、静态方法。当然也可访问非静态成员和方法。

Static优点

3)可以发现主入口函数是静态的

对于对象间共享的数据进行单独的存储,节省空间,没有必要为每个对象都存储一份

static缺点:

生命周期过长。访问出现限制,静态只能访问静态。

Static 何时使用

1)  静态变量,上面提到的共享数据时

2)  静态方法,当方法内部没有用到类中的非静态成员时

3)  每个应用程序中都有共性的功能,可以将这些功能进行抽取,独立封装,以便复用。

4)  图  密码,,,,,,,,,,,,,,

静态代码块

特点:随着类的加载而加载,用于给类进行初始化

结构

Static

{要初始化的内容}

Main主函数

是一个特殊的函数,是程序入口,被jvm(虚拟机)调用。

定义

1)  public 代表访问权限最大

2)  static 说明主函数随着类的加载已经存在了

3)  void 主函数没有具体的返回值

4)  main不是关键字 但是一个特殊的单词,可被jvm识别

5)  (String [] args)函数的参数,参数类型是一个数组,数组中的元素师字符串。即字符串类型的数组。只有args可改

6)  主函数是固定类型的:被jvm识别

7)  可被重载

8)  Jvm 在调用主函数时插入的是new String[0];

结构;Public static void main(String args[]){  }

单例1 饿汉式

决绝一个类在内存只存在一个对象.

那么如何确保唯一性呢

1)  为了避免其他程序过多的建立该类对象,先禁止其他程序建立该类对象。

2)  为了你他程序可以访问到该类对象,只好在本类中定义一个对象。

3)  为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。

代码实现

1)  将构造函数私有化

2)  在类中创建一个本类对象

3)  提供一个方法可以获取该对象

实例

class single{

private int num;

public void setNum(int num)

{ this.num = num;}

public int getNum()

{return num;}

private single(){}//私有化构造函数

private static single  s= new single();//创建本类对象

//对外提供方法,获取这个本类对象

public static single getInstance(){

return s;

}

}

class singleDo{

public static void main(String [] args) {

single s1 =single.getInstance();

single s2 =single.getinstance();

s1.setNum(39);

System.out.println(s2.getNum());
 
}

}

//结果:39

可见s1与s2指的是同一个对象

单例二 懒汉式

只需对上述类最如下修改

private static single s=null;

private single(){}

public static single
getInstance(){

If(s==bull)

s=nuw single();

return s;

}

二者区别 :

单例1(饿汉)

饿汉:single类一进内存,就已创建好了对象

单例2

懒汉:single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象

开发一般用单例1饿汉式(安全)

单例2 当多个程序访问时容易产生多个对象,而不是一个对象,因此存在隐患。

所以单例2 懒汉:public
static synchronized single getInstance(){}

// synchronized,保证对象唯一性,上锁,进去一个访问 就不能进第二个,

//除非第一个访问结束。

java 基础回顾1的更多相关文章

  1. 四、Android学习第四天——JAVA基础回顾(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 四.Android学习第四天——JAVA基础回顾 这才学习Android的 ...

  2. 【Spring学习】【Java基础回顾-数据类型】

    Java基础回顾过程中,之前对于Java相关基础知识都是从这个人的博客看一些,那边的内容看一下,觉得不够系统化,决定用xmind脑图的形式,将Java基础知识回顾的作为一个系列,当前正在做的会包含: ...

  3. Java基础回顾_第二部分_Java流程控制

    Java基础回顾_第二部分 Java流程控制 Scanner对象(扫描器,捕获输入) import java.util.Scanner; public class Demo01 { public st ...

  4. Java基础回顾_第一部分

    Java基础回顾 基本数据类型 数值类型 什么是字节? 位(bit):是计算机中数据的最小单位 字节(byte):是计算机中数据处理的基本单位,习惯上用大写字母B来表示 1 B = 8 bit 字符: ...

  5. 1、java基础回顾与加强

    一.    基础回顾 1   集合 1.1  集合的类型与各自的特性 ---|Collection: 单列集合 ---|List: 有存储顺序, 可重复 ---|ArrayList:    数组实现, ...

  6. Java基础回顾

    学习基础背景:Acmer.有C/C++基础 以[Java语言程序设计(基础篇)]第10版为参考(感谢YJJ的推荐),列出部分知识点,注意思考背后的原因和好处坏处. [14-16章——关于可视化编程的章 ...

  7. java基础回顾(2)

    java中只有两种类型:基础类型.引用类型 8中基本类型:byte  short int long float double char boolean,其中byte类型取值范围[-2^7~2^7-1] ...

  8. java基础回顾之IO

    Java的IO 是Java运用重要部分之一,涉及到的内容也比较多,容易混淆,一段时间不用,可能就会遗忘,要时常回顾记忆一下: (图片来源于网络) Java 流在处理上分为字符流和字节流. 字符流处理的 ...

  9. Java基础回顾一

    1.JDK和JRE的区别: JDK:java开发工具包,提供java的开发环境和运行环境 JRE:java运行环境,为java的运行提供所需要的环境 2. ==和qruals的区别: == 基本类型: ...

  10. 输出 n=6 的三角数字阵(JAVA基础回顾)

    package itcast.feng; import java.util.Scanner; //需求:输出 n=6 的三角数字阵 //1 //2 3 //4 5 6 //7 8 9 10 //11 ...

随机推荐

  1. [bzoj1468][poj1741]Tree_点分治

    Tree bzoj-1468 poj-1741 题目大意:给你一颗n个点的树,求树上所有路径边权和不大于m的路径条数. 注释:$1\le n\le 4\cdot 10^4$,$1\le m \le 1 ...

  2. Linux统计行数命令wc(转)

    Linux wc命令用于计算字数. 利用wc指令我们可以计算文件的Byte数.字数.或是列数,若不指定文件名称.或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据. 语 ...

  3. LeetCode 122 Best Time to Buy and Sell Stock II(股票买入卖出的最佳时间 II)

    翻译 话说你有一个数组,当中第i个元素表示第i天的股票价格. 设计一个算法以找到最大利润. 你能够尽可能多的进行交易(比如.多次买入卖出股票). 然而,你不能在同一时间来多次交易. (比如.你必须在下 ...

  4. OllyDbg 使用笔记 (七)

    OllyDbg 使用笔记 (七) 參考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 演示样例程序下载:http://pan.baidu.com/s/1gvwlS 暴力破解 观察这个程 ...

  5. HTML导航 - 点击更改背景

    步骤一: 在须要添加效果的<li>标签中添加onclick事件:<li onclick="setcurrent(this)"> 步骤二: 加入JS代码: f ...

  6. Spring学习笔记——Spring事务仅仅对执行时异常回滚

    我们在使用Spring时候一般都知道事务在遇到异常的时候会回滚.岂不知Spring的事务默认仅仅有在发生执行时异常即:RunTimeException时才会发生事务,假设一个方法抛出Exception ...

  7. How to use shared model by git in sql source control of red gate

    1.clone the git repository for datbase 2.open sql source control window and select the target databa ...

  8. 使用powershell来设置时间

    https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/set-date?view=powers ...

  9. codeforces round #420 div2

    A:暴力枚举 模拟 #include<bits/stdc++.h> using namespace std; ; int n; int a[N][N]; int main() { scan ...

  10. Anaconda/kickstart

    http://fedoraproject.org/wiki/Anaconda/Kickstart/zh-cn