java的类和对象

类和对象

## 面向对象 在java里一切皆视为对象,对象具有属性和方法,对象具有唯一性,对象是某个类的实例 ## 面向对象的三大特性 继承,封装,多态 ### 继承 继承通过extends关键字来实现 继承就是子类可以继承父类的属性和方法,比如A类和B类有一些共同的属性和方法,如果写两个类就会造成代码的冗余量高,代码重复,所以我们可以将A和B共同的属性和方法都放在C类里,然后A类和B类去继承C类 java class A{ public String name="A"; } class B extends A { public int age=18; } //B继承了A 这就是继承

封装

封装就是在于保护信息,java的基本封装单位是类,类里边提供了私有和共有的访问模式,私有的属性和方法只能通过该类的成员代码来访问。

多态

多态即是一个接口,多个方法,当父类中的属性和方法被子类继承后,可以具有不同的属性和表现方式,多态性允许一个接口被多个同类使用

类的定义

java里的类是通过class关键字来定义的

java class demo{ //这样就定义了一个类 public static String name; //定义了一个属性 public static int getAge(){ //定义了一个方法 return 18; } } ### 关键字 以下是定义类和类的属性和方法的关键字

public 公共的,可以被成员访问的

   abstract  用来修饰抽象类,如果类被abstract修饰则表示抽象类,抽象类不能被实例化,但是可以有方法,继承该抽象类的所有子类必须实现该类的
   所有抽象方法

   final 如果类被final修饰则不允许被继承

   extends 继承其他类

   private 私有的 不能被继承

   static 静态

   protected 私有的 可以被继承

   final 定义属性时视为
   常量,不可以被修改

成员方法

成员方法可以定义类的行为,一个完整的方法通常包括,方法名,方法主体,方法的返回类型,方法的参数

## this this是指针,它可以调用当前类的属性和方法,也可以通过this()相当于当前类的构造方法 ```java //类实战 import java.util.Calendar;

public class ClassDemo { private boolean Sex; public String name; public int age; public boolean isSex(){ return this.Sex; } public void setSex(boolean sex){ this.Sex=sex; } public static void main(String [] args){ ClassDemo one=new ClassDemo(); one.name="张三"; one.age=18; one.setSex(true); String isMan=one.isSex()?"男":"女"; System.out.println("姓名:"+one.name+"年龄"+one.age+"性别"+isMan); ClassDemo two=new ClassDemo(); two.name="凤霞"; two.age=16; String isWoMan=two.isSex()?"男":"女"; System.out.println("姓名:"+two.name+"年龄"+two.age+"性别"+isWoMan); } }

```

创建对象

对象是类的实例化,对象具有状态和行为,java里的对象是有声明周期的,创建,使用,清楚 ### 显式创建 ```java class Demo{ public static void main(String [] args){ Demo demo=new Demo();

//这是一种显式创建对象的一种方法
    // 除了这种还有通过java.lang.Class.newInstance创建
}

} ``` 无论是哪种方法创建对象,java虚拟机在创建一个对象时都要经过:给对象分配内存,将对象的实例变量自动初始化为其变量类型的默认值,初始化对象给实例变量赋予正确的初始值。 java里的每个对象都是相互独立的,在内存中占有独立的内存地址,并且每个对象都有自己的生命周期,当一个对象的生命周期结束时,对象就变成了垃圾,由java虚拟机带的垃圾回收处理

匿名对象

匿名对象就是直接通过new 类名().方法 来使用类的方法,而且匿名对象一般只使用一次,且匿名对象只在堆里来开辟空间,不存在栈的引用 java new Demo();//这就是匿名对象 //且匿名对象只使用一次就等待被垃圾回收机制回收

访问对象的属性和方法

可以直接通过 对象名.属性/方法 来访问

```java String student=new Student(); System.out.println(student.name);

//访问对象的属性或者方法,对象一定要被实例化,如果不实例化而去直接使用则会报错 ```

对象的销毁

对象使用完之后就需要对其进行清楚,在创建对象时,用户必须使用new操作符为对象分配内存。不过在清楚内存时由系统自动进行垃圾回收

一个对象被,垃圾回收有两种情况

```java Object o=new Object(); //当超过对象o的作用范围时,这个对象将被视为垃圾

o=null; //当对象被赋值为null时被视为垃圾。

``` 之前提过Object类是所有类的父类,Object类中提供了一个finalize方法,因此任何java类都可以覆盖这个方法,在这个方法中进行释放对象所占有资源的操作

在堆内村里每个对象都可能处于以下三种状态

  1. 可触及状态:只要对象还在被引用就处于可触及状态。
  2. 可复活状态:当程序不再有任何变量引用该对象时,对象就进入可复活状态,在这个状态下,垃圾回收器会准备释放它的内存,在释放之前,会调用它及其他处于可复活状态的对象的finalize方法,这些finalize方法可能使该对象重新转到可触及状态
  3. 不可触及状态,当执行完所有的finalize方法后,如果没有使对象转到可触及状态,垃圾回收器会进行回收占用的内存。

修饰符解释

private 只能被该类自身的方法访问,不能被其子类访问
friendly 这个修饰符是默认的,只能被同一个包中的类访问
protected 可以被当前类访问,在同一个包中的其他类访问,在其他包中的该类的子类访问
public可以被任意类访问

static 静态

被static修饰的可以被称为:静态变量/静态类/静态方法


  静态方法不能调用非静态成员否则会报错

  在当前类的内部,可以在任何方法里访问静态变量,其他类需要通过类名.静态成员

  在当前类,如果是非静态方法可以直接访问实例变量,在静态方法里需要通过类的实例对象来进行访问

  静态变量可以被所有类的实 例共享


  静态方法不需要通过实例就可以调用,但是静态方法里不能使用this关键字和super,但是可以访问当前类的静态变量和静态方法

  静态代码块,静态代码块可以在类中的任何地方,但是不能存在任何方法体中,非静态代码块是在创建对象时直接执行的

java static { } //静态代码块 {} //代码块 ### 静态导入 正常的导入通过import ,静态导入是通过import static 进行导入 但是import static 只用于导入指定类的某个静态成员变量,方法或者全部的静态成员变量,方法

java import static com.Demo.*; // 导入包com下的Demo类的所有静态成员变量,方法 import static com.Demo.test; // 导入包com下的Demo的静态方法test

final

final 用于修饰常量,希望被重写发的方法,不希望被继承的类

final修饰的变量,不能被重新赋值

final 修饰的方法不能被重写

final 修饰的类不能被其他类继承

mian方法

main方法是java的入口方法,程序在运行的时候第一个执行的就是main方法,一个类只能有一个main方法 ,main方法只接口一个字符串参数(这个参数是在命令行运行的时候命令行传入的),main方法没有返回值只能使用void,mian方法是静态的如果要调用当前类的其他方法只能通过实例调用 java public class Test { public static void main(String [] args){ //这里的args就是参数 } }

方法的可变参数

因为在实际的开发中,根据业务场景,方法的参数个数是不确定的,所有java有了可变参数

java public void print(String ...names){ System.out.println("参数的个数有"+names.length); for(int i=0;i<names.length;i++){ System.out.println(names[i]); } } // names这时候是一个数组,它包含了传递的参数

类的构造方法

在类里边与类名一样的方法,就是当前类的构造方法,而且类的构造方法不能被static 和final等关键词修饰。 构造方法是在new 的时候执行的 可以传递参数。如果不在类里写构造方法那么java会自动有一个构造方法

java public class demo{ public demo(){ //demo就是demo类的构造方法 } }

析构函数(finalize)

构造函数是当对象脱离其作用域时,系统自动执行析构方法。其实就是当我们用完对象之后不再进行引用,垃圾回收器会执行finalize方法,但是垃圾回收器何时执行以及执不执行都是不确定的,如果垃圾回收器在执行finalize方法的时候出现异常,不会报错,程序继续运行。 java public class demo{ public static void main(String [] args){ count ct1=new count(); System.out.println(ct1.get_counts()); count ct2=new count(); System.out.println(ct2.get_counts()); ct2=null; try{ System.gc(); // 清理内存 Thread.currentThread().sleep(1000); // 延时1000毫秒 System.out.println("数量:"+ct1.get_counts()); // 输出 }catch (InterruptedException e){ e.printStackTrace(); } } } class count{ private static int counts=1; public count(){ this.counts++; } public int get_counts(){ return this.counts; } protected void finalize(){ this.counts--; System.out.println("销毁"); } }

因为finalize的不稳定,在高版本java中已经被删除,如果我们想提示系统尽快垃圾回收,使用System.gc方法或者Runtime.gc()方法

包(package)

随着项目的实际开发,我们需要的类越来越多不便于管理,所以有了包这个概念。

### 定义包 使用package关键字定义包 java //package 包名.类名 package com.demos; //每个文件只能有一个package // 且package语句要放在文件的第一行

导入包

导入包使用import关键字 java import 包名.类名; //这是导入单个类 import 包名.*; //这是导入包下的所有i类

系统包

java给我们提供了一些系统包

lang 核心类库,包含了基本数据类型,数学函数,字符串处理,异常处理和线程类

 io 输入输出类库,夺取文件等

 awt 构建界面,图形界面组件,用户交互

 image 操作图片

 peer 是java在不同的平台上运行

 net 实现网络功能的类库

 reflect 反射对象的工具

 util.zip 压缩工具

 awt.datatransfer 剪贴板,字符串发送等

 sql 

 rmi 提供远程连接

 security 安全
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值