Java 基础篇:环境搭建、基本语法与面向对象编程

news2024/9/21 7:51:20
引言

对于有多年 Java 开发经验的工程师来说,虽然基础语法已经烂熟于心,但在实际工作中仍然会遇到一些容易出错的地方、重点难点以及最佳实践。本文将针对这些方面进行深入探讨,并结合常见的面试题和 LeetCode 案例,帮助读者巩固和提升自己的 Java 基础。

1. Java 环境搭建
1.1 安装 JDK

首先,确保你的系统中已经安装了最新版本的 JDK。你可以从 Oracle 官方网站下载最新版本的 JDK,或者选择 OpenJDK。安装过程中,需要注意以下几点:

  • 选择合适的版本:根据你的操作系统选择相应的安装包。
  • 配置环境变量:安装完成后,需要配置 JAVA_HOME 和 PATH 环境变量。
    • Windows
      set JAVA_HOME=C:\Program Files\Java\jdk-17
      set PATH=%JAVA_HOME%\bin;%PATH%
    • Linux/Mac
      export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
      export PATH=$JAVA_HOME/bin:$PATH
1.2 验证安装

安装完成后,可以通过以下命令验证 JDK 是否安装成功:

java -version
javac -version

如果输出了 JDK 的版本信息,说明安装成功。

1.3 IDE 选择

选择一个合适的 IDE 对于提高开发效率至关重要。常用的 Java IDE 包括 IntelliJ IDEA、Eclipse 和 NetBeans。这里以 IntelliJ IDEA 为例,简要介绍其安装和配置步骤:

  1. 下载安装包:从 JetBrains 官网下载 IntelliJ IDEA。
  2. 安装:按照安装向导完成安装。
  3. 配置:启动 IntelliJ IDEA 后,选择 File -> Project Structure,配置 JDK 路径。
2. 基本语法
2.1 变量与数据类型

Java 是一种强类型语言,变量在使用前必须先声明其类型。常见的数据类型包括基本类型和引用类型。

  • 基本类型

    • 整型byteshortintlong
    • 浮点型floatdouble
    • 字符型char
    • 布尔型boolean
  • 引用类型

    • :如 StringArrayList 等
    • 数组:如 int[]String[] 等
2.2 运算符

Java 支持多种运算符,包括算术运算符、关系运算符、逻辑运算符和位运算符等。

  • 算术运算符+-*/%
  • 关系运算符==!=<><=>=
  • 逻辑运算符&&||!
  • 位运算符&|^~<<>>>>>
2.3 控制语句
  • 条件语句if-elseswitch
  • 循环语句forwhiledo-while
  • 跳转语句breakcontinuereturn
2.4 面向对象编程

面向对象编程(OOP)是 Java 的核心特性之一。主要概念包括类和对象、继承、多态和接口。

  • 类和对象

    public class Person {
        private String name;
        private int age;
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }

  • 继承

public class Student extends Person {
    private String studentId;

    public Student(String name, int age, String studentId) {
        super(name, age);
        this.studentId = studentId;
    }

    public String getStudentId() {
        return studentId;
    }

    public void setStudentId(String studentId) {
        this.studentId = studentId;
    }
}
  • 多态

public class Animal {
    public void makeSound() {
        System.out.println("Animal sound");
    }
}

public class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Dog barks");
    }
}

public class TestPolymorphism {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        myDog.makeSound(); // 输出 "Dog barks"
    }
}
  • 接口

    public interface Animal {
        void makeSound();
    }
    
    public class Dog implements Animal {
        @Override
        public void makeSound() {
            System.out.println("Dog barks");
        }
    }
    
    public class TestInterface {
        public static void main(String[] args) {
            Animal myDog = new Dog();
            myDog.makeSound(); // 输出 "Dog barks"
        }
    }
3. 常见错误与最佳实践
3.1 常见错误
  • 空指针异常(NullPointerException):

String name = null;
System.out.println(name.length()); // 抛出 NullPointerException
  • 解决方案

    String name = null;
    if (name != null) {
        System.out.println(name.length());
    } else {
        System.out.println("Name is null");
    }
  • 数组越界异常(ArrayIndexOutOfBoundsException):

    int[] numbers = {1, 2, 3};
    System.out.println(numbers[3]); // 抛出 ArrayIndexOutOfBoundsException

    解决方案

    int[] numbers = {1, 2, 3};
    if (numbers.length > 3) {
        System.out.println(numbers[3]);
    } else {
        System.out.println("Index out of bounds");
    }
3.2 最佳实践
  • 使用泛型

    List<String> names = new ArrayList<>();
    names.add("Alice");
    names.add("Bob");
    
    for (String name : names) {
        System.out.println(name);
    }
  • 避免使用原始类型

    List names = new ArrayList(); // 不推荐
    names.add("Alice");
    names.add(123); // 可能导致运行时错误
    
    for (Object name : names) {
        System.out.println(name);
    }
  • 使用常量

    public class Constants {
        public static final int MAX_SIZE = 100;
    }
    
    public class Example {
        public void checkSize(int size) {
            if (size > Constants.MAX_SIZE) {
                System.out.println("Size exceeds maximum limit");
            }
        }
    }
  • 避免过度使用 synchronized

    public class Counter {
        private int count = 0;
    
        public synchronized void increment() {
            count++;
        }
    
        public synchronized int getCount() {
            return count;
        }
    }

    优化

    public class Counter {
        private AtomicInteger count = new AtomicInteger(0);
    
        public void increment() {
            count.incrementAndGet();
        }
    
        public int getCount() {
            return count.get();
        }
    }
4. 面试题与 LeetCode 案例
4.1 面试题
  • 什么是 Java 中的多态?

    • 多态是指子类可以替换父类,即子类对象可以赋值给父类引用。多态的实现方式包括方法重写(@Override)和接口实现。
  • Java 中的 finalize 方法有什么作用?

    • finalize 方法是在对象被垃圾回收之前调用的方法,用于释放资源。但由于其不确定性和性能问题,不推荐使用。
  • Java 中的集合框架有哪些?

    • Java 集合框架包括 ListSet 和 Map。常见的实现类有 ArrayListLinkedListHashSetTreeSetHashMap 和 TreeMap
4.2 LeetCode 案例
  • 两数之和(Two Sum)

    • 题目描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
    • 示例
      Input: nums = [2, 7, 11, 15], target = 9
      Output: [0, 1]
    • 解决方案
      1import java.util.HashMap;
      2import java.util.Map;
      3
      4public class Solution {
      5    public int[] twoSum(int[] nums, int target) {
      6        Map<Integer, Integer> map = new HashMap<>();
      7        for (int i = 0; i < nums.length; i++) {
      8            int complement = target - nums[i];
      9            if (map.containsKey(complement)) {
      10                return new int[] { map.get(complement), i };
      11            }
      12            map.put(nums[i], i);
      13        }
      14        throw new IllegalArgumentException("No two sum solution");
      15    }
      16}
  • 反转字符串(Reverse String)

    • 题目描述:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
    • 示例
      1Input: ["h","e","l","l","o"]
      2Output: ["o","l","l","e","h"]
    • 解决方案
      1public class Solution {
      2    public void reverseString(char[] s) {
      3        int left = 0;
      4        int right = s.length - 1;
      5        while (left < right) {
      6            char temp = s[left];
      7            s[left] = s[right];
      8            s[right] = temp;
      9            left++;
      10            right--;
      11        }
      12    }
      13}
5. 总结

本文从 Java 环境搭建、基本语法、面向对象编程等方面进行了详细介绍,并结合常见的面试题和 LeetCode 案例,帮助读者巩固和提升自己的 Java 基础。希望本文对你有所帮助,如果你有任何问题或建议,欢迎留言交流。


希望这篇文章能够满足你的需求,如果有任何进一步的问题或需要更多内容,请随时告诉我!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2151736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型推理性能优化

LLM 推理的核心指标 首 Token 延迟(决定了用户体验) 延迟:从输入到输出最后一个 token 的延迟 吞吐量:每秒针对所有请求生成的 token 数(针对所有并发请求) 推理的性能卡点 1. KV-Cache 大小导致并发能力受限 LLM推理的过程是一个自回归的过程,前 i 次的token会作为…

秒懂Linux之共享内存

目录 共享内存概念 模拟实现共享内存 创建key阶段 ​编辑创建共享内存阶段 删除共享内存阶段 查看共享内存属性阶段 挂接共享内存到进程阶段 取消共享内存与进程挂接阶段 进程通信阶段 添加管道改进版 共享内存函数 shmget函数 shmat函数 shmdt函数 shmctl函数 共享内存概念 共…

第二十一节:学习Redis缓存数据库的Hash操作(自学Spring boot 3.x的第五天)

这节记录下Redis的Hash操作。主要是opsForHash方式和boundHashOps方式。 boundHashOps和opsForHash都是Spring Data Redis中用于操作Redis哈希数据结构的方法&#xff0c;但它们在使用方式和场景上存在一些区别。 boundHashOps 使用方式&#xff1a; boundHashOps方法通过Redi…

【第十三章:Sentosa_DSML社区版-机器学习聚类】

目录 【第十三章&#xff1a;Sentosa_DSML社区版-机器学习聚类】 13.1 KMeans聚类 13.2 二分KMeans聚类 13.3 高斯混合聚类 13.4 模糊C均值聚类 13.5 Canopy聚类 13.6 Canopy-KMeans聚类 13.7 文档主题生成模型聚类 13.8 谱聚类 【第十三章&#xff1a;Sentosa_DSML社…

C#基于SkiaSharp实现印章管理(8)

上一章虽然增加了按路径绘制文本&#xff0c;支持按矩形、圆形、椭圆等路径&#xff0c;但测试时发现通过调整尺寸、偏移量等方式不是很好控制文本的位置。相对而言&#xff0c;使用弧线路径&#xff0c;通过弧线起始角度及弧线角度控制文本位置更简单。同时基于路径绘制文本时…

Chainlit集成LlamaIndex实现知识库高级检索(简单融合寻回器)

检索原理 ** 简单融合寻回器 ** 简单融合寻回原理&#xff0c;是利用多个检索器&#xff0c;融合查询最终的结果返回给LLM。此检索器还将通过生成与原始问题相关的问题&#xff0c;用相关问题再次检索多个检索器的数据&#xff0c;把原始问题和相关问题经过多个检索器检索结果…

Relations Prediction for Knowledge Graph Completion using Large Language Models

文章目录 题目摘要简介相关工作方法论实验结论局限性未来工作 题目 使用大型语言模型进行知识图谱补全的关系预测 论文地址&#xff1a;https://arxiv.org/pdf/2405.02738 项目地址&#xff1a; https://github.com/yao8839836/kg-llm 摘要 知识图谱已被广泛用于以结构化格式表…

高级java每日一道面试题-2024年9月20日-分布式篇-什么是CAP理论?

如果有遗漏,评论区告诉我进行补充 面试官: 什么是CAP理论&#xff1f; 我回答: 在Java高级面试中&#xff0c;CAP理论是一个经常被提及的重要概念&#xff0c;它对于理解分布式系统的设计和优化至关重要。CAP理论是分布式系统理论中的一个重要概念&#xff0c;它描述了一个分…

【数学分析笔记】第3章第2节 连续函数(4)

3. 函数极限与连续函数 3.2 连续函数 3.2.9 反函数的连续性定理 【定理3.2.2】【反函数连续性定理】设 y f ( x ) yf(x) yf(x)在闭区间 [ a , b ] [a,b] [a,b]上连续且严格单调增加&#xff0c;设 f ( a ) α , f ( b ) β f(a)\alpha,f(b)\beta f(a)α,f(b)β&#xff0…

仓颉编程入门

#体验华为仓颉编程语言# 仓颉发布的第一时间&#xff0c;就申请了测试。昨天发现申请通过 &#xff0c;果断下载SDK体验一下。 废话不多说&#xff0c;从下载完开始&#xff0c;下面这个图&#xff0c;就是下载的文件&#xff1a; 看文件夹样子跟c/c套路差不多。bin目录是cjc…

linux安装nginx+前端部署vue项目(实际测试react项目也可以)

&#x1f9f8;本篇博客作者测试上线过不下5个项目&#xff0c;包括单纯的静态资源&#xff0c;vue项目和react项目&#xff0c;包好用&#xff0c;请放心使用 &#x1f4dc;作者首页&#xff1a;dream_ready-CSDN博客 &#x1f4dc;有任何问题都可以评论留言&#xff0c;作者将…

什么是大模型的泛化能力?

大模型的泛化能力指的是模型在未见过的数据上表现的能力&#xff0c;即模型不仅能在训练数据上表现良好&#xff0c;也能在新的、未知的数据集上保持良好的性能。这种能力是衡量机器学习模型优劣的重要指标之一。 泛化能力的好处包括但不限于&#xff1a; 提高模型的适应性&a…

基于uniapp的民宿酒店预订系统(后台+小程序)

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

F28335中断系统

1 中断介绍 1.1 中断概念 1.2 TMS320F28335 中断概述

CUDA并行架构

一、CUDA简介 CUDA(Compute Unified Device Architecture)是一种由NVIDIA推出的通用并行计算架构&#xff0c;该架构使GPU(Graphics Processing Unit)能够对复杂的计算问题做性能速度优化。 二、串并行模式 高性能计算的关键是利用多核处理器进行并行计算。 串行模式&#…

使用LangGPT提示词让大模型比较浮点数

使用LangGPT提示词让大模型比较浮点数 背景介绍环境准备创建虚拟环境安装一些必要的库安装其他依赖部署大模型启动图形交互服务设置提示词与测试 LangGPT结构化提示词 背景介绍 LLM在对比浮点数字时表现不佳&#xff0c;经验证&#xff0c;internlm2-chat-1.8b (internlm2-cha…

Excel-时间取整,工作有效时长计算

在计算考勤时&#xff0c;打卡时间不是整点&#xff0c;上班时间是遵循整点开始计算的&#xff0c;员工提前打卡&#xff0c;所以要用到时间向上取整。 上班取整&#xff1a; 使用CEILING函数可实现该需求&#xff0c;参考以下公式&#xff0c;第一个参数为上班打卡时间&#…

MySQL篇(窗口函数/公用表达式(CTE))(持续更新迭代)

目录 讲解一&#xff1a;窗口函数 一、简介 二、常见操作 1. sumgroup by常规的聚合函数操作 2. sum窗口函数的聚合操作 三、基本语法 1. Function(arg1,..., argn) 1.1. 聚合函数 sum函数&#xff1a;求和 min函数 &#xff1a;最小值 1.2. 排序函数 1.3. 跨行函数…

一文读懂SpringCLoud

一、前言 只有光头才能变强 认识我的朋友可能都知道我这阵子去实习啦&#xff0c;去的公司说是用SpringCloud(但我觉得使用的力度并不大啊~~)… 所以&#xff0c;这篇主要来讲讲SpringCloud的一些基础的知识。(我就是现学现卖了&#xff0c;主要当做我学习SpringCloud的笔记吧&…

英集芯IP5902:集成电压可调异步升压转换充电管理功能的8位MCU芯片

英集芯IP5902是一款集成了9V异步升压转换、锂电池充电管理及负端NMOS管的8-bit MCU芯片&#xff0c;外壳采用了SOP16封装形式&#xff0c;高集成度和丰富的功能使其在应用时只需很少的外围器件&#xff0c;就能有效减小整体方案的尺寸&#xff0c;降低BOM成本&#xff0c;为小型…