Java语法基础知识点1

news2025/2/28 12:22:03

目录

一、数组

1.1数组的初始化:

1.2数组的遍历方法:

1.3数组的常见使用方法:

二、类和对象

2.1构造方法:

2.2this关键字:

三、封装

3.1访问限定符:

3.2static关键字:

3.3代码块:


一、数组

1.1数组的初始化:

int[] arr={1,2,3,4};//   1   直接对数组初始化并含有初始值
int[] arr=new int[num];//  2   创建一个长度为num长度的数组,开始默认数组有num个0值
int[] arr=new int[]{1,2,3,4};//    3    初始化数组有四个值,系统会自动计算数组长度;

//二维数组初始化
int[][] arr={{},{},...,{}};//     4    与1类似

// 5    特别注意的是,二维数组有可能是不规则的,所以不能够new int[num][],否则会编译错误
可以new int[num1][num2],或者new int[][num];
int[][] arr=new int[][num];

//6    与一维数组的3类似
int[][] arr=new int[][]{{},{},...,{}};

1.2数组的遍历方法:

常见的有两种:

//1.for each遍历数组,缺点是不能获得数组下标的值,优点是简洁
int[] arr={1,2,3,4};
for(int x:arr){       //x是把每一个arr数组的值给到x,再打印,类似python中的for循环
    System.out.println(x);  
}

//2.常见的for(int i=0;i<arr.length;i++)

//3.二维数组遍历
for(int i=0;i<arr.length;i++){
    for(int j=0;j<arr[i].length;j++){
    }
}

1.3数组的常见使用方法:

1.升序排序       Arrays.sort(arr);

        int[] arr={3,4,2,1};
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));//{1,2,3,4}

2.数组打印字符串  Arrays.toString(arr);

3.数组拷贝  int[] arr2=Arrays.copyOf(arr,arr.length);    //特别注意的是,copyOf还具有对数组扩容的功能,具体要扩容多少,就看给的第二个参数的多少;

        int[] arr={3,4,2,1};

        int[] arr2=Arrays.copyOf(arr,arr.length);
        System.out.println(Arrays.toString(arr2));

Arrays.copyOfRange(arr,from,to); 这个方法可以决定拷贝数组的范围

        int[] arr={3,4,2,1};

        int[] arr2=Arrays.copyOfRange(arr,1,3);//范围是左闭右开
        System.out.println(Arrays.toString(arr2));//输出结果为4,2

4.合并两个数组  使用System.arraycopy();

int[] arr1={1,2,3,4};
int[] arr2={5,6,7,8};
int[] arr=new int[arr1.length+arr2.length];


//其中第一个参数是源数组,也就是要复制的数组
//第二个参数是从源数组的起始位置,也就是要从哪个下标开始进行复制
//第三个参数是目标数组
//第四个参数是从目标数组的起始位置,也就是在目标数组的哪个索引下标开始放置复制的元素
//第五个参数是要从源数组复制元素的个数
System.arraycopy(arr1,0,arr,0,arr1.length);
System.arraycopy(arr2,0,arr,arr1.length,arr2.length);

//最终结果为{1,2,3,4,5,6,7,8}

数组在Java中是如何存储的?

在Java虚拟机运行时数据区有5个:方法区,虚拟机栈,本地方法栈,堆,程序计数器

int[] arr={1,2,3,4};在这个数组中,arr是引用变量,存储在虚拟机栈中,如果我们直接输出的是arr,那么我们得到的结果就是这个数组的地址,而不是{1,2,3,4};而数组的值{1,2,3,4}存放在堆中

二、类和对象

2.1构造方法:

作用就是对对象中的成员变量进行初始化,并不负责给对象开辟空间,如果用户没有显示定义,那么编译器会自动生成一个无参的构造方法;如果用户定义了有参构造方法,那么编译器自动生成的无参构造方法就会消失,再想调用无参构造方法的话,编译就会报错

class Dog{
    public String name;
    public int age;

    //没有定义构造方法,但是编译器会自动生成一个无参的构造方法
    //类似public Dog(){},就是一个无参的构造方法,


    public Dog(String name, int age) {    //定义了有参构造方法,编译器自动生成的无参就消失,
        this.name = name;
        this.age = age;
    }
}
public class Test {
    public static void main(String[] args) {
        Dog dog1=new Dog();//编译器生成的无参构造消失,那么用实例化无参构造时就会报错
        Dog dog2=new Dog("小黑",7);//显示定义有参构造方法,实例化正确

    }
}

2.2this关键字:

this关键字用在构造方法当中的第一条语句,如果不是第一条语句,就会报错

特别注意的是,使用this关键字时,避免形成环,

    public Dog(){
        this("小黑",7);
    }
    public Dog(String name, int age) {    //定义了有参构造方法,编译器自动生成的无参就消失,
        this();    //形成环,变成递归构造
        this.name = name;
        this.age = age;
    }

三、封装

3.1访问限定符:

有四个

private,私有权限,安全性最高,在同一个包同一个类中能访问

default,包访问权限,只能在同一个包下访问

protected,包子权限,在同一个包下能够访问,在不同包的子类能够访问

public,公共权限,所有都能够访问

如果想要访问私有权限,那么我们要通过公共的方法进行访问,也就是通过get和set方法访问到私有成员变量

class Dog{
    private String name;
    private int age;
    public Dog(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 Test {
    public static void main(String[] args) {
        Dog dog=new Dog("小黑",7);
        System.out.println(dog.getName());//不能够直接访问dog.name,因为name是私有成员变量,只能通过getName()得到name的值,如果要设置name,那么可以通过setName方法修改
        System.out.println(dog.getAge());
    }
}

3.2static关键字:

static修饰成员变量/方法,那么这就意味着这个成员变量已经不是对象所特有的,我们可以通过类名.变量能够访问,就算不实例化对象,一样可以访问到被static修饰的成员变量或者方法,被static修饰的成员变量/方法叫做类变量/类方法。

class Dog{
    public static String name;
    public int age;
    public Dog(String name, int age) {
        this.name=name;
        this.age = age;
    }
    public static void Bark(String name){
        System.out.println(name+"汪汪叫");
    }
    public void Sleep(String name){
        System.out.println(name+"在睡觉");
    }
}

public class Test {
    public static void main(String[] args) {
        Dog dog=new Dog("小黑",7);
        System.out.println(Dog.name);//被static修饰,可以通过类名直接访问
        Dog.Bark(Dog.name);  //被static修饰,可以通过类名直接访问
        dog.Sleep(Dog.name);//不被static修饰,只能通过对象dog访问
    }
}

特别注意的是,在被static修饰的方法中,也就是在静态方法中,不能够出现任何非静态方法因为非静态方法中有this引用;相反,在非静态成员方法中却可以出现静态方法。

    public static void Bark(String name){
        System.out.println(name+"汪汪叫");
        Sleep(name);     //错误,有非静态成员方法
    }
    public void Sleep(String name){
        System.out.println(name+"在睡觉");
        Bark(name);  //正确
    }

如果在静态方法中非要用到非静态成员方法,只需要实例化对象,通过对象就可以访问到非静态成员方法了!

3.3代码块:

代码块有三种,静态代码块,实例代码块(构造代码块),普通代码块

静态代码块:用static定义的代码块,常用于初始化静态成员变量

实例代码块(构造代码块):定义在类中的且不被修饰符修饰代码块,一般用于初始化实例成员变量

普通代码块:定义在方法中的代码块

    public static String name;
    public int age;
    
    //静态代码块       1
    static {
        name="小红";
    }
    
    //实例代码块       2
    {
        this.age=9;
    }

    public Dog(int age) { //普通代码块       3
        this.age = age;
    }

需要特别注意的是,如果实例化对象之后,代码块的访问顺序是1,2,3;如果连续两次实例化对象,那么代码块的访问顺序就是12323,原因就是静态代码块只会执行一次,用完一次之后就会消失,也就访问不到静态代码块啦!

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

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

相关文章

【新手入门】SQL注入之盲注

一、引言 在我们的注入语句被带入数据库查询但却什么都没有返回的情况我们该怎么办? 例如应用程序返回到一个"通用的"的页面&#xff0c;或者重定向一个通用页面(可能为网站首页)。这时&#xff0c;我们之前学习的SQL注入的办法就无法使用了。这种情况我们称之为无…

python-leetcode-分割等和子集

416. 分割等和子集 - 力扣&#xff08;LeetCode&#xff09; class Solution:def canPartition(self, nums: List[int]) -> bool:total sum(nums)if total % 2 ! 0:return Falsetarget total // 2dp [False] * (target 1)dp[0] Truefor num in nums:for j in range(tar…

趣讲TCP三次握手

一、TCP三次握手简介 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议。在TCP连接中&#xff0c;只有两方进行通信&#xff0c;它使用校验和、确认和重传机制来保证数据的可靠传输。…

基于coze+微信小程序实现图片上传并利用大模型解析

项目截图&#xff1a; 实现代码&#xff08;直接搬去可用&#xff09; 前提&#xff1a;需要填写你的oss配置coze的api授权配置&#xff01;&#xff01;&#xff01; <template><view class"container"><!-- 高斯模糊背景 --><view class&qu…

VMware Fusion 虚拟机Mac版 安装CentOS 7 系统

介绍 CentOS是Community Enterprise Operating System的缩写&#xff0c;也叫做社区企业操作系统。是企业Linux发行版领头羊Red Hat Enterprise Linux的再编译版本&#xff08;是一个再发行版本&#xff09;&#xff0c;而且在RHEL的基础上修正了不少已知的 Bug &#xff0c;相…

java练习(44)

ps:题目来自力扣 两两交换链表中的节点 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 // 定义链表节点类&#xff0c;每个节…

Deepseek 开源周第一天:FlashMLA

Deepseek 隆重开启开源周!第一天我们迎来了FlashMLA。我很高兴带大家了解这项创新,揭秘 FlashMLA 为何能成为 AI 和 GPU 优化领域的变革者。 Deepseek 开源周的热门话题有哪些?

DeepSeek-OpenSourceWeek-第三天-Release of DeepGEMM

DeepGEMM:这是一款专为高效的 FP8(8 位浮点)通用矩阵乘法(GEMMs)而开发的尖端库。GEMMs 是许多 AI 工作负载(尤其是深度学习)中的基本操作。 特点: 支持稠密和 MoE GEMMs:它可以处理标准的稠密矩阵乘法以及混合专家(MoE)模型中使用的矩阵乘法。MoE 是一种神经网络架…

Bitlocker取证之PXE降级取密钥

支持到微软Surface pro系列。

.Net Core Visual Studio NuGet.Config 配置参考

Visual Studio 2022 NUGET NU1301 无法加载源 基础连接已关闭&#xff1a;无法建立SSL / TLS安全通道的信任关系&#xff1b;根据验证过程&#xff0c;远程证书无效&#xff0c;参考文章&#xff1a;https://blog.csdn.net/hefeng_aspnet/article/details/145780081 NuGet 行为…

Immich自托管服务的本地化部署与随时随地安全便捷在线访问数据

文章目录 前言1.关于Immich2.安装Docker3.本地部署Immich4.Immich体验5.安装cpolar内网穿透6.创建远程链接公网地址7.使用固定公网地址远程访问 前言 小伙伴们&#xff0c;你们好呀&#xff01;今天要给大家揭秘一个超炫的技能——如何把自家电脑变成私人云相册&#xff0c;并…

Apache-iotdb 基本概念

问题背景 定义&#xff08;写得太好了&#xff01;&#xff09; root 是整个树状结构的父节点&#xff0c; CirroData-TimeS 有存储组、设备、测点等概念&#xff0c;数据在存储的时候&#xff0c;不同的存储组的数据是存储在不同的文件夹中的。上图中有 root.sgcc、root.ln两…

CryptoJS库中WordArray对象支持哪些输出格式?除了toString() 方法还有什么方法可以输出吗?WordArray对象的作用是什么?

前言&#xff1a;这里只说js用的CryptoJS库里的相关内容&#xff0c;只用js来进行代码操作和讲解。 这里网上相关的帖子很少&#xff0c;不得已问了很长时间AI 想引用CryptoJS库情况分两种&#xff0c;一种是html引用&#xff0c;另一种是在Nodejs里引用。 一、引用CryptoJS库…

springboot浅析

springboot浅析 什么是springboot&#xff1f; 实际上springboot就是一个给我们提供了快速搭建使用spring的一种方式&#xff0c;让我们省去了繁琐的xml配置。 为什么无需进行大量的xml配置&#xff0c;就是因为springboot是基于约定优于配置的思想&#xff0c;简单来说就是遵循…

【文件基础操作】小笔记

Step1: 现在项目文件夹&#xff08;我的项目叫做RunPony&#xff09;下创建一个a.txt文本文件&#xff0c;手动写入一些数字&#xff0c;保存 Step2: 现在在main.c内写一个基本的文件处理的程序 Step3: 现在已经知道如何打开关闭文件&#xff0c;下一步要搞懂如何读取txt内的…

SSL 证书是 SSL 协议实现安全通信的必要组成部分

SSL证书和SSL/TLS协议有着密切的关系&#xff0c;但它们本质上是不同的概念。下面是两者的区别和它们之间的关系的表格&#xff1a; 属性SSL/TLS 协议SSL证书英文全称SSL&#xff08;Secure Sockets Layer&#xff09;&#xff0c;TLS&#xff08;Transport Layer Security&am…

AI问答-供应链管理:排队模型M/D/5/100/m/FCFS代表的含义是什么

在供应链管理中&#xff0c;排队模型M/D/5/100/m/FCFS代表的含义如下&#xff1a; M&#xff1a; 表示顾客到达时间间隔服从负指数分布&#xff08;Markov&#xff0c;负指数分布具有无记忆性&#xff09;&#xff0c;即顾客到达是随机的&#xff0c;且到达时间间隔服从指数分…

Linux驱动学习(四)--字符设备注册

上一节讲到的字符设备注册与销毁是通过cdev_init、cdev_add、cdev_del等函数分步执行的&#xff0c;本小节用一种更简单的方式&#xff0c;来注册字符设备 register_chrdev 如果major为0&#xff0c;该函数将动态的分配一个主设备号并且返回对应的值如果major > 0&#xff…

30天开发操作系统 第24天 -- 窗口操作

一、窗口切换 1.0 前天开始我们的应用程序可以显示自己的窗口了&#xff0c;现在画面上到处都是窗口&#xff0c;我们急需能够 切换窗口顺序的功能&#xff0c;使得在需要的时候可以查 看最下面的窗口的内容。这个功能看起来不难&#xff0c;我们马上来实现它。 不过&#xf…

Visual Studio 中 C/C++ 函数不安全警告(C4996)终极解决方案:分场景实战指南

问题描述 在 Visual Studio 中编写 C/C 代码时&#xff0c;使用 scanf、strcpy、fopen 等传统函数会触发以下警告&#xff1a; C4996: xxx: This function or variable may be unsafe. Consider using xxx_s instead. 根本原因&#xff1a; 这些函数缺乏缓冲区溢出检查&#…