JavaSE(一)--Java语法。。。更新中。。。

news2024/12/24 2:31:13

!!!本文适合有c和c++基础的,通过比较c++和java的不同,快速入门java。!!!
这篇文章主要是介绍和c++不同的地方,没说的知识点按照c++写就行了。

零.整体的结构

Java是面向对象的程序。首先对于Java来说一个文件就是一个类,而且类名必须和文件名一致,比如Main类,则文件名要叫做Main.java,而Person类,文件名要叫做Person.java。

它和c++首先映入眼帘的不同就是不可以在类外定义函数,它所有的函数(包括主函数都要定义在类里面)。

1.主函数

比如在一般只有一个文件的话c++结构是这样的:

#include<iostream>
using namespace std;
int main(){
	//代码
    return 0;
} 

但是Java的话main函数也要放在类里面:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        //代码
    }
}

注:public static void main(String[] args) {}是主函数(或者叫程序入口)的唯一格式,不能写成其他形式。类的话命名随意。

2.函数/方法

【1】在类外定义方法

c++中允许在类外定义方法,比如

#include<iostream>
using namespace std;
void print(){
	cout<<"666";
}
int main(){
	print();
	return 0;
} 

在Java中应该这么写:

import java.util.Scanner;
public class Main {
    public static void speak(){
        //下面这句话是Java的控制台输出语句,相当于printf或者cout
        System.out.println("666");
    }
    public static void main(String[] args) {
        speak();
    }
}

注意因为main函数为静态方法,学过c++都知道,静态方法属于类中的所有实例所共有,并且只能调用静态的变量和方法,所以speak函数必须是static才能被main函数调用,至于是要public还是private看你自己。

【2】在类内定义方法

当然c++也可以在类内定义方法:

#include<iostream>
using namespace std;
class Person{
	public:
		void speak(){
			cout<<"666";
		}
};
int main(){
	Person person;
	person.speak();
	return 0;
} 

改写成Java是这样的:

import java.util.Scanner;
public class Main {
    static class Person{
        public void speak(){
            System.out.println("666");
        }
    };
    public static void main(String[] args) {
        Person person=new Person();
        person.speak();
    }
}

因为Java中一个文件只能是一个类,所以Person类只能作为内部类存在于Main中,所以Person前面也要加上static关键字才能被同为静态方法的main函数调用。

3.分文件编写

当然Java也可以像c++那样分文件编写(因为下面是定义在同一个包内,所以不用引包)
我们可以重新创建一个文件Person.java来定义Person类。

public class Person{
    public void speak(){
        System.out.println("666");
    }
}
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Person person=new Person();
        person.speak();
    }
}

4.包的概念

【1】包是什么

c++中没有包的概念。那么包是什么呢?

当程序足够大的时候,我们就要学会去管理我们代码。写程序的时候代码管理很重要。在c++中,比如当零散的代码足够多时,我们就要用函数去分类包装这些代码,将一部分代码抽象成这个函数,另一部分代码抽象成另一个函数。当函数足够多时,我们要将方法分类,进一步抽象,一部分函数属于这个类,一部分函数当成那个类的方法,用类包装。

但是当类足够多,我们就要进一步分类,一部分类放在这个命名空间,一部分类放在那个命名空间。

包说白了就是文件夹,作用就类似于命名空间,用来对各个类进行分类管理,一部分包放在这个文件夹,另一部分包放在那个文件夹。

【2】案例:新建一个Util包,将Person类放在Util中

package util;
public class Person{
    public void speak(){
        System.out.println("666");
    }
}
import util.Person;
public class Main {
    public static void main(String[] args) {
        Person person=new Person();
        person.speak();
    }
}

【3】包名命名规则
上面只是个示例:比较正式的项目要采用以下的命名规则

公司域名反写+包的名字(要体现作用),需要全部英文小写,见名知意 
例:com.flyingpig.entity     com.flyingpig.util【其中com.flyingpig是域名】
简单说就是建立一个com文件夹,里面再建立一个flyingpig文件夹,然后里面就可以建立entity文件夹来存放实体类,建立util文件夹来存放工具类

在com.flyingpig.entity包下的Student类表示为com.flyingpig.entity.Student ,这个叫做全类名和全限定名。

【3】我们看到Person类上面加了个package,而Main类上面import。
这是因为类放在包里要package。
而引用放在别的包里的类需要引包。具体的引包规则如下:
(1)使用同一个包中的类时,不需要导包
(2)使用于java.lang包中的类时,不需要导包
(3)其他情况都需要导包
(3)如果同时使用两个包中的同名类,需要用同类名.

一.注释(和c一样)

单行注释://
多行注释:/*   */
文档注释:/**    **/

二.字面量和变量类型

字面量--整型,小数,字符串,字符,布尔类型,空类型(null)

变量类型--四类八种

和c++基本一致,不一样的是多了像byte之类类型,少了像long double之类的类型。

三.输入输出

输出:System.out.println方法

//输出字符串字面量
System.out.println("我可以输出任何变量哦");
//输出整型字面量
System.out.println(666);
//输出整型变量
int a=0;
System.out.println(a);
//注意long类型的数据值后面一般需要加个L或l作为后缀。
long n=9999999999L;
System.out.println(n);
//注意float类型的数据值后面一般需要加个F作为后缀。
float f=10.1F;
System.out.println(f);

输入:用Scanner类

//建立一个调用Scanner的有参构造建立一个Scanner对象
Scanner scanner=new Scanner(System.in);
///调用其中的方法进行输入,其中nextInt方法是用来输入整数的
int number=sc.nextInt();

四.关系运算符

和c++几乎一样,只有些许不同,这里列举几个不同点。
(1)%也能用于小数运算
(2)bool类型不能用于算数计算
(3)java中对的数据类型转换检查严格

下面的代码在c++中是可以的,但在java中就会报错。

int a=1.1;

五.分支和循环语句

写法与c++一模一样。

六.引用数据类型

基本数据类型--上面讲的四类八种

引用数据类型--就是java中表示对象的数据类型。这些对象类型的变量并不直接存储数据,而是存储对象数据所在内存地址的引用。相当于c++中的引用。
因为java和c++不同的是,java创建对象都是在堆区new出来的,所以都使用引用数据类型来操作对象。

例如:
在c++中可以

Person person;

但是java中必须用new来创建对象

Person person=new Person();

这里的Person与c++的Person不一样,它代表引用,就像c++的Person*,不同的是一个是引用而一个是指针。

​Person* person=new Person();

七.数组

在java中,数组是一种对象。
创建数组

public static void main(String[] args) {
    //int数组的类型名叫做int[],所以一般是这样写的
    int[] array1=new int[3];
    //但是如c++之类的语言一般习惯用int array2[]这种格式,所以也可以这么写
    int array2[]=new int[3];
    //当然了,赋值的话还可以用数组专门用于赋值的初始化列表
    int[] array3=new int[]{11,22,33};
    //也可以简化写成
    int[] array4={11,22};
}

使用的话和c几乎一样,但还是有不同。
(1)因为是变量,所以java里面的数组有属性size可以来获取数组的长度,如
array3.length。这个比较经常在循环中用到。
(2)还有数组越界,在java中不会纵容数组越界,一越界会抛出异常。

九.方法

和c,c++差不多,就像第零条所讲的,最大的不同就是所有方法,包括main方法都得在类里面定义。

八.其他

1.增强for

【1】优点


Java 中的增强 for 循环(也称为 for-each 循环)相比于传统的 for 循环
优点:
1. 简洁,不需要索引
2. 安全性:防止越界(没有使用索引)和修改集合中的元素。
缺点:
1. 无法获取当前元素的索引:增强 for 循环没有提供内置的索引访问机制,如果需要获取当前元素的索引,仍然需要使用传统 for 循环。
2. 无法修改集合中的元素:增强 for 循环只能读取集合中的元素,无法修改元素的值或删除元素。

需要注意的是,增强for并不会提高程序的运行效率。在底层实现上,增强 for 循环其实还是通过迭代器或索引来遍历集合或数组的。

【2】增强 for 循环的语法

for (元素类型 元素变量 : 遍历对象) {
    // 循环体
}

其中,元素类型表示遍历对象中元素的类型,元素变量是用于接收每个元素值的变量名,遍历对象可以是数组或实现了 Iterable 接口的集合类(如 List、Set 等)。

下面是几个示例:

1. 遍历数组:

int[] numbers = {1, 2, 3, 4, 5};
for (int number : numbers) {
    System.out.println(number);
}

2. 遍历集合:

List<String> fruits = Arrays.asList("apple", "banana", "orange");
for (String fruit : fruits) {
    System.out.println(fruit);
}

3. 遍历字符串:

String message = "Hello";
for (char ch : message.toCharArray()) {
    System.out.println(ch);
}

在以上示例中,每次迭代时,元素变量(如 number、fruit、ch)都会被赋值为遍历对象中的一个元素值,然后执行循环体内的代码。循环将按顺序遍历遍历对象中的每个元素,直到遍历完成。

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

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

相关文章

VGG 07

一、发展 1989年&#xff0c;Yann LeCun提出了一种用反向传导进行更新的卷积神经网络&#xff0c;称为LeNet。 1998年&#xff0c;Yann LeCun提出了一种用反向传导进行更新的卷积神经网络&#xff0c;称为LeNet-5 AlexNet是2012年ISLVRC 2012&#xff08;ImageNet Large Sca…

数据库分析工具explain

1.id:查询语句的编号 2.select_type:查询类型&#xff0c;有三种&#xff0c;simple简单查询&#xff0c;primary&#xff0c;subquery等 3.table:查询的表 4.type:查询性能&#xff0c;system > const > eq_ref > ref > range > index > ALL system&…

【EI会议征稿】第三届机械自动化与电子信息工程国际学术会议(MAEIE 2023)

第三届机械自动化与电子信息工程国际学术会议&#xff08;MAEIE 2023&#xff09; 第三届机械自动化与电子信息工程国际学术会议&#xff08;MAEIE 2023&#xff09;将于2023年12月15-17日在江苏南京举行。本会议通过与业内众多平台、社会各团体协力&#xff0c;聚集机械自动…

【亲测有效】申请wx.getLocation接口多次审核不通过解决方案,申请原因范文

背景&#xff1a;微信小程序申请wx.getLocation接口多次审核不通过 拒绝原因&#xff1a;你好&#xff0c;你的小程序“XXXX”申请的wx.getLocation接口因你提供的申请原因/辅助图片/网页/视频内容无法确认申请接口使用场景审核不通过&#xff0c;建议修改后重新提交。 经过多次…

数字化医院信息云平台源代码 HIS系统全套成品源代码

基层医疗云HIS作为基于云计算的B/S构架的HIS系统&#xff0c;为基层医疗机构提供了标准化的、信息化的、可共享的医疗信息管理系统&#xff0c;可有效进行医疗数据共享与交换&#xff0c;解决数据重复采集及信息孤岛等问题&#xff0c;实现对基层医疗数据的分析和挖掘&#xff…

使用ppyoloe训练voc数据集(自制的)详细教程

使用ppyoloe训练voc数据集&#xff08;自制的&#xff09;详细教程 一、数据集准备工作: Voc数据集的格式&#xff1a; 通过labelimg标注后的数据集如图所示 分别存放原图与xml标注文件 二、在ppdetection的工程下面找到dataset文件夹 其中有许多的参考数据的格式样例 在da…

Zebec Protocol 成非洲利比亚展会合作伙伴,并将向第三世界国家布局

在 9 月 6 日&#xff0c;The Digital Asset Summit ’23&#xff08;利比亚大会&#xff09;在尼日利亚首度阿布贾的 NAF 会议中心举办&#xff0c;该会议对 Web3 领域在非洲地区的发展进行了探索&#xff0c;旨在推动非洲地区区块链产业的进一步发展&#xff0c;据悉该会议室…

关于ChatGPT的个人的一些观点

问题 1 Q: 你认为ChatGPT是一款非常有用的工具吗&#xff1f; A: 我认为ChatGPT是一款非常有用的工具。它可以帮助人们解决各种问题&#xff0c;包括技术问题、心理问题、生活问题等等。同时&#xff0c;ChatGPT也可以成为人们分享想法和交流的平台&#xff0c;增强人与人之间…

C++ break 语句

C 中 break 语句有以下两种用法&#xff1a; 当 break 语句出现在一个循环内时&#xff0c;循环会立即终止&#xff0c;且程序流将继续执行紧接着循环的下一条语句。它可用于终止 switch 语句中的一个 case。 如果您使用的是嵌套循环&#xff08;即一个循环内嵌套另一个循环&…

UE4/UE5 动画控制

工程下载​ ​​​​​​​​​​​​​https://mbd.pub/o/bread/ZJ2cm5pu 蓝图控制sequence播放/倒播动画&#xff1a; 设置开启鼠标指针&#xff0c;开启鼠标事件 在场景中进行过场动画制作 设置控制事件

IDEA找不到Maven窗口

有时候导入项目或者创建项目时候Maven窗口找不到了 然后指定项目的pom.xml文件

初识Java 6-1 复用

目录 组合 继承 委托 组合和继承的结合 确保正确的清理 名称隐藏 在组合和继承之间选择 protected关键字 向上转型 final关键字 final数据 final方法 final类 初始化及类的重载 本笔记参考自&#xff1a; 《On Java 中文版》 对面向对象的编程语言而言&#xff0…

2023-09-07工作心得:String 和 LocalDate 的比较

1、SQL查询时间 如果根据某个日期区间检索&#xff1a; 假设有张t_order表&#xff0c;其中有个字段 create_time 在数据库里的格式是”yyyy-MM-dd HH:mm:ss“ 如果我在前端&#xff0c;选择2023-09-06-2023-09-07&#xff0c;这个区间&#xff0c;其实我期待的是查出这两天…

pip cryptography 遇到的 OpenSSL 问题

pip install -r requirements.txt 遇到 bug Collecting cryptography2.7Downloading cryptography-2.7.tar.gz (495 kB)------------------------------------- 495.9/495.9 kB 15.7 MB/s eta 0:00:00Installing build dependencies: startedInstalling build dependencies:…

CVE-2017-12615 PUT方法漏洞复现

这里的端口出现占用问题&#xff0c;需要修改端口 使用nuclei工具 找到[CVE-2017-12615] [http] [high] http://192.168.142.151/poc.jsp?cmdcat%2Fetc%2Fpasswd 浏览器访问&#xff0c;获得/etc/passwd信息

lv3 嵌入式开发-5 linux shell命令(进程管理、用户管理)

目录 1 进程处理相关命令 1.1 进程的概念 1.2 查看进程的命令 1.3 发送信号命令 2 用户管理相关命令 2.1 用户管理相关文件介绍 2.2 用户管理相关命令介绍 1 进程处理相关命令 1.1 进程的概念 进程的概念主要有两点&#xff1a; 进程是一个实体。每一个进程都有它自己…

曾国藩农民出身,弯道超车实现逆袭的大智慧

曾国藩从小就笨笨的&#xff0c;读书多了才开窍&#xff0c;实现人生逆袭。农民出身&#xff0c;弯道超车&#xff0c;贵在坚持。 约翰生说过&#xff1a;“成大事不在于力量的大小&#xff0c;而在于能坚持多久。” 很多家长认为“不让孩子输在起跑线上”&#xff0c;这是错…

c++ day 2

1、封装一个结构体&#xff0c;结构体中包含一个私有数组&#xff0c;用来存放学生的成绩&#xff0c;包含一个私有变量&#xff0c;用来记录学生个数&#xff0c; 提供一个公有成员函数&#xff0c;void setNum(int num)用于设置学生个数 提供一个公有成员函数&#xff1a;v…

【送书活动】网络安全(黑客)自学

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

Unity 之利用Audio Source(音频源)组件用于播放声音

文章目录 Unity中的Audio Source&#xff08;音频源&#xff09;是一个用于播放声音的组件&#xff0c;通常附加到游戏对象上&#xff0c;以便在游戏中播放音频效果、音乐或对话。以下是Audio Source的详细介绍&#xff1a; 添加Audio Source&#xff1a; 要在Unity中使用Audio…