JavaSE类和对象

一、面向对象与面向过程

1)面向过程:注重过程,不能缺少任何一个环节,扩展和维护起来比较麻烦。

2)面向对象:主要依靠对象之间的交互完成,并不注重过程。

3)类似于:洗衣服。面向过程注重于洗衣服的过程,要先打湿衣服再....直到洗衣服结束,一个步骤都不能少;而面向对象则是注重对象,人把衣服扔进洗衣机,放入洗衣液,打开洗衣机即可,不会在乎洗衣机是如何洗衣服的。

4)面向对象和面向过程都是一种思想,而不是一种语言。

二、类

1)类的定义采用大驼峰,包含成员变量和成员方法。

2)public修饰的类名必须和文件名相同

3)类的实例化实现:类名 对象=new 类名()。new实例化的对象都存储在堆上。

4)当成员变量没有初始化时,都有默认值(例如:引用类型->null,int->0,double->0.0,boolean->false,char->'\u0000'等等)。

5)一个类可实例化多个对象。

三、this引用

this应用:指向当前对象,在成员方法中对所有成员变量的操作,都是通过this引用去访问的。

1、this引用的三种用法:

(1)this.成员变量

(2)this.成员方法

*注意:此处的成员变量和成员方法只能是普通的,而不能是静态的

(3)this(构造方法)

四、构造方法

构造方法:名字必须与类名相同;没有返回类型;在创建对象时自动调用,并且在对象的生命周期内只调用一次;构造方法可以重载。

1、无参构造方法->编译器会默认生成

public 类名(){...}

2、带参构造方法->用户自己定义,此时编译器就不会生成无参构造方法

public 类名(参数){...}

3、在构造方法中,能够用this调用其他构造方法

eg:可以在无参构造方法中调用带参构造方法,但是this.(...)语句必须是第一句;也不能形成环,在无参中调用带参,又在带参中调用无参。

五、封装

面向对象程序三大特性:封装、继承、多态(不代表只有这三种特性)。

1、封装:隐藏对象的属性和实现细节(private),仅对外公开接口来和对象交互。

2、访问限定符

范围privatedefaultprotectedpublic
同一包中的同一类yesyesyesyes
同一包中的不同类yesyesyes
不同包中的子类yesyes
不同包中的非子类yes

1)protecte主要在继承中使用。

2)default是什么都不写时的默认权限。

3)成员变量一般设置为private,此时要写get和set方法;成员方法一般设置为public。

3、包

包是对类、接口的封装机制的体现,是一种对类或接口等的很好的组织方式。

1)用import导入包,用import static导入包中静态的方法和字段。

当要使用某个包中的许多类时,可以这样写import java.util.*,但是这种写法有时也会产生歧义,eg:

import java.util.*
import java.sql.*
public class Test{
   public static void main(String[] args){
       Date date=new Date();
       System.out.println(date.getTime());
   }
}

此时就会出现编译出错,以为在util和sql中都有Date这个类,就会产生歧义,所以要指明是哪个包下的Date类。

import java.util.*
import java.sql.*
public class Test{
   public static void main(String[] args){
       java.util.Date date=new java.util.Date();
       System.out.println(date.getTime());
   }
}

2)用package声明当前的Java类在哪个包下,若未声明,则会放入默认包中。

3)自定义包

包名尽量是唯一的名字,包名要和代码路径相匹配。

六、static

1、static修饰成员变量

1)称为静态成员或类成员,不属于某一个具体的对象,而是所有对象共享的。

2)可以通过对象去访问(对象.变量名),建议用类名访问(类名.变量名)。

2、static修饰成员方法

1)称为静态成员方法,是类的方法,不是某个对象所特有的。通常静态成员变量是通过静态方法来访问的。

2)可以通过对象调用,但建议通过类名调用(类名.静态方法名(...))。

3)静态方法中没有隐藏的this引用参数,不能在其中访问任何非静态成员变量

3、static成员变量初始化

1)就地初始化

在定义时就直接给初始值

2)静态代码块

七、代码块

用{ }定义的一段代码就是代码块。

1、普通代码块

定义在方法中的代码块(少见)。

2、构造代码块

一般用于初始化实例成员变量。

3、静态代码块

一般用于初始化静态成员变量。static{....}

1)执行时,静态代码块先于实例代码块先于构造方法。

2)无论多少个对象,静态代码块只会调用一次

3)因为静态成员变量是类的属性,所以在JVM加载类时开辟空间并初始化的。类加载:双亲委派模型

4)若一个类中有多个静态代码块,编译时,按先后次序合并。

八、内部类

定义在一个类中的类是内部类,定义在一个方法中的类是外部类。

1)内部类和外部类共用同一个Java源文件,经过编译后,内部类会形成单独的字节码文件(外部类名$内部类名.class

1、成员内部类

1)普通内部类

(1)可以访问外部类中任意成员

(2)若外部类与内部类中有相同名称的成员时,优先访问自己的。如果要访问外部类同名成员,必须是:外部类名称.this.同名成员名字

(3)获取普通内部类对象:

外部类名.内部类名  对象名=外部类对象的引用.new  内部类名()
 

OutClass outclass=new OutClass();

OutClass.InnerClass innerclass=outclass.new InnerClass();

普通内部类对象必须在有外部类对象才能创建。

(4)普通内部类中不能定义静态成员变量,若要定义,只能是static final(常量)

public static final a=1;

(5)普通内部类中有自己的this,也有外部类的this。

2)静态内部类

(1)只能访问外部类中的静态成员,若要访问非静态,要想创建外部类对象。

(2)获取静态内部类对象:

外部类名.内部类名  对象名=new  外部类名.内部类名()

创建静态内部类对象不需要先创建外部类对象。

3)局部内部类(几乎不会用)

(1)定义在方法内部的,只能在方法内部使用,不能被public,static等等修饰符修饰。

(2)有自己独立的字节码文件(外部类名$x内部类名.class,x是整数)。

九、打印对象

有默认的toSring()方法

Student stu=new Student("Jack",18);
System.out.println(stu);

此时并不会如我们所想的打印出对象的信息,所以我们需要自己重写toString()方法。

@Override
public String toString(){
   return "["+name+","+age+"]";
}

idea可以直接右键Generate生成toString方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值