Java——基础语法(中)

简介: Java——基础语法

跳转控制


在Java中,跳转控制有三种方式:break语句、continue语句和return语句。


  • break语句:break语句用于退出循环体或switch语句。当break语句被执行时,程序会跳出当前循环体或switch语句。示例代码:
for (int i = 1; i <= 10; i++) {
    if (i == 5) {
        break;
    }
    System.out.println(i);
}


  • continue语句:continue语句用于跳过本次循环剩余部分,进入下一次循环。当continue语句被执行时,程序会跳过本次循环的剩余代码,直接进入下一次循环。示例代码:
for (int i = 1; i <= 10; i++) {
    if (i == 5) {
        continue;
    }
    System.out.println(i);
}


  • return语句:return语句用于从方法中返回一个值,或者终止方法的执行。当return语句被执行时,程序会立即退出当前方法。如果在方法中返回一个值,则需要在return语句后面加上返回值。示例代码:
public int add(int a, int b) {
    return a + b;
}


总之,Java中的流程控制包括分支结构、循环结构和跳转控制。不同的控制结构有着不同的特点和使用场景,开发者可以根据具体需求来选择合适的控制结构。


4. 类与对象:

Java是面向对象的编程语言,类是面向对象程序设计的基础。类定义了对象所包含的属性和方法,对象则是类的具体实例。Java中可以使用new关键字来创建对象,并且可以通过"."操作符来访问对象的属性和方法。


下面我将详细介绍Java中的类与对象。


类的概念


在Java中,类是用来描述一种具有相同属性和行为的对象集合的模板或蓝图。类可以包含数据成员(属性)和成员方法(行为),用于描述对象的状态和行为。Java中的类使用关键字class进行定义,语法格式如下:

修饰符 class 类名 {
    // 数据成员(属性)
    // 成员方法(行为)
}


其中,修饰符可以省略,类名是标识符,数据成员和成员方法可以有多个。


示例代码:

public class Person {
    // 数据成员
    private String name;
    private int age;
    // 构造方法
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    // 成员方法
    public void sayHello() {
        System.out.println("Hello, my name is " + name + ", I'm " + age + " years old.");
    }
}


对象的概念


在Java中,对象是类的实例化结果,即某个类的具体实体。对象具有该类所定义的属性和行为,并且可以独立于其他对象存在。Java中的对象是通过new关键字创建的,语法格式如下:

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

其中,类名是要实例化的类的名称,对象名是新创建对象的引用变量。示例代码:

Person p = new Person("Tom", 20);
p.sayHello();   // 输出:Hello, my name is Tom, I'm 20 years old.


类的成员


Java中的类成员包括数据成员和成员方法。


  • 数据成员(属性):数据成员用于描述对象的状态,它们是类的实例变量,可以是基本数据类型或引用类型。Java中的数据成员可以使用访问修饰符来限定访问级别,包括public、protected、private和默认访问级别。


  • 成员方法(行为):成员方法用于描述对象的行为,它们是类的实例方法,可以访问和修改数据成员。成员方法也可以使用访问修饰符来限定访问级别。Java中的成员方法可以分为静态方法和非静态方法(实例方法)。


构造方法和析构方法


  • 构造方法:构造方法用于创建对象时初始化对象的状态,它与类名相同,并且没有返回值类型。在Java中,每个类都有一个默认的无参构造方法,如果自定义了构造方法,则必须显式地定义该方法。示例代码:
public class Person {
    private String name;
    private int age;
    // 带参数的构造方法
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    // 默认的无参构造方法
    public Person() {
        this.name = "Unknown";
        this.age = 0;
    }
    // 成员方法
    public void sayHello() {
        System.out.println("Hello, my name is " + name + ", I'm " + age + " years old.");
    }
}


  • 析构方法:Java中没有析构方法,当一个对象不再被引用时,垃圾回收机制会自动回收该对象的内存空间。


封装、继承和多态


  • 封装:封装是面向对象编程中的一种重要原则,它通过控制类成员的访问级别来保护数据安全性,使代码更加健壮、易于维护和拓展。在Java中,可以使用访问修饰符来限定数据成员和成员方法的访问级别,包括public、protected、private和默认访问级别。


  • 继承:继承是一种面向对象编程中的机制,它允许一个类从另一个类继承属性和行为。被继承的类称为父类或基类,继承的类称为子类或派生类。在Java中,使用extends关键字来实现继承关系。子类可以继承父类的公有数据成员和成员方法,并且可以重写父类的方法以实现特定需求。


  • 多态:多态是面向对象编程中的一种特性,它允许不同的对象对同一消息做出不同的响应。在Java中,多态可以通过方法重载和方法重写来实现。方法重载是指在一个类中定义多个具有相同方法名但参数列表不同的方法;方法重写是指在子类中对父类的某个方法进行重新定义。在运行时,Java虚拟机会根据实际调用的对象类型来确定调用哪个方法。


总之,类与对象是面向对象编程的核心概念,它们可以帮助开发者更好地组织代码、封装数据和实现复杂功能。除此之外,封装、继承和多态也是面向对象编程的重要特性,它们促进了代码的重用和扩展,提高了代码的可读性、可维护性和可靠性。


5. 继承与多态:


Java支持继承和多态。继承是一种面向对象编程的重要技术,它可以使一个新的类获取已有类的属性和方法。多态指的是同一个方法在不同情况下表现出不同的行为。


下面我将详细介绍Java中的继承与多态。


继承的基本概念


在Java中,继承是一种面向对象编程的机制,它允许一个类从另一个类继承属性和行为。被继承的类称为父类或基类,继承的类称为子类或派生类。继承使得代码重用更加容易,同时也提高了代码的可读性和可维护性。


Java中使用关键字extends来实现继承关系,示例代码如下:

public class Animal {
    public void eat() {
        System.out.println("Animal is eating.");
    }
}
public class Dog extends Animal {
    public void bark() {
        System.out.println("Dog is barking.");
    }
}


在上面的代码中,Dog类继承自Animal类,因此Dog类具有父类Animal中的成员方法eat()。


继承的特点


  • 子类可以继承父类的成员变量和成员方法,包括公有、受保护和默认访问级别的成员。
  • 子类可以重写父类的成员方法以实现特定需求。
  • 子类可以添加新的成员变量和成员方法,以满足特定需求。
  • 子类不能直接访问父类的私有成员变量和私有成员方法,但可以通过父类的公有或受保护成员方法来访问。


多态的基本概念


多态是面向对象编程中的一种特性,它允许不同的对象对同一消息做出不同的响应。在Java中,多态可以通过方法重载和方法重写来实现。


  • 方法重载:方法重载是指在一个类中定义多个具有相同方法名但参数列表不同的方法。Java会根据方法的参数列表来决定调用哪个方法。
  • 方法重写:方法重写是指在子类中对父类的某个方法进行重新定义。子类重写的方法必须与父类的方法具有相同的名称、参数列表和返回类型,并且访问修饰符不能更严格。

示例代码:

public class Animal {
    public void eat() {
        System.out.println("Animal is eating.");
    }
}
public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("Dog is eating bones.");
    }
}
public class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("Cat is eating fish.");
    }
}


上述代码中,Dog类和Cat类都重写了父类Animal中的eat()方法。当调用eat()方法时,Java虚拟机会根据具体调用的对象类型来决定调用哪个方法。


多态的实现方式


在Java中,多态有两种实现方式:通过继承和接口来实现多态。


  • 通过继承实现多态:


在继承体系中,父类指针可以指向子类对象。使用父类的引用变量来调用重写的方法时,Java虚拟机会根据具体调用的对象类型来决定调用哪个方法。


示例代码:

Animal ani1 = new Dog();
Animal ani2 = new Cat();
ani1.eat();   // 输出:Dog is eating bones.
ani2.eat();   // 输出:Cat is eating fish.


  • 通过接口实现多态:


接口是一种特殊的抽象类,它只定义了方法的声明而没有提供方法的实现。一个类可以实现多个接口,从而具有不同的行为特征。Java中通过将对象引用转换为接口类型来实现多态。使用接口的引用变量来调用实现类中的方法时,Java虚拟机会根据具体调用的对象类型来决定调用哪个方法。


示例代码:

interface Shape {
    void draw();
}
class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Draw a circle.");
    }
}
class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Draw a rectangle.");
    }
}
public class Main {
    public static void main(String[] args) {
        Shape s1 = new Circle();
        Shape s2 = new Rectangle();
        s1.draw();  // 输出:Draw a circle.
        s2.draw();  // 输出:Draw a rectangle.
    }
}


在上述代码中,Circle和Rectangle类都实现了Shape接口,并重写了接口中的draw()方法。当使用接口的引用变量来调用实现类中的方法时,Java虚拟机会根据具体调用的对象类型来决定调用哪个方法。


强制类型转换


在Java中,可以使用强制类型转换将父类引用变量转换为子类引用变量,以方便访问子类特有的成员。


示例代码:

Animal ani = new Dog();
if (ani instanceof Dog) {
    Dog d = (Dog)ani;
    d.bark();
}


在上述代码中,ani是一个Animal类的引用变量,但它指向的是一个Dog类的实例。通过使用instanceof运算符可以判断ani是否指向了一个Dog类的实例。如果是,则可以使用强制类型转换将ani转换为Dog类型,以便访问Dog类特有的方法bark()。


需要注意的是,如果进行强制类型转换时,实际对象不是所需类型的子类,会抛出ClassCastException异常。因此,在进行强制类型转换之前,最好先使用instanceof运算符进行类型检查。


6. 调用父类的构造方法


在Java中,子类继承了父类的所有属性和方法,但并没有继承父类的构造方法。因此,在子类的构造方法中调用父类的构造方法是非常必要的,以确保父类的成员变量得到正确的初始化。


在子类的构造方法中使用super关键字来调用父类的构造方法。如果父类有多个构造方法,则可以通过super关键字指定需要调用的构造方法。


示例代码:

public class Animal {
    private String name;
    public Animal(String name) {
        this.name = name;
    }
}
public class Dog extends Animal {
    private int age;
    public Dog(String name, int age) {
        super(name);  // 调用父类的构造方法
        this.age = age;
    }
}


在上述代码中,Dog类继承自Animal类,并在其构造方法中调用了Animal类的构造方法。


抽象类与抽象方法


抽象类是一种特殊的类,它不能被实例化,只能作为其他类的父类使用。抽象类中可以包含抽象方法,抽象方法没有具体的实现,只有方法的声明。


在Java中,使用abstract关键字来定义一个抽象类或抽象方法。如果一个类包含抽象方法,则这个类必须是抽象类。


示例代码:

abstract class Shape {
    abstract void draw();
}
class Circle extends Shape {
    @Override
    void draw() {
        System.out.println("Draw a circle.");
    }
}
class Rectangle extends Shape {
    @Override
    void draw() {
        System.out.println("Draw a rectangle.");
    }
}


在上述代码中,Shape类是一个抽象类,其中包含了一个抽象方法draw()。Circle类和Rectangle类都继承自Shape类,并实现了draw()方法。


需要注意的是,如果一个类继承了一个抽象类,则必须实现抽象类中的所有抽象方法,否则该类也必须声明为抽象类。

相关文章
|
16天前
|
存储 Java 容器
Java基本语法详解
本文深入讲解了Java编程的基础语法,涵盖数据类型、运算符、控制结构及数组等核心内容,帮助初学者构建坚实的编程基础。
|
2月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
101 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
14天前
|
算法 Java 测试技术
零基础学 Java: 从语法入门到企业级项目实战的详细学习路线解析
本文为零基础学习者提供完整的Java学习路线,涵盖语法基础、面向对象编程、数据结构与算法、多线程、JVM原理、Spring框架、Spring Boot及项目实战,助你从入门到进阶,系统掌握Java编程技能,提升实战开发能力。
58 0
|
2月前
|
存储 安全 Java
从基础语法到实战应用的 Java 入门必备知识全解析
本文介绍了Java入门必备知识,涵盖开发环境搭建、基础语法、面向对象编程、集合框架、异常处理、多线程和IO流等内容,结合实例帮助新手快速掌握Java核心概念与应用技巧。
57 0
|
11月前
|
Java Apache Maven
Java百项管理之新闻管理系统 熟悉java语法——大学生作业 有源码!!!可运行!!!
文章提供了使用Apache POI库在Java中创建和读取Excel文件的详细代码示例,包括写入数据到Excel和从Excel读取数据的方法。
137 6
Java百项管理之新闻管理系统 熟悉java语法——大学生作业 有源码!!!可运行!!!
|
11月前
|
Java 开发工具 Android开发
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
107 2
|
11月前
|
Java 开发工具 Android开发
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
本系列教程笔记详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。若需快速学习Kotlin,建议查看“简洁”系列教程。本期重点介绍了Kotlin与Java的共存方式,包括属性、单例对象、默认参数方法、包方法、扩展方法以及内部类和成员的互操作性。通过这些内容,帮助你在项目中更好地结合使用这两种语言。
129 1
|
6月前
|
缓存 安全 Java
java面试-基础语法与面向对象
本文介绍了 Java 编程中的几个核心概念。首先,详细区分了方法重载与重写的定义、发生阶段及规则;其次,分析了 `==` 与 `equals` 的区别,强调了基本类型和引用类型的比较方式;接着,对比了 `String`、`StringBuilder` 和 `StringBuffer` 的特性,包括线程安全性和性能差异;最后,讲解了 Java 异常机制,包括自定义异常的实现以及常见非检查异常的类型。这些内容对理解 Java 面向对象编程和实际开发问题解决具有重要意义。
|
6月前
|
运维 Cloud Native Java
postman发起post请求遇到报错:java.io.FileNotFoundException (文件名、目录名或卷标语法不正确。)
遇到bug报错,多猜可能的原因,控制变量反复测试,直至找到问题的关键,然后再思考如何解决或者回避。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来
|
9月前
|
Java
java do while 的语法怎么用?
java do while 的语法怎么用?
246 3