Java初学者指南

Java 是什么?

Java 是一种高级、面向对象的编程语言,设计目的是平台无关性,允许开发者“一次编写,到处运行”(WORA)。这意味着 Java 代码在一个平台上编译后,可以在任何支持 Java 的平台上运行,而无需重新编译。

Java 的历史

  • 由詹姆斯·高斯林和 Sun Microsystems 于 1991 年发明
  • 初始名称:Oak(以高斯林办公室外的橡树命名)。
  • 更名为 Green,然后改为 Java Coffee(受印尼咖啡启发),最终在 1995 年简化为 Java

Java 用于什么?

Java 广泛应用于多个领域,包括:

  • Web 和移动应用:Android 应用开发、Web 应用和 Web 控制台。
  • 桌面应用:计算机和其他设备的软件。
  • 嵌入式系统:电视、空调、洗衣机等设备。
  • 游戏开发:简单和复杂的游戏。
  • 金融服务:银行应用、在线交易和金融系统。
  • 在线服务:注册表单、电子商务和其他基于 Web 的服务。

Java 基于什么?

Java 基于 C 和 C++。主要组件包括:

  • 编译器:将 Java 源代码转换为字节码。
  • Java 虚拟机(JVM):以平台无关的方式执行字节码。
  • 运行时环境:提供必要的库和支持,以便运行 Java 应用程序。

Java 的版本

  1. Java 标准版(Java SE)
    • 核心库和 API。
    • 适用于通用应用程序。
  2. Java 企业版(Java EE)
    • 包括 Java API,如 JMS、EJB、JSP/Servlet 等。
    • 适用于企业级应用。
  3. Java 微型版(Java ME)
    • 用于在手机、机顶盒、手持设备等上编程。
    • 适用于资源受限的设备。

Java 的概念和特性

Java 概念

Java 的核心概念是其面向对象编程(OOP)特性。OOP 通过提供一些概念简化了软件和应用的开发和维护:

  1. 对象:对象是一个具有状态和行为的实体。例如,狗可以被视为一个对象,有颜色、品种和名字等属性,以及吠叫和吃东西等行为。
  2. :类是多个对象的集合。它是创建对象的蓝图。类用于组织代码,就像超市中水果、蔬菜和药品被分成不同的区域一样。
  3. 构造函数:构造函数看起来像一个方法,但它不是。它的名称与类名相同,且不返回任何值。
  4. 继承:继承是指一个类获取父类的属性和行为的概念。
  5. 多态:多态是指以不同方式执行同一任务的过程。它允许程序员在不同上下文中使用同一个词表示不同的意思。
  6. 抽象:抽象用于隐藏内部细节,只显示相关的必要细节。
  7. 封装:将代码和数据绑定在一起形成一个单一单元(如胶囊)称为封装。Java 类就是一个封装的例子。
Java 特性

Java 具有许多特性和品质,包括:

  • 简单的语法:非常容易理解和学习。
  • 健壮性:消除了 C 和 C++ 中常见的错误。
  • 包含垃圾回收和异常处理等特性
  • 可移植性:Java 可以在任何平台上运行。
  • 安全性:Java 是安全的,支持多任务处理。
  • 性能:虽然不如 C 和 C++ 快,但提供了比其他语言更高的性能。
Java 的组件

Java 编程语言有三个主要组件:

  1. Java 虚拟机(JVM)
    • 提供一个平台无关的 Java 组件,为执行 Java 程序提供环境。JVM 加载代码、验证代码、执行代码并提供运行时环境。
  2. Java 运行时环境(JRE)
    • 构建一个环境,使 Java 文件可以运行和执行。JRE 是一个包含 JVM、Java 类库和 Java 类加载器的软件包。
  3. Java 开发工具包(JDK)
    • JRE 的超集,是一个用于开发 Java 应用程序和小程序的软件开发环境。JDK 包括一个私有的 JVM 和一些其他资源,以完成 Java 应用程序的开发。

Java 面向对象编程(OOP)概念

面向对象编程(OOP)是 Java 的核心概念之一,它通过四个主要原则来简化软件和应用的开发及维护。这四个原则是:

  1. 抽象(Abstraction)
  2. 封装(Encapsulation)
  3. 多态(Polymorphism)
  4. 继承(Inheritance)

1. 抽象(Abstraction)

抽象(Abstraction)是面向对象编程(OOP)中的一个核心概念,它指的是展示对象的相关细节,同时隐藏不必要的内部实现细节。通过抽象,可以减少复杂性,提高代码的可读性和可维护性。抽象帮助我们关注高层逻辑,而不是具体的实现细节。

抽象的两个主要方面

  1. 数据抽象:只展示对象的必要属性,隐藏内部数据结构。
  2. 过程抽象:只展示对象的方法签名,隐藏方法的具体实现。

抽象的实现方式

在 Java 中,抽象可以通过以下几种方式实现:

  1. 抽象类(Abstract Class):

    • 抽象类是不能被实例化的类,只能被继承。
    • 抽象类可以包含抽象方法(没有具体实现的方法)和非抽象方法(有具体实现的方法)。
    • 子类必须实现抽象类中的所有抽象方法。
  2. 接口(Interface):

    • 接口是一组抽象方法的集合。
    • 实现接口的类必须实现接口中定义的所有方法。
    • 从 Java 8 开始,接口可以包含默认方法(default methods)和静态方法(static methods)。

示例

抽象类

// 定义一个抽象类
abstract class Animal {// 抽象方法public abstract void makeSound();// 非抽象方法public void breathe() {System.out.println("Breathing...");}
}// 定义一个具体的子类
class Dog extends Animal {// 实现抽象方法@Overridepublic void makeSound() {System.out.println("Barking...");}
}public class AbstractClassExample {public static void main(String[] args) {Dog dog = new Dog();dog.makeSound(); // Barking...dog.breathe();   // Breathing...}
}

在这个例子中,Animal 是一个抽象类,包含一个抽象方法 makeSound 和一个非抽象方法 breatheDog 类继承了 Animal 类,并实现了 makeSound 方法。通过这种方式,Dog 类只需要关注如何实现 makeSound 方法,而不需要关心 breathe 方法的具体实现。

** 接口**

// 定义一个接口
interface Drawable {// 抽象方法void draw();// 默认方法(Java 8+)default void erase() {System.out.println("Erasing...");}// 静态方法(Java 8+)static void printMessage() {System.out.println("This is a drawable object.");}
}// 实现接口的类
class Circle implements Drawable {@Overridepublic void draw() {System.out.println("Drawing a circle");}
}public class InterfaceExample {public static void main(String[] args) {Circle circle = new Circle();circle.draw();   // Drawing a circlecircle.erase();  // Erasing...Drawable.printMessage(); // This is a drawable object.}
}

在这个例子中,Drawable 是一个接口,包含一个抽象方法 draw、一个默认方法 erase 和一个静态方法 printMessageCircle 类实现了 Drawable 接口,并提供了 draw 方法的具体实现。通过接口,Circle 类可以使用 Drawable 接口中定义的默认方法和静态方法,而不需要自己实现这些方法。

2. 封装(Encapsulation)

封装类似于胶囊,将整个代码和所有数据绑定在一起形成一个单一的单元。所有的方法和变量都存储在同一个类名下,同一个类的对象可以使用它们。

示例
在一个 BankAccount 类中,封装了账户信息和操作方法。

public class BankAccount {private String accountNumber;private double balance;// 构造函数public BankAccount(String accountNumber, double initialBalance) {this.accountNumber = accountNumber;this.balance = initialBalance;}// 存款方法public void deposit(double amount) {if (amount > 0) {balance += amount;}}// 取款方法public boolean withdraw(double amount) {if (amount > 0 && amount <= balance) {balance -= amount;return true;}return false;}// 获取余额public double getBalance() {return balance;}
}

3. 多态(Polymorphism)

多态是指以不同的方式执行同一任务。一个方法可以用于不同的任务。多态分为编译时多态(方法重载)和运行时多态(方法重写)。

示例
draw 方法可以用于绘制不同的形状,如三角形、矩形或圆形。

interface Shape {void draw();
}class Triangle implements Shape {@Overridepublic void draw() {System.out.println("Drawing a triangle");}
}class Rectangle implements Shape {@Overridepublic void draw() {System.out.println("Drawing a rectangle");}
}class Circle implements Shape {@Overridepublic void draw() {System.out.println("Drawing a circle");}
}public class PolymorphismExample {public static void main(String[] args) {Shape triangle = new Triangle();Shape rectangle = new Rectangle();Shape circle = new Circle();triangle.draw(); // Drawing a trianglerectangle.draw(); // Drawing a rectanglecircle.draw(); // Drawing a circle}
}

4. 继承(Inheritance)

当一个类继承另一个类的某些属性和方法时,称为继承。继承关系中总是有一个超类(父类)和一个子类(子类)。子类继承超类的属性和方法。

示例
Animal 是超类,具有 eatsleep 方法。ReptileMammalHuman 是子类,继承了这些方法。

class Animal {public void eat() {System.out.println("Eating...");}public void sleep() {System.out.println("Sleeping...");}
}class Reptile extends Animal {public void crawl() {System.out.println("Crawling...");}
}class Mammal extends Animal {public void walk() {System.out.println("Walking...");}
}class Human extends Mammal {public void speak() {System.out.println("Speaking...");}
}public class InheritanceExample {public static void main(String[] args) {Reptile reptile = new Reptile();Mammal mammal = new Mammal();Human human = new Human();reptile.eat(); // Eating...reptile.sleep(); // Sleeping...reptile.crawl(); // Crawling...mammal.eat(); // Eating...mammal.sleep(); // Sleeping...mammal.walk(); // Walking...human.eat(); // Eating...human.sleep(); // Sleeping...human.walk(); // Walking...human.speak(); // Speaking...}
}

如何学习 Java?

Java 是最常用的编程语言之一,主要是因为 Java 自然多才多艺、可靠且兼容。如果你想开始编程职业生涯,拥有一项 Java 技能是非常有价值的。以下是一些入门建议:

  1. 从 Java 编程的基础开始(变量、数据类型、条件语句、数组、循环、函数)。
  2. 阅读 Java 编程书籍,以理解基本概念。
  3. 学习高级主题(面向对象编程、继承、抽象类、Java 接口、集合、异常处理、包装类)。
  4. 定期练习编码,从实践中学习。
  5. 阅读文章和最新的 Java 文档,保持更新。

Java 示例程序

Hello World 程序
public class HelloWorld {public static void main(String[] args) {System.out.println("Hello, World!");}
}
不使用临时变量交换两个数字
public class SwapNumbers {public static void main(String[] args) {int a = 10;int b = 20;System.out.println("Before swapping:");System.out.println("a = " + a);System.out.println("b = " + b);// 不使用临时变量交换两个数字a = a + b;b = a - b;a = a - b;System.out.println("After swapping:");System.out.println("a = " + a);System.out.println("b = " + b);}
}

希望这些信息对你有所帮助!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单测篇 - 如何mock静态常量

本文对应源码地址&#xff1a; https://github.com/nieandsun/NRSC-STUDY/tree/master/nrsc-unit-test-study 1 如何mock静态常量 先看如下代码&#xff0c;这里如何对方法中的静态常量DEMO_CONSTANT进行mock呢&#xff1f; public class Demo1StaticConstant {/**** 这里的类…

学习方法该升级了,‌AI时代的弯道超车:【心流学习法】行动与意识合一的巅峰进化

你是否曾感到内心如荒漠般干涸&#xff0c;面对浩瀚的知识海洋&#xff0c;热情逐渐消磨殆尽&#xff1f; 你是否渴望忘却时间的流逝&#xff0c;心无旁骛&#xff0c;与知识展开一场纯粹而深邃的对话&#xff1f; ​在AI时代&#xff0c;智能体处理数据、知识迭代的速率让人…

Set

1.概念 Set与Map一样是一个接口&#xff0c;是一颗搜索树&#xff0c;所以在创建Set对象时&#xff0c;必须实现其类&#xff08;HashSet或TreeSet&#xff09; Set<String> setnew HashSet<>(); 2.常用方法 注意 Set中只存储key&#xff0c;并且要求key唯一Set…

蓝桥杯真题——三角回文数(C语言)

问题描述 对于正整数 n, 如果存在正整数 k 使得 n123⋯kk(k1)2n123⋯kk(k1)/2​, 则 n 称为三角数。例如, 66066 是一个三角数, 因为 66066123⋯36366066123⋯363 。 如果一个整数从左到右读出所有数位上的数字, 与从右到左读出所有数位 上的数字是一样的, 则称这个数为回文数…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01目录1. A Perspective for Adapting Generalist AI to Specialized Medical AI Applications and Their Challenges2. Synergi…

C++练习题(2)

//C计算自然数的和 #include <iostream> using namespace std; int main() { int n,sum0; scanf("%d",&n); for(int i0;i<n;i) { sumi; } printf("%d",sum); return 0; } #include <iostream> …

心觉:如果做不到“道生一”,能做到“一生道”也不得了

Hi&#xff0c;我是心觉&#xff0c;带你用潜意识化解各种焦虑、内耗&#xff0c;建立无敌自信&#xff1b;教你财富精准显化的实操方法&#xff1b;关注我,伴你一路成长&#xff01; 每日一省写作222/1000天 想学的东西太多&#xff0c;想练的能力太多&#xff0c;想重塑的负…

Centos开机自启动脚本示例

本文建议创建一个sh文件管理自启动的各项内容&#xff0c;再将sh文件设置开机启动 在/root/autoshell下创建一个autostart.sh&#xff0c;内容如下 #!/bin/bash # description:开机自启脚本# 启动mongodb sh /root/software/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongod --c…

查看网路信息-ifconfig命令

1.ifconfig缺点: 可以查看接口的网络类型;部分IP和掩码以及状态是否插线,看不到接口下的网关,DNS, 要想看到接口下多个IP,使用 ip addr show 命令 要想看网关,使用 ip route show 命令、route -n 命令 显示路由表内容,route -n 命令 route -n命令主要用于手动配置静态…

buu PWN5

在做这道题目之前&#xff0c;我们先来了解一下什么是字符串格式化漏洞&#xff0c;格式化字符串函数就是将计算机 内存中表示的数据转化为我们人类可读的字符串格式&#xff0c;下面记几个有用的 %d十进制 输出十进制整数 %s 从内存中读取字符串 %p 指针地址 %n 到目前…

[Android]从FLAG_SECURE禁止截屏看surface

在应用中&#xff0c;设置activity的flag为FLAG_SECURE就可以禁止截屏&#xff0c;截屏出来是黑色的&#xff0c; 试验一下&#xff0c; 注意事项 影响&#xff1a; 设置 FLAG_SECURE 标志后&#xff0c;用户将无法对该Activity进行截屏或录制屏幕。这个标志会影响所有屏幕录…

【FL0013】基于SpringBoot和微信小程序的机电公司管理信息系统

&#x1f9d1;‍&#x1f4bb;博主介绍&#x1f9d1;‍&#x1f4bb; 全网粉丝10W,CSDN全栈领域优质创作者&#xff0c;博客之星、掘金/知乎/b站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战&#xff0c;以及程序定制化开发…

[渲染层网络层错误] net::ERR_CONTENT_LENGTH_MISMATCH 问题解决

问题描述 问题背景 微信小程序访问后端img资源的时候&#xff0c;偶尔出现这个感叹号&#xff0c;图片加载不出来&#xff0c;但是对应的url贴出来在浏览器中访问&#xff0c;或者重新加载是可以访问的。 错误描述 经查询前端报错 [渲染层网络层错误] net::ERR_CONTENT_LE…

【C++】踏上C++学习之旅(五):auto、范围for以及nullptr的精彩时刻(C++11)

文章目录 前言1. auto关键字&#xff08;C11&#xff09;1.1 为什么要有auto关键字1.2 auto关键字的使用方式1.3 auto的使用细则1.4 auto不能推导的场景 2. 基于范围的for循环&#xff08;C11&#xff09;2.1 范围for的语法2.2 范围for的使用条件 3. 指针空值nullptr&#xff0…

springboot2.x使用SSE方式代理或者转发其他流式接口

文章目录 1.需求描述2.代码2.1.示例controller2.2.示例service2.3.示例impl 3.测试 1.需求描述 使用SSE的方式主要还是要跟前端建立一个EventSource的链接&#xff0c;有了这个连接&#xff0c;然后往通道里写入数据流&#xff0c;前端自然会拿到流式数据&#xff0c;写啥拿啥…

“高效开发之路:用Spring MVC构建健壮的企业级应用”

一、SpringMVC框架概念&#xff1a; &#xff08;一&#xff09;概述 SpringMVC是Spring框架的一个模块&#xff0c;Spring和SpringMVC无需中间整合层整合。该模块是一个基于MVC的web框架。 作用&#xff1a;只要需要前后端通信&#xff0c;就需要springMVC帮我完成&#xff…

论文阅读笔记:Activating More Pixels in Image Super-Resolution Transformer

论文阅读笔记&#xff1a;Activating More Pixels in Image Super-Resolution Transformer 1 背景1.1 问题1.2 提出的方法 2 创新点3 方法4 模块4.1 混合注意力模块&#xff08;HAB&#xff09;4.2 重叠交叉注意力模块&#xff08;OCAB&#xff09;4.3 同任务预训练 5 效果5.1 …

制作gif动图并穿插到CSDN文章中

一、下载LICEcap软件 安装包放在文章末尾 二、双击运行 会出现一个透明框&#xff0c;可以通过左下角的Size来修改画布大小&#xff0c;也可以直接拖动来调整 把透明框拖至自己想放置的位置 点击record进行录制&#xff0c;点击stop暂停&#xff0c;录制完成后给自己的gif图…

新160个crackme - 093-kesan

运行分析 需破解用户名和注册码 PE分析 Delphi程序&#xff0c;32位&#xff0c;无壳 静态分析&动态调试 ida找不到字符串&#xff0c;根据Delphi程序逻辑&#xff0c;双击进入cls_Unit1_TForm1查找 向下翻找后发现4个事件&#xff0c;逐个分析 动调_TForm1_Edit1Change函数…

自己开发得期货资管模拟软件演示1.0.15版仅供学习

期货资管模拟软件演示1.0.15版仅供学习——C技术栈知识分享 本文将以期货资管模拟软件演示1.0.15版为例&#xff0c;分享其基于C技术栈的框架知识。 一、C技术栈在期货交易软件开发中的应用 C作为一种高性能的编程语言&#xff0c;以其强大的内存管理能力和高效的执行速度&a…