• Java初学总结


    1.对象的比较

    •    “==”操作符用于比较两个对象的内存地址值是否相等
    •    equals() 方法用于比较两个对象的内容是否一致

     如下列:

     1 public class text3 {
     2 
     3     public static void main(String[] args) {
     4         String str1 = new String("java");
     5         String str2 = new String("java");
     6         String str3 = str2;
     7         
     8         if(str1 == str2)
     9         {
    10             System.out.println("str1 == str2");
    11         }
    12         else
    13         {
    14             System.out.println("str1 != str2");
    15         }
    16         if(str2 == str3)
    17         {
    18             System.out.println("str2 == str3");
    19         }
    20         else
    21         {
    22             System.out.println("str2 != str3");
    23         }    
    24 
    25     }
    26 
    27 }

    运行结果为:

    str1 != str2
    str2 == str3

    str1与str2的内容完全一样,为什么会不等于呢? 这两个对象指向不同的内存空间,所以它们的内存地址是不一样的。用“==”比较的是内存地址值。

    如要比较内容,可用“equals”。

     1 public class text3 {
     2 
     3     public static void main(String[] args) {
     4         String str1 = new String("java");
     5         String str2 = new String("java");
     6         String str3 = str2;
     7         
     8         if(str1.equals(str2))   
     9         {
    10             System.out.println("str1 == str2");
    11         }
    12         else
    13         {
    14             System.out.println("str1 != str2");
    15         }
    16         if(str2.equals(str3))
    17         {
    18             System.out.println("str2 == str3");
    19         }
    20         else
    21         {
    22             System.out.println("str2 != str3");
    23         }    
    24 
    25     }
    26 
    27 }

    运行结果为:

    str1 == str2
    str2 == str3

     2.两种String对象的声明方式到底有什么不同?

            String str1 = new String("java");

            String str2 = "java";

    如下例:

     1 public class text3 {
     2 
     3     public static void main(String[] args) {
     4         String str1 = "java";
     5         String str2 = new String("java");
     6         String str3 = "java";
     7                 
     8         System.out.println("str1 == str2 ? -->"+(str1 == str2));
     9         System.out.println("str1 == str3 ? -->"+(str1 == str3));
    10         System.out.println("str3 == str2 ? -->"+(str3 == str2));
    11         
    12     }
    13 }

    运行结果:

    str1 == str2 ? -->false
    str1 == str3 ? -->true
    str3 == str2 ? -->false

    str1与str3相等,则证明str1与str3是指向同一个内存空间的。

    String对象的内容一旦声明则不能轻易改变。

    如果想改变一个String对象的值,则第一步要做的是先将原有的String引用断开,之后再开辟新的内存空间。

    用new关键字开辟String对象的内存空间的话,则实际上就开辟了两个内存空间。

    3.类对象的产生

    格式:

    类名  对象名 = new 类名();

    创建属于某类的对象,需要通过如下两个步骤来实现:

    1. 声明指向“由类所创建的对象”的变量
    2. 利用new创建新的对象,并指派给先前所创建的变量

    举例:创建Person类的对象

    Person p;                    //先声明一个Person类的对象p
    p = new Person();     //用new关键字实例化Person的对象p

    当然也可以用如下方式来声明变量:

    Person p = new Person() ;     // 声明Person对象p并直接实例化此对象

          对象只有在实例化之后才能被使用,而实例化对象的关键字就是new。

    4.访问对象中某个变量或方法

    访问属性:   对象名称。属性名
    访问方法:   对象名称。方法名()

    如:想访问Person类中的name和age属性

    p.name;        //访问Person类中的name属性
    p.age;            //访问Person类中的age属性

    5.类的属性封装(private)

    要设置或取得属性值,则只能用setXxx()getXxx()方法,这是一个明确且标准的规定。

    封装类中的属性或方法:

    封装属性:  private 属性类型 属性名
    封装方法:  private 方法返回类型  方法名称(参数)

    加入一些setXxx()getXxx()方法,主要用来设置和取得类中的私有属性,解决封装问题,如下列:

     1 class Person
     2         {
     3             private String name;
     4             private int age;
     5             void talk()
     6             {
     7                 System.out.println("wo shi:  "+name+", jinnian: "+age+"sui");
     8             }
     9             
    10             public void setName(String str)
    11             {
    12                 name = str;
    13             }
    14             
    15             public void setAge(int a)
    16             {
    17                 if(a > 0)
    18                     age = a;
    19             }
    20             
    21             public String getName()
    22             {
    23                 return name;
    24             }
    25             
    26             public int getAge()
    27             {
    28                 return age;
    29             }
    30         }
    31         
    32 public class text17 {
    33 
    34     public static void main(String[] args) {
    35         
    36         Person p = new Person();
    37         p.setName("zhang san");
    38         p.setAge(-25);
    39         p.talk();
    40 
    41     }
    42     
    43 }

    运行结果:

    wo shi:  zhang san, jinnian: 0sui

     6.内部类

    定义内部类的格式:

    标示符  class  外部类的名称
    {
         //外部类的成员
         标示符  class  内部类的名称
        {
              //内部类的成员
        }   
    }

    外部类是无法找到内部类中所声明的属性,而内部类则可以访问外部类的属性。

    用static声明的内部类则变成外部类,但是用static声明的内部类不能访问非static的外部类属性。(《Java基础教程》P193)

     7.类的继承

    类的继承格式:

    class  父类                 //定义父类
    {
    }
    
    class  子类  extends  父类   // 用extends关键字实现类的继承
    {
    }

    在java中只允许单继承,不允许多重继承,也就是说一个子类只能有一个父类,但java中却允许多层继承

    多层继承如:

    class A
    {
    }
    class  B  extends  A
    {
    }
    class  C  extends  B
    {
    }

    子类对象在实例化时会默认先去调用父类中的无参构造方法,之后再调用本类中的相应构造方法

    super 主要的功能是完成子类调用父类中的内容,也就是调用父类中的属性或方法

    用super调用父类中的构造方法,只能放在程序的第一行。

    super调用属性或方法:

    super.父类中的属性;
    super.父类中的方法();

    8.this与super的比较

    this

    • 1.表示当前对象
    • 2.调用本类中的方法或属性
    • 3.调用本类中的构造方法时,放在程序首行

    super

    • 1.子类调用父类的方法或属性
    • 2.调用父类中的构造方法时,放在程序首行

    从上表中发现,用super或this调用构造方法时都需要放在首行。所以,super与this调用构造方法的操作时不能同时出现的

    9.抽象类定义规则

    • 抽象类和抽象方法都必须用abstract关键字来修饰
    • 抽象类不能被实例化,也就是不能用new关键字去产生对象
    • 抽象方法只需声明,而不需实现
    • 含有抽象方法的类必须被声明为抽象类,抽象类的子类必须复写所有的抽象方法后才能被实例化,否则这个子类还是个抽象类

    10.final关键字

    在Java中声明类、属性和方法时,可使用关键字final来修饰。

    • final标记的类不能被继承。
    • final标记的方法不能被子类复写。
    • final标记的变量(成员变量或局部变量)即为常量,只能赋值一次。


    微信公众号: 猿人谷
    如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
    如果您希望与我交流互动,欢迎关注微信公众号
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

  • 相关阅读:
    CDR
    xshell鼠标文本设置
    .NET多线程学习之龟兔赛跑
    js传“+”或“&”到后台变空值的问题
    Java递归读取文件夹下所有文档
    破解Myeclipse10找不到Commonplugins文件夹
    Java下载文件
    根据给定日期判断上一旬的开始结束日期
    查看Tomcat内存并调整Tomcat内存
    Could not parse mapping document from input stream
  • 原文地址:https://www.cnblogs.com/heyonggang/p/3075747.html
Copyright © 2020-2023  润新知