java上位机开发(java基础)

article/2025/9/26 15:52:13

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        java基础就是把java环境安装好,把基础程序构建起来。至少说让开发的同学来说有一点信心。从这一点来说,就算编写一个“Hello world”也是非常有必要的。

        java编程准备主要有两点,第一,安装jdk软件,也就是编译开发环境;第二,就是选择一个IDE,这里面可以选择eclipse或者IDEA,当然选择notepad++纯编辑器也是可以的。

        准备好编程环境之后,就开始了解一下需要掌握的内容。这个时候,可以画一个脑图来分析一下,

1、编写最简单的Hello world

        编写Hello world非常重要。有的书籍,或者是教学视频,一上来说了很多历史,但是却不告诉同学怎么用起来,这非常不可取。

import java.io.*;public class process {public static void main(String args[]){System.out.println("Hello, world!");}
}

        程序内容不复杂,这部分第一行import类似于c/c++中的include,相当于引用第三方库。紧接着定义了一个process类。在process类当中定义了一个main函数。函数中的内容也很简约,就是打印一个“Hello world”程序。

        编译、执行,

         相关操作也很简单。javac负责生成字节码。java负责启动虚拟机运行。

2、输入

        有了上面的数据打印,下面可以看一下输入是怎么做的,

import java.io.*;
import java.util.Scanner;public class process 
{public static void main(String []args) {Scanner input = new Scanner(System.in);System.out.println("Please input an integer:");int a = input.nextInt();System.out.println("You input an integer:" + a);}
}

        和输出相比较,输入多了一些新的内容。首先输出的数据是a,这个是整数。此外,a的获取来自于input,而input又是来自于Scanner的数据类型,这部分呢,又是在第二行的import中可以查看到。因此,有理由相信,这个整数的输入也是来自于第三方库Scanner。基本上了解到这些就可以了,

3、int/char/string/float/double数据类型的显示

        每一种语言都有自己的数据表示方法。java也不例外,

import java.io.*;public class process 
{public static void main(String []args) {int a = 10;char b = 'a';String c = "abc";float d = 1.0f;double e = 1.1234;System.out.println(a);System.out.println(b);System.out.println(c);System.out.println(d);System.out.println(e);}
}

         这部分内容没有什么难度,可以直接编译、运行,查看结果即可,

4、array数组

        有了数据,肯定就有数组。数组本质上可以看成是一块内存。在这片内存里面存了很多相同类型的数据,

import java.io.*;public class process 
{public static void main(String []args) {int a[] = new int[5];a[0] = 0;a[1] = 1;a[2] = 2;a[3] = 3;a[4] = 4;System.out.println(a[0]);System.out.println(a[1]);System.out.println(a[2]);System.out.println(a[3]);System.out.println(a[4]);}
}

        这里我们定义了一个长度为5的数组。数组中的数据类型是整数,数组的第一个数据是从0开始的,这部分和c语言是一样的,没有什么区别。接着就是编译、执行;

5、逻辑判断

5.1 if-else 

      逻辑判断的种类很多,这里可以一一说明。首先就从if-else开始。因为之前我们测试了输入,所以可以设计一个判断输入数据是否是偶数的测试demo,

import java.io.*;
import java.util.Scanner;public class process 
{public static void main(String []args) {Scanner input = new Scanner(System.in);System.out.println("Please input an integer:");int a = input.nextInt();if(a % 2 != 0){System.out.println("You input an odd integer.");}else{System.out.println("You input an even integer.");}}
}

         为了验证代码是否正确,可以测试一下,

5.2 for循环

        for循环是比较常见的一个循环。可以测试下,怎么用java编写1到100的数据计算,

import java.io.*;public class process 
{public static void main(String []args) {int total = 0;for(int i = 0; i < 100; i ++){total += (i+1);}System.out.println("total = " + total);}
}

        编译、运行,查看一下执行结果,

5.3 while循环

        和for循环相比较,while循环只能把判断条件写在括号里面,初始化和自增的部分只能分别在循环外和循环里面来完成了。

import java.io.*;public class process 
{public static void main(String []args) {int total = 0;int i = 0;while(i < 100){total += (i+1);i += 1;}System.out.println("total = " + total);}
}

         继续编译执行,不出意外,结果应该是和for循环一样的,

5.4 switch语句

        switch可以看成是多次的if-else比较,这里为了方便还是拿奇数、偶数来验证下,

import java.io.*;
import java.util.Scanner;public class process 
{public static void main(String []args) {Scanner input = new Scanner(System.in);System.out.println("Please input an integer:");int a = input.nextInt();int b = a % 2;switch(b){case 1:System.out.println("You input an odd integer.");break;case 0:System.out.println("You input an even integer.");break;default:System.out.println("Exception happened.");break;}}
}

        继续编译、运行来测试下,

6、类

        类是java里面很重要的一个属性。很多的特性,比如继承、封装、多态都是来自于这里。实际使用的时候,可以先从最常见的属性来进行学习。

6.1 构造函数

import java.io.*;public class process 
{public process(){System.out.println("construct process class");}public static void main(String []args) {process p = new process();}
}

        这里只是构建了一个最简单的process类,构造函数就是process()。在函数中有一个println打印。在main函数当中,可以看到声明了一个实例p,在声明的过程中调用到了process()这个构造函数,因此就会出现相应的打印。

6.2 overload

        这个单词不太好翻译成中文。简单来说,就是类中的函数名可以重复,但是参数不可以相同,这样就可以用相同的函数名构建类似功能的不同函数,比如说构造函数。

import java.io.*;public class process 
{public process(){System.out.println("construct process class");}public process(int data){System.out.println("construct process class, input is " + data);}public static void main(String []args) {process p = new process();process q = new process(10);}
}

         继续编译、运行,查看结果,

6.3 继承

        继承是比较通用的概念,这部分可以直接用示例来说明,

import java.io.*;class parent
{public parent(){System.out.println("construct parent class");}
};	class child extends parent
{public child(){System.out.println("construct child class");}
};	public class process 
{public static void main(String []args) {child c = new child();}
}

        这里有两种类。一种是parent,一种是child,在main函数中构建child类的时候,除了调用child的构造函数,还会继续调用parent构造函数,这就是继承。

6.4 多态

        多态如果用c++中的概念来对应,那就是虚函数,这样就可以轻松对上了。

import java.io.*;class parent
{public parent(){return;}public void print(){System.out.println("print in parent class");}
};	class child extends parent
{public child(){return;}@Overridepublic void print(){System.out.println("print in child class");}
};	public class process 
{public static void main(String []args) {parent p = new child();p.print();}
}

        这段代码最有意思的地方,就是把child的实例赋值给parent,然后调用parent中的print函数。结果打印出来的,不是parent.print的内容,而是child.print的内容,这就是多态的意义所在。注意这里面使用到了@Override这个注解。

6.5 接口

        接口这个概念在c++里面好像不太好找,勉强对的上的就是虚类了。

import java.io.*;interface run
{public void print();
}class parent implements run
{public parent(){return;}public void print(){System.out.println("print in parent class");}
};	public class process 
{public static void main(String []args) {run r = new parent();r.print();}
}

        这个run就是interface,可以看成是某个具体的动作。编译、测试,

6.6 静态函数

        静态函数的概念比较简单,我们一开始使用的main函数就是静态函数。

import java.io.*;public class process 
{public static void print(){System.out.println("static print function");}public static void main(String []args) {process.print();}
}

        直接运行、测试,

7、package

        package的概念其实就是c++里面namespace的概念。同一个package里面的java类可以相互调用,不同package里面的java代码必须添加import才可以。

        假设有package1里面有文件process1.java和process2.java,其中process1.java内容如下所示,

package package1;import java.io.*;public class process1
{public static void main(String []args) {process2 p = new process2();}
}

        这个时候process2.java代码如下,

package package1;import java.io.*;public class process2
{public process2(){System.out.println("construct process2 class");}
}

        此时因为process1.java和process2.java在同一个目录下面,那么process1就可以实例化process2类。编译、测试一下,

8、import

        之前在package测试中,我们说到了同一个目录下的java引用不需要什么额外操作。但是,如果是不同目录下的java呢,这个时候就需要import的参与了。

        假设此时有一个其他目录的process3.java文件也想实例化process2,它应该怎么做呢?

package package2;import java.io.*;
import package1.process2;public class process3
{public static void main(String []args) {process2 p = new process2();}
}

         这里我们发现,在process3中除了package之外,多了一个import package1.process2的语句。这就告诉我们,第一,当前process3.java和对应的process2.java不在同一个目录;第二,如果要实例化对应的class,那么直接去那个目录下查找对应的class文件就好了。

         测试结果也表明,这个想法是正确的。

注:

        这篇文章几乎是目前写过的最长的blog,不过还没有把所有java的基本特性描述出来。只是对于新手来说,只要有了这个基础,其实是可以做一些小工具、小测试了,java也算是被我们真正用起来了。


http://chatgpt.dhexx.cn/article/KiUU8OmD.shtml

相关文章

上位机开发的意义

上位机开发的意义 常见的上位机定义为一台可以发出特定操控命令的计算机&#xff0c; 通过操作预先设定好的命令&#xff0c;将命令传递给下位机&#xff0c;通过下位机来控制设备完成各项操作。此定义着重于强调控制指令的发送&#xff0c;实际上除了发送控制命令&#xff0c…

Qt之上位机开发实战(三)

UDP编程 udp相对于tcp来说相对简单&#xff0c;udp不分客户端和服务器&#xff0c;只需要使用一个QUdpSocket类&#xff0c;首先完成布局 Pro文件下加QT core gui network&#xff0c;.h文件下加#include <QUdpSocket> .h文件public下创建对象 QUdpSocket *udpSocket;…

C# | 上位机开发新手指南(三)框架

上位机开发新手指南&#xff08;三&#xff09;框架 文章目录 上位机开发新手指南&#xff08;三&#xff09;框架.NETWinFormsWPFUnity3D CQTMFC 其他语言LabVIEW .NET WinForms 在上位机开发中&#xff0c;Windows Forms是使用最广泛的C#框架之一。Windows Forms是.NET Fra…

哈喽上位机(上位机开发指南)

哈喽&#xff0c;上位机&#xff01; -------上位机开发指南 作者&#xff1a;Robert Zhang本博客以一个程序猿的角度解答了: - 有关上位机开发的疑惑 - 上机软件开发需要学习哪些知识 - 开发一个完整商业软件所需的技术与实现方法 - 怎样美化软件&#xff0c;那些漂亮的软件…

C#上位机开发常遇问题

C#上位机开发常遇问题 C#引用C动态库/静态库静态库动态库 unsafe和fixed关键字的应用unsafefixed Path类的使用写在结尾 最近完成了一个小项目的开发&#xff0c;在开发中遇到了一些问题&#xff0c;我感觉这些问题其他人在开发的时候也会遇到&#xff0c;所以我在这边总结一下…

C# 三菱PLC上位机开发环境搭建

一、安装软件 用到两个三菱的软件&#xff1a; 1. MX Component&#xff08;下载地址 也可以直接在官网上搜索&#xff0c;注意MX后面有空格&#xff09; 用于连接PLC 2. GX Works2&#xff08;下载地址 用GX Works3也行&#xff09; 这个软件主要是电气做PLC编程&#xf…

USB上位机开发

上位机开发采用图形化界面&#xff0c;使用C#语言进行开发。调用C编写的Dll动态库&#xff0c;实现与STM32进行USB通信的目的。 首先&#xff0c;编写Dll动态库。 开发环境采用VS2017&#xff0c;语言C 将lusb0_usb.h和libusb.lib文件拷贝到工程目录下。 libusb-win32-bin-…

Matlab上位机开发

Matlab上位机开发 1 了解上位机1.1 上位机的作用1.2 常用上位机开发方式1.2.1 Windows上位机&#xff08;基于串口通信&#xff09;1.2.2 Android上位机&#xff08;基于网络通信&#xff09; 1.3 教程概况1.3.1 C#上位机开发教程1.3.2 IoT App开发1.3.3 Matlab上位机开发 2 He…

C# | 上位机开发新手指南(一)概述

C#上位机开发新手指南&#xff08;一&#xff09;概述 文章目录 C#上位机开发新手指南&#xff08;一&#xff09;概述前言学习C#编程基础熟悉上位机开发相关知识选择合适的开发环境熟练掌握C#编程技巧掌握常用控件的使用方法学习与硬件通讯的方法最后 前言 C#&#xff0c;是微…

上位机开发流程

提示&#xff1a;本文为学习记录&#xff0c;若有错误&#xff0c;请联系作者&#xff0c;虚心受教。 文章目录 前言一、上位机是什么&#xff1f;二、开发步骤1.了解需求2.分析需求3.设计软件模块4.测试软件5.交付及维护软件 总结&#xff1a; 前言 没有人可以真正理解另一个…

上位机开发(怎么开发上位机)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 要开发上位机,主要还是看具体的用途是什么。比如说,是不是负责烧入固件;是不是调制参数;是不是监控;是不是系统控制、是不是仿真等等。当然,不管是什么样的上位机开发,有一些…

VS上位机开发——串口助手

VS上位机开发——串口助手 目录 VS上位机开发——串口助手一、新建项目二、控件布局三、编写程序1、端口更新函数2、启动窗口加载函数3、"打开串口"按键回调函数4、"清除接收"按键回调函数5、"发送"按键回调函数6、串口接收函数7、定时器中断回调…

C++刷题笔记(4)——leetcode209、904

题目1&#xff1a;209.长度最小的子数组 暴力解法 解题思路&#xff1a; 用两个for循环&#xff0c;外层for循环负责做子序列的起点&#xff0c;内层for循环负责遍历数组&#xff0c;寻找符合条件的子序列 然后外层for循环移动子序列的起点&#xff0c;继续再数组中寻找新的符…

904. 水果成篮(c++)

滑动窗口&#xff1a; class Solution { public:int totalFruit(vector<int>& fruits) {int max_len 0;int left 0;unordered_map<int,int>mp;for(int right 0; right < fruits.size();right){mp[fruits[right]];while(mp.size() > 2){mp[fruits[lef…

904-线程池项目死锁问题分析

死锁问题 1、在ThreadPool的资源回收&#xff0c;等待线程池所有线程退出时&#xff0c;发生死锁问题&#xff0c;导致进程无法退出 我们的资源回收代码如下&#xff1a; //线程池析构 ThreadPool::~ThreadPool() {isPoolRunning_ false;notEmpty_.notify_all();//等待线程…

ORACLE 错误 904

错误原因&#xff1a; Oracle 版本中IMP和EXP的兼容问题。 我这里是因为本机上的oracle版本高于服务器上的oracle版本 解决办法&#xff1a; 安装和服务器同版本的10g客户端&#xff0c;在命令窗口化中切换到10g客户端的bin目录下面进行导入就ok了。 为什么要切换呢&#xf…

leetcode:904. 水果成篮

题目来源 leetcode&#xff1a;904. 水果成篮 题目描述 题目解析 题意 题意从任意位置开始&#xff0c;若最多只能收集两种水果&#xff0c;问最多能收集多少个水果。 这道题目可以理解为求只包含两种元素的最长连续子序列&#xff0c;和leetcode&#xff1a;159.最多有两个…

2022-7-8 Leetcode 904.水果成篮

错误的代码&#xff1a; class Solution { public:int totalFruit(vector<int>& fruits) {int start 0;int end 0;set<int> myset;int len 0;for (; end < fruits.size(); end){myset.insert(fruits[end]);if (myset.size() > 2 && start &l…

【LeetCode】图解 904. 水果成篮

904. 水果成篮 904. 水果成篮 你正在探访一家农场&#xff0c;农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示&#xff0c;其中 fruits[i] 是第 i 棵树上的水果 种类 。 你想要尽可能多地收集水果。然而&#xff0c;农场的主人设定了一些严格的规矩&#xf…

LeetCode_904 水果成篮

1、题目&#xff1a;水果成篮 你正在探访一家农场&#xff0c;农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示&#xff0c;其中 fruits[i] 是第 i 棵树上的水果 种类 。 你想要尽可能多地收集水果。然而&#xff0c;农场的主人设定了一些严格的规矩&#xff0c…