手把手 从零开始学习JAVA(入门基础)

2023-05-16

1、搭建JAVA开发环境

卸载JDK(未安装的请忽略)

  • 将JDK的安装目录删除
  • 删除JAVA_HOME以及CLASS_PATH 环境变量
  • 删除PATH下与JAVA_HOME以及CLASS_PATH有关的环境变量

安装JDK

  • 去Oracle官网下载JDK或者去一些国内镜像网站下载JDK安装文件
  • 将JDK安装到本机中
  • 新增环境变量JAVA_HOME,指定路径为JDK的安装目录
  • 更新环境变量PATH,加入%JAVA_HOME\bin%、以及%JAVA_HOME\jre\bin%
  • 打开电脑DOS命令窗口,输入java -version以及javac命令判断java环境是否安装完毕

2、编程语言中,何为编译型与解释型

编译型

使用专门的编译器,针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。可以理解为有一个解释器,将所有的源代码编译成了硬件可以执行的机械码并直接执行,运行期间无需再次编译(速度快)

解释型

使用专门的解释器对源代码逐行编译成特定的硬件可执行的机械码并且直接执行

3、第一个JAVA应用程序

// 在dos命令行执行 javac HelloJava.java
// 执行 java HelloJava
// 输出结果:Hello JAVA
public class HelloJava{
public static void main(String[] args){
     System.out.println("Hello JAVA");
  }
}

4、JAVA之中的关键字有哪些

abstract   assert   boolean   break   byte   case 
catch   char   class   const   continue   default 
do   double  else   enum   extends   final   finally 
float   for   goto   if   implements   import   instanceof
int   interface   long   native   new   package   private 
protected   public   return   short   static   strictfp 
super   switch   synchronized   this   throw   throws 
transient   try   void   volatile   while 

5、注释的使用

// 这是一个单行注释
/*
  这是一个多行注释,我是第一行
  这是一个多行注释,我是第二行
*/

/**
  这是一个DOC文档注释
*/

6、标识符的定义规则

  //JAVA中定义的标识符只能是 字母[a-z][A-Z]、下划线_、美元符号$ 开头
  // 正确实例
  int name;
  int Name;
  String _str;
  String $str;

  // 错误示例
  int *1;
  int #1;

7、基础数据类型规则

JAVA的8个基础数据类型

  /**
    位bit是计算机最小的存储单位
    1个字节byte 占据8位,也就是1byte = 8bit
  */
  // 整数类型 
  byte 占据1个字节,范围为2^7 到 (2^7)-1
  short 占据2个字节
  int 占据4个字节
  long 占据8个字节
  // 浮点类型
  float 占据4个字节
  double 占据8个字节
  // 字符类型

  char 占据2个字节
  // 布尔类型,值只有true或false
  boolean 占据1位

数据类型面试题

  • 银行金额需要使用什么数据类型
    BigDecimal 类来存储金额
  • 为什么浮点数不能用来计算金额
    因为不够精确,会损失精度

基础数据类型转换规则

  • 自动转换规则
    向上转型,意思就是精度小的会向着精度大的进行转型,long与double进行运算后结果为double。
  • 强制转换规则
  // 在需要强制转换的变量前加入小括号 (数据类型)[变量名]
  // 只有向下转型时需要使用强制转换(意思就是精度大的转换为精度小的需要强制转换)
  // 强制转换时要注意丢失精度问题
  long long1 = 10;
  int int1 = (int)a1;

变量、常量、作用域

  // 局部变量的作用域仅限于当前方法
  // 成员变量只有创建了该类的实例才能使用
  // 类变量用类即可调用,作用于当前类

  // 使用了final修饰的变量就会变成一个常量
  // 变量,顾名思义,可以被多次重新赋值的一个值

算数运算符

自增自减运算符

  int a = 10;
  int b = a++; // 先赋值再加1,值为10,该行结束后a为11
  int c = ++a; // 先加1再复制,值为12

与或非运算符

  // 与 &&,两个都为true才为true, && 为断路与,只要左边为false,右边则不进行判断了
  // 或 ||,两个都为false才为false,否则为true
  // 非 ! ,将false取反为true,将true取反为false

位运算符 & | ^ ~ << >> >>>

  & | ^ ~
  /*
    计算机底层在运算时,会将其转换为补码形式
    1、正数的补码等于它的原码
    2、负数的补码等于它的原码 (取反 +1) , 而负数的补码转换为原码的时候则需要 (-1 取反)也就是逆运算
    3、补码与原码之间的转换时,最高位符号位不用取反
    4、使用~进行取反的时候,符号也要取反
    5、左移右移时记住一点细节,5>>3 = 5/(2^3) ,5<<3 = 5*(2^3) 
  */
  // 位运算的应用1:判断奇数偶数,一个数 &1,如果结果为1则是奇数,否则为偶数
  int num = 10;
  String result = (num & 1)==0 ? "偶数" : "奇数";
  /*
    位运算的应用2:使用异或^完成两个数之间的值交换
    原理:一个数异或自己,再异或一个其他的数,就会变成那个其他的数,例如: 5 ^ 5 ^ 8 = 8,因为5^5之后结果得0,所以再^8时结果为8
    两个数字a与b进行交换,a = a^a^b,b = b^b^a;可以看到一个规则,其中两个等式右边都有一个 a ^ b
 
  */
  int a = 10;
  int b = 20;
  // 由于等式右边都有一个a ^ b
  a = a ^ b;
  // a 等于了 a^b时,b只需要用自己 ^ 一次a 就可以得到a的值
  b = b ^ a;
  // 而这个时候 a只需要再^一次自己当初的值即可得到b的值,自己的当初的值已经赋值给了b,所以再^ 一次b即可
  a = a ^ b;
  System.out.println("这时a的值等于:" + a + " b的值等于:" + b);

javadoc生成java文档

  @author 作者名
  @version 版本号
  @since  指明最早使用的jdk版本
  @parram 参数名
  @return 返回值
  @throws 所抛出的异常

  生成javadoc时,需要使用的命令: javadoc -encoding utf-8 -charset utf-8

流程控制

switch

  // switch语句中只能编写byte、short、int、char,在jdk1.7时可以使用String

递归思想

  递归就是方法自己调用自己,但是递归调用的空间复杂度较高,容易出现栈溢出
  例如使用递归编写一个可以计算出阶乘的
  
  public int factorial(int baseNum) {
    if (baseNum == 1){
      return 1;
    }else {
      return baseNum * factorial(baseNum - 1);
    }
  }

java内存 栈、堆、方法区、常量池

  • 存放对象的引用(地址)
  • 存放基本类型的变量(包括值)

  • 存放new出来的对象及数组

方法区

  • 存放所有的class文件
  • 存放static修饰的方法及其变量

数组的三种初始化及基本特点

静态初始化

int[] arr1 = {1,2,3,4};
String[] arr2 = {new String("s1"),new String("s2")};

动态初始化(包含默认初始化,及对应的数据类型的默认值)

int[] arr2 = new int[10];

数组的基本特点

  • 数组长度一旦确定就不能够改变
  • 数组只能是固定类型,不能为混合类型(数组中的每个元素都必须为相同类型)
  • 数组中的元素可以是基本类型,也可以是引用类型
  • 数组创建出的对象存放在堆中,引用存放在栈中
  • 并且数组本身即为一个对象

关于二维数组的理解

可以理解为一个数组里装了多个一维数组

数组的选择排序与冒泡排序

  // 冒泡排序
  public static void bubbleSort(int[] arr) {
        // 确定循环次数
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if(arr[i] < arr[j]){
                    // 交换
                    arr[i] = arr[j] ^ arr[i];
                    arr[j] = arr[j] ^ arr[i];
                    arr[i] = arr[j] ^ arr[i];
                }
            }
        }
    }

  // 选择排序
  public static void selectSort(int[] arr) {
        // 确定循环次数
        for (int i = 0; i < arr.length - 1; i++) {
            // 每次循环都需要得到一个最大或最小的值
            for (int j = i + 1; j < arr.length; j++) {
                if(arr[i] < arr[j]){
                    // 交换
                    arr[i] = arr[j] ^ arr[i];
                    arr[j] = arr[j] ^ arr[i];
                    arr[i] = arr[j] ^ arr[i];
                }
            }
        }
    }

权限修饰符

  权限修饰符       本类       当前包      不同包下的子类      不同包
    private        √
  default(默认)     √           √
   protected       √           √              √
    public         √           √              √              √

多态中、方法的编译看左边,运行看右边,变量的编译与运行都看左边

记住一点,static修饰的方法不能被重写,所以调用static修饰的方法,编译运行都看左边,而变量无法被重写,所以编译运行也都看左边

public class A {
    public static void main(String[] args) {
        Father father = new Son();
        System.out.println(father.a);
        System.out.println(father.b);
        father.show();
        father.staticShow2();
    }
}

class Father{
    int a = 10;
    static int b = 20;
    public void show(){
        System.out.println("父类的成员方法");
    }

    public static void staticShow2(){
        System.out.println("父类的静态方法");
    }
}
class Son extends Father{
    int a = 100;
    static int b = 200;
    @Override
    public void show(){
        System.out.println("子类的成员方法");
    }
    public static void staticShow2(){
        System.out.println("子类的静态方法");
    }
}

super关键字与this关键字的区别

super

  • super 调用父类的构造方法,必须放在构造方法的第一行
  • super 必须只能出现在子类的成员方法或者构造方法中
  • super和this不能同时调用构造方法!(因为会初始化多次,数据不安全)

this 与 super的区别

  • this为当前对象的引用
  • super为父类对象的引用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

手把手 从零开始学习JAVA(入门基础) 的相关文章

  • 嵌入式软件:通过串口进行调试的一些思考和实践

    最近的工作还是改那坨代码 维护这摊东西也快要2年了 xff0c 好几次想重构它 xff0c 顺便整理一下 xff0c 不过我还是缺乏那种毅力 在这段时间里我还加了一些功能模块 xff0c 估计如果以后有新人接手这摊东西 xff0c 会抱怨这
  • 串口调试助手没有显示

    用cubeMX生成工程之后 xff0c 笔者写了下面两句话 xff08 向串口发送一个字符串 xff09 xff1a 但是 xff0c 打开调试工具怎么也接受不到数据 xff0c 魔术棒里面的 芯片型号 xff0c 调试 xff08 J L
  • vscode使用gitee

    vscode使用gitee 首先选择文件夹右键用vscode打开 然后打开vscode的终端 xff1a 在终端输入命令 xff1a xff08 每行命令输入完成之后记得敲回车 xff09 xff1a git init然后敲回车就有 xff
  • 深度揭秘阿里(蚂蚁金服)技术面试流程!附前期准备,学习方向

    上半年公司的项目很闲 xff0c 很多人觉得没意思陆续走了 xff0c 我考虑到自己的发展 xff0c 从6月底开始面 xff0c 面到7月底 xff0c 三十家公司 我从不打没准备的仗 xff0c 我是一个喜欢总结经验的人 xff0c 每
  • Git 中submodule的使用,终于有人说明白了

    背景 面对比较复杂的项目 xff0c 我们有可能会将代码根据功能拆解成不同的子模块 主项目对子模块有依赖关系 xff0c 却又并不关心子模块的内部开发流程细节 这种情况下 xff0c 通常不会把所有源码都放在同一个 Git 仓库中 有一种比
  • git 工具GitEye使用

    二 xff1a 签入 右键commit 可以选择需要签入的 xff0c 要加入注释才能签入 一 xff1a 比较
  • ROS笔记十(基于Python、Kinetic):rviz基础——快速配置并渲染点云和摄像机图像数据

    前言 xff1a rviz xff08 ROS visualization xff09 xff1a 用于机器人 传感器和算法的通用3D可视化系统 rviz能够绘制多种类型的数据流 特别是三维的数据 在ROS中所有类型的数据都被关联到一个参考
  • java面试必看书单

    编程之法 https legacy gitbook com book wizardforcel the art of programming by july details 白话经典算法之七大排序 链接 xff1a https pan ba
  • Java基础 - Integer和int的区别

    一 int和Integer的区别 两者的区别主要体现在以下几个方面 xff1a 1 数据类型不同 xff1a int 是基础数据类型 xff0c 而 Integer 是包装数据类型 xff1b 2 默认值不同 xff1a int 的默认值是
  • Lua + GraphicsMagick安装

    Lua 43 GraphicsMagick安装 图片的实时缩放功能是Nginx调用Lua脚本 xff0c Lua脚本在FastDFS中下载对应的图片保存到本地 xff0c 然后Lua调用GraphicsMagick实现图片的缩放功能 1 安
  • 零基础应该选择学习 C、C++、Java、python、web前端、C#、PHP、Linux选哪个编程语言好呢?

    众多的语言 xff0c 到底哪一门才是适合我呢 xff1f 小白 xff1a 大佬 xff0c 大佬 xff0c 编程语言也太多了 xff0c 到底我应该选择哪一种呢 xff1f 大佬 xff1a 首先呢 xff0c 我们先对常见的编程语言
  • 如何看英文技术文档

    https www jianshu com p af7d39cac6b8
  • 从工具的奴隶到工具的主人

    摘要 xff1a 我们每个人都是工具的奴隶 随着我们的学习 xff0c 我们不断的加深自己对工具的认识 xff0c 从而从它们里面解脱出来 现在我就来说一下我作为各种工具的奴隶 xff0c 以及逐渐摆脱它们的思想控制的历史吧 当我高中毕业进
  • 程序员,这四个学习建议值得收藏

    大家好 xff0c 我是本周的值班编辑 江南一点雨 xff0c 本周将由我为大家排版并送出技术干货 xff0c 大家可以在公众号后台回复 springboot xff0c 获取最新版 Spring Boot2 1 6 视频教程试看 在我看来
  • 底层原理解析

    目录 HashMap底层原理 xff1a ConcurrentHashMap 底层原理 HashMap底层原理 xff1a 1 HashMap概述 xff1a HashMap是一个散列桶 xff08 数组和链表 xff09 xff0c 它存
  • Java ServerSocket & Socket 实现 单组【客户端⇄服务端】双工通信(双向通信)

    Server java 服务器端开启服务 package com example socket service import lombok SneakyThrows import java net ServerSocket import j
  • docker搭建容器过程

    docker 环境创建 配置apt国内镜像源 备份源 span class token function cp span etc apt sources list etc apt sources list backup span class
  • FreeRTOS进程间通信-消息队列

    消息队列是进程间的一种通信机制 xff0c 实际项目运用很多 1 什么是消息队列 xff1f 2 消息队列API函数 3 在进程间通信使用消息队列 4 在中断中使用消息队列 1 1 消息队列是什么 xff1f 消息队列是realtime o
  • 三十岁了从零开始学python还有前途吗?很迷茫啊

    对于学习这件事 xff0c 我一直认为没有时间先后 xff0c 啥时候学习都不晚 xff0c 不管你现在年龄多大 xff0c 只要有心想学习 xff0c 一切都好说 首先 xff0c 你要学的python是属于技术类的知识 xff0c 对于
  • SpringBoot:使用Caffeine实现缓存

    在本博客中 xff0c 我们将探讨如何使用Spring的缓存框架向任何Spring Boot应用程序添加基本缓存支持 xff0c 如果没有正确实现 xff0c 还将探讨缓存的一些问题 最后但并非最不重要的一点是 xff0c 我们将看几个在真

随机推荐

  • 树莓派结合PIXHAWK飞控实现四轴双目视觉避障

    树莓派结合Pixhawk飞控实现四轴双目视觉避障 灰信网 xff08 软件开发博客聚合 xff09 无人机双目视觉避障的实现 本文将介绍如何使用树莓派结合PIX飞控实现无人机双目视觉避障的功能 主要硬件 我们以双目摄像头 43 树莓派 43
  • ::在c++中什么意思

    好多年没有用c 43 43 了 xff0c 今天在研究深度学习部署框架ncnn xff0c 看到这个突然想不起来了 xff0c 就查了一下资料 34 34 在C 43 43 中表示作用域 xff0c 和所属关系 34 34 是运算符中等级最
  • 基于Jetson Nano嵌入式平台的YOLOV3-tiny模型部署

    1 嵌入式平台简介 嵌入式是指可以嵌入设备或装置的特殊计算机系统 一般来说 xff0c 具有数字接口的设备都有嵌入式系统 xff0c 如手机 车载电脑 智能手表等 xff0c 而嵌入式人工智能则是使人工智能算法能够在终端设备上运行的技术概念
  • 机器人操作系统ROS—深度相机+激光雷达实现vSLAM建图与导航 转载

    原文 xff1a 机器人操作系统ROS 深度相机 43 激光雷达实现vSLAM建图与导航 wx5d23599e462fa的技术博客 51CTO博客 这次将带大家学习如何使用深度相机实现机器人的视觉SLAM建图及导航 目录 一 概述 1 深度
  • 程序员教你用代码制作飞翔的小鸟--Java小游戏,正好拿去和给女神一起玩

    先点赞后观看 养成好习惯 一 写在前面 xff1a 飞扬的小鸟 是一款曾经比较火热的小游戏 语言 Java工具 IntelliJ IDEA xff0c JDK 16 二效果图 xff1a 代码部分 代码如下仅供参考 可以直接拿去复制粘贴 p
  • 深入理解Java枚举类型(enum)

    版权申明 未经博主同意 xff0c 谢绝转载 xff01 xff08 请尊重原创 xff0c 博主保留追究权 xff09 http blog csdn net javazejian article details 71333103 出自 z
  • 秋招面试上岸经验分享

    学弟学妹们好 xff0c 我是18级14班的刘文豪 xff0c 很开心能在这里给大家分享一些我最近的面试经历 从21年6月28号第一场面试金山西山居 xff0c 到21年11月29号最后一场面试理想汽车 xff0c 大大小小的面试自己也经历
  • JT905实现(一):协议的简单讲解

    目录 背景 主线 协议 1 各方关系 2 协议简介 背景 最近在做905协议 xff0c 本想着靠着度娘扒拉下代码参考一下 xff0c 发现资源非常有限 xff0c 于是就只有自己动手实现了一番 xff0c 也踩了几个坑 本着开源共享的精神
  • 世界上应用最广泛的算法之一的卡尔曼滤波算法原理-从放弃到精通-无人机/机器人应用

    导读 xff1a 随着传感技术 机器人 自动驾驶以及航空航天等技术的不断发展 xff0c 对控制系统的精度及稳定性的要求也越来越高 卡尔曼滤波作为一种状态最优估计的方法 xff0c 其应用也越来越普遍 xff0c 如在无人机 机器人等领域均
  • Java程序员面试简历模板(30套简历模板+300套简历)

    需要免费领取简历模板和简历套装欢迎加群862461829 群里还含有 xff1a Java80g学习视频 43 Java学习书籍 43 Java项目实战源码 43 安装软件等 各类资源都有哦 简历是你吸引面试官的第一步 xff0c 如何让你
  • 中国程序员之我还是一名说唱歌手

    双重身份 List item 小编虽然也是一名程序员但是我的隐藏身份其实是一名说唱歌手 xff0c 没错就是你们口中的 rapper xff0c xff0c 而对于很多人有这样的双重身份早已见怪不怪了 xff01 哈哈哈我来举个例子吧 xf
  • MapReduce小文件问题

    MapReduce小文件问题 1 小文件处理的弊端 1 每个小文件都要执行一次map任务 增加map任务的开销 2 小文件太多 会耗费很多时间去寻址 3 需要记录小文件的元数据 造成namenode的内存浪费 2 解决办法 1 尽量避免出现
  • Docker之Dockerfile

    Dockerfile介绍 构建步骤 xff1a 1 编写一个dockerfile文件 2 docker build 构建一个镜像 3 docker run 运行一个镜像 4 docker push发布镜像 xff08 DockerHub 阿
  • 编程为了什么?到底什么才是真正的程序员

    第一章 我非常幸运出生在一个电脑和电子游戏还没有普遍的时代 所以我可以和我的小伙伴们一起玩耍 xff0c 同时发明属于我们的游戏 我们十分会玩 xff1a 用树枝做成 39 x1f3f9 39 我们可以用树枝做出任何东西 xff0c 除 3
  • Spring 4 支持的 Java 8 特性

    Spring 框架 4 支持 Java 8 语言和 API 功能 在本文中 xff0c 我们将重点放在 Spring 4 支持新的 Java 8 的功能 最重要的是 Lambda 表达式 xff0c 方法引用 xff0c JSR 310的日
  • 别再问我阿里面试流程了!!!P8 面试官 花了一个月整理了这份 4000 字的 面试流程

    本文转自我的一个同事 程序亦非猿 xff0c 他是社招进入阿里的 xff0c 花了几个星期整理了一下阿里面试的全流程 xff0c 吐血推荐收藏啊 文中的我指的是 程序亦非猿 写在前面 xff0c 本文的内容不是阿里官方出品 xff0c 只是
  • 作为一技术人员,面试前都需要做哪些准备?

    前言 面试前对目标公司 xff0c 岗位要求及面试流程有所了解 xff0c 这样才可以有针对性的突破 xff0c 我们来看以下几个方面 xff0c 相信可以帮助大家解决大部分求职迷茫的问题 第一 xff0c 常见的技术人员发展路径 和竞争要
  • 面试专场:spring+jvm+微服务+kafka+MongoDB五类面试题

    三面大概九十分钟 xff0c 问的东西很全面 xff0c 需要做充足准备 xff0c 就是除了概念以外问的有点懵逼了 xff08 呜呜呜 xff09 回来之后把这些题目做了一个分类并整理出答案 xff08 强迫症的我 狂补知识 xff09
  • jsoninclude.include.non_null 不起作用问题

    在开发过程中 xff0c 遇到在属性上加jsoninclude include non null注解 xff0c 有些属性起了作用 xff0c 有些却没有起作用 xff0c 下面使用代码简要说明一下 xff1a 64 Data public
  • 手把手 从零开始学习JAVA(入门基础)

    1 搭建JAVA开发环境 卸载JDK xff08 未安装的请忽略 xff09 将JDK的安装目录删除删除JAVA HOME以及CLASS PATH 环境变量删除PATH下与JAVA HOME以及CLASS PATH有关的环境变量 安装JDK