zoukankan      html  css  js  c++  java
  • java 基础回顾1

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

    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,保证对象唯一性,上锁,进去一个访问 就不能进第二个,

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

  • 相关阅读:
    vue3配置rem适配
    webPack转vite2
    vite ant Design vue按需加载
    Vue3 +Vite+ts
    vite 2.0 动态引入加载图片
    Vue3使用vmdeditor自定义锚点
    ThinkPHP6 路由
    DIV+CSS 文本属性
    DIV+CSS 入门篇 CSS选择器
    如何不使用react,也能解析jsx?
  • 原文地址:https://www.cnblogs.com/shaozhiqi/p/4670457.html
Copyright © 2011-2022 走看看