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标记的变量(成员变量或局部变量)即为常量,只能赋值一次。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏C/C++基础

C++11委托构造函数

委托构造函数(Delegating Constructor)由C++11引入,是对C++构造函数的改进,允许构造函数通过初始化列表调用同一个类的其他构造函数,目...

1021
来自专栏小二的折腾日记

day5(面向对象2)

592
来自专栏程序生活

Java学习(二)Static关键字的理解

在讲Static之前,引入一个小题 ? 答案为“c” ? 运行结果 Cannot make a static reference to the non-stat...

3878
来自专栏海天一树

小朋友学C语言(22):循环

C语言有三种循环方式,除了前面讲过的for循环外,还有while和do while两种形式。 (一)while循环 #include <stdio.h> in...

3549
来自专栏云霄雨霁

Java 对象初始化顺序

1798
来自专栏程序员互动联盟

【编程基础】C语言之指针二

指针和数组 C语言的数组表示一段连续的内存空间,用来存储多个特定类型的对象。与之相反,指针用来存储单个内存地址。数组和指针不是同一种结构因此不可以互相转换。而数...

3694
来自专栏一“技”之长

Swift讲解专题七——函数 原

        函数是有特定功能的代码段,函数会有一个特定的名称调用时来使用。Swift提供了十分灵活的方式来创建与调用函数。事实上在Swift,每个函数都是一...

753
来自专栏开发与安全

从零开始学C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)

首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下: template < class _Ty, cl...

3300
来自专栏C语言及其他语言

【每日一题】问题 1117: K-进制数

考虑包含N位数字的K-进制数. 定义一个数有效, 如果其K-进制表示不包含两连续的0.

1072
来自专栏Golang语言社区

【Golang语言社区】前端编程-javascript使用闭包模拟私有属性和方法

最近因为做了一个项目,其中涉及到了js私有方法,这个概念在其语言里面是很常见的,很多语言都有private这个关键字,只要在一个类的前面加上private就表示...

3099

扫码关注云+社区

领取腾讯云代金券