栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

Java-2面向对象

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java-2面向对象

《Java面试突击》--leetbook

概念:

面向过程:分解成步骤并执行函数--数据分离-优点性能高不需要实例化,缺点不容易复用维护和扩展

面向对象:分解成对象-描述步骤中的行为,对象属性行为关联

优点:封装,继承,多态特性

维护,复用,扩展,低耦合系统,缺点实例化性能没有过程高

对象:现实世界的实体,有状态和行为

状态:数据域的集合

行为:方法的集合

类:定义同一类对象的结构,创建对象成为实例化

对象和类:

对象是类的具体实例,独有状态和行为

类是具有相同特征的对象的抽象,用来定义对象的状态和行为

一个类创建多个对象

Classes and Objects in Java - GeeksforGeeks

构造方法:

构造方法-初始化

类名称相同-可以重载(不同的参数列表)

new 调用构造方法(成为方法而不是函数)

默认构造方法--没有参数,存在不需要显性声明的对象的时候就需要默认构造方法

没有返回类型包括void

构造方法的作用-如何调用-初始化-new

是否可以重载-yes

什么是默认构造方法-什么情况下会有默认构造方法-无参数-存在需要声明无参数对象

构造方法是否有返回值-no

静态和实例

类成员-方法,成员变量可以是静态或者实例的

static修饰的是静态的否则是实例的

1.外部调用

外部调用静态的类成员的时候,可以类名或者被对象调用

Object.method(), obj.method()

而外部调用实例,只能使用对象名

obj.method()

  String s = String.format("My Company name is %s", str);
  System.out.println(s);

String, str都可以调用format, 但是length(),只能str

但是静态的增加可读性,全部使用类名调用

内部访问

静态方法只能访问静态成员,不能访问实例成员

实例方法既可以访问实例的类成员也可以访问静态的

因此public static void main(String[] args){} 只能调用静态的, static int a =1;

实例的必须创建对象才存在,因此静态的只能调用静态的

比如length依赖具体的实例,所以应该为实例的成员

而format, math都不依赖于实例,因此都是静态的

?从外部调用类成员,静态和实例的成员分别通过什么调用---类名和实例, 实例

?从内部访问类成员,实例和静态方法是否都可以访问静态的--对, 但是静态不可以访问实例的;

初始化块

Java 初始化块_w3cschool

public class Solution {
  static {
    System.out.println("Initializer 1");
  }
  
  public static void main(String[] args){
    String str = "123";

    System.out.println(str);

  }

}

因为Solution.java直接运行,所以其实是没有实例化的,直接调用的是静态的main方法,正好也是静态的的方法,因此初始化块也应该用静态的,加上大括号,里面是初始化块语句

类第一次被加载的时候执行静态初始化块然后执行main方法,实例初始化块则是每一次被创建的时候执行;

它用于初始化一个类。每个对象执行一个实例初始化器,而当类定义被加载到JVM中时,只对一个类执行一次静态初始化器。

注意,实例初始化程序在实例上下文中执行,并且关键字this在实例初始化程序中可用。

//initializer
int num;
{
    this.num = 101;
}

 关键字this

关键字this代表当前对象的引用,

当属性名和参数名一样的时候,this.var = var

否则就可以省略掉

https://www.yiibai.com/java/this-keyword.html

this默认添加到方法中调用其他方法的前面

3. this调用其他构造函数

class Student {
    int rollno;
    String name, course;
    float fee;

    Student(int rollno, String name, String course) {
        this.rollno = rollno;
        this.name = name;
        this.course = course;
    }

    Student(int rollno, String name, String course, float fee) {
        this(rollno, name, course);// reusing constructor
        this.fee = fee;
    }
}

实际上就是复用其他的构造函数,this(参数),这样就可以减少代码,相当于python的super

this代指的是对象本身,因此不能用于静态方法,初始化块中

又或者

class Square{
    int side;

    public Square(){
        this(1);
}

    public Square(int side){
    this.side = side;
}

}

这样子相当于无参数的时候可以给一个默认值1,这样初始化没有参数也可以;

因为如果存在new Square(),就必须有默认构造函数,

关键字this的含义:

代表当前对象的引用,当前对象指的是调用类中的属性或方法的对象

this在方法和构造方法中代表引用对象的属性,也可以在构造方法中调用其他构造方法

不可以用于静态方法-因为是对象的引用

可见性修饰符和数据域封装

可见性修饰符public表示类成员可以控制对类成员的访问。

包括public-----  类成员可以在任何类中访问-不同包也可以

private---- 只能访问自身类中的成员

protected --继承与多态

默认修饰符---同一个包里面任何类中访问-包内访问

Java成员详解-Java成员概念大全_刘金宝_Arvin的博客-CSDN博客_java 成员

java基础:4.2 对象和类(二)、数据域封装、this - Aurora_l - 博客园

数据域设为私有域--private int radius = 1;

通过get 和 set来访问和修改;

字符串:

Java包括String, StringBuffer, 和StringBuilder

String:使用数组存储字符串的内容,使用关键词final修饰,因此数组内容不可变

因此每次修改都会创建新的String对象,导致效率低下且占用大量内存空间

StringBuffer 和 StringBuilder

使用数组存储但是没有final修饰,内容可变,修改不会创建新的对象,

StringBuffer: 对定义的方法或者调用的方法使用关键词synchronized修饰,同步锁会影响效率,但是多线程StringBuilder会不安全

StringBuilder没有同步锁

继承

父类-派生子类--继承。子类一般拥有更多类成员

如果没有指定继承,父类默认为object

Java 继承 | 菜鸟教程

public class Mouse extends Animal { 
    public Mouse(String myName, int myid) { 
        super(myName, myid); //必须第一个语句
    } 
}
class Animal {
  String color = "white";
}

class Dog extends Animal {
  String color = "black";

  void printColor() {
      System.out.println(color);// prints color of Dog class
      System.out.println(super.color);// prints color of Animal class
  }
}

可以

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1040080.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号