Java? 哼,看我手拿把掐

零  前集回顾   

        终于,为了不拖累孩子,我+选择了自我了结。痛苦吗?当然痛苦。回首我+的一生,仿佛就像流水线上的产品,被社会这个庞大的机器无情地推动着。从小学开始,就被要求好好学习,打好基础,为了升中学;中学则是过渡阶段,依旧要努力学习,为了升高中;高中更是要冲刺,为了那场决定命运的高考。高考之后,人生的道路便分出了岔口。不适合走学术之路的,便进入社会或机构,锻炼技能,谋求生存;而适合继续深造的,则继续升学,追求更高的学历。但在我+看来,学历仅仅能代表一个人的学习能力,而无法证明他的全部价值。那时,喜欢计算机老师,觉得他好有魔力呀,电脑就像是他一样,电脑只听他的话,而他也因为计算机站展现了他的才华一面,在我们心中高大了许多。

        毕业后,由于学校的教学和公司所需能力中间需要培养来作为桥梁,所以我+放弃了,转而马上投入了非本专业的工作,我+从事着与大家相差无几的工作,没有不可替代性,年轻的新人稍加培训便能替代我+这个工作了十年的老员工。然后,要去找男朋友,结婚,生子,挣钱。这一生,我+仿佛都在为别人而活,从未真正考虑过自己的感受。小时候,为了懂事,没有玩过自己真正喜欢的玩具;长大后,为了学习和工作,没有去过自己向往的地方;青春岁月,没有率真热血地勇敢追求过梦想;老了之后,更是没有时间停下来,好好去阅读前人的历史和书籍。想看嘛?有兴趣嘛?当然,但又有哪个阶段能真正停下脚步,去驻足欣赏呢?学生时代要忙于应试复习,长大后则要为现实而努力奋斗。在公司换了几批员工后我望着楼上办公室里那一批老旧喝咖啡的人们发了呆?真厉害,有技术,有不可替代性就没那么容易撼动啊,他们是叫什么?我+问一起被淘汰的同事,“谁知道呢,听小李提过好几次,是程序员儿吧,修过好几次公司故障,是弄电脑的高级人才呢,咱这辈子就别想了” “哦,程序员”我+点点头,喃喃自语的回头拎着自己的行李,“人家高级人才,咱别想了,这一辈子我!”回想劝我+这几句,又想到失业了,家里的房租水电,柴米油盐酱醋茶,孩子的衣服,学费,人情往来,每天一醒就是3000左右的钱要花,现在又失业了,回家怎么面对孩子可爱的模样呢,我+才不要我的孩子像小时家里贫瘠的我+一样那么早就懂事,被催熟,她本可以不考虑这些的,如果我+努力些,如果我+是那个程序员,可那差太多了,我+怎么把日子过成这样?莫名有一股委屈的感觉涌上鼻尖,我+不想对比,我+明知道凡是最怕对比的,我+明知道的但就是难受,不知道怪谁,只是心里堵得慌,越控制自己不去想,越觉得自己逼着懂事又在克制内心的自己不让释放,不让发泄委屈。如果可以,真想回到家大哭一场,一会就好,不会太久,不会闹的,就让我释放,让我说+出后悔自己,让我+这个出门给老人让座,总把你好,麻烦,谢谢挂在嘴边,总是双手接,壶嘴对着自己,干杯杯口总低于长辈的真诚的我发出来一场吧哪怕是无声的。然后哭累了,睡在暖和有安全感的小被窝里,等着爸妈大声喊我+吃饭,而我还要故意懒一下。可惜没有如果了,我+的后面没有人,没有可依赖的了,遇到事要我+自己承担想着解决了,我+也是家里孩子的背后的人了。人总归还是要靠自己的。

        月亮啊,月亮,你见过多少像我+一样命运多舛的古人呢?你又曾多少次疼惜地为他们铺出一条回家的路呢?此生已了,我只希望孩子能够为自己而活。有些话年轻人即使听了也是不会懂的,总要自己试试才体会的到。人教人,往往效果不佳;但事教人,却是一教一个准。

        还是留给他几句话吧:

                第一句“如果你有烦恼,那是因为你想得太多,做得太少。”

                第二句,遇事多说"小问题/问题不大"会无形中给你积极地心理暗示的.

                第三句,知道你胆小,别怕,以后下边你也有亲人了,会在身边保护你的.

        我+闭上眼,又缓缓睁开,仿佛看到了已故的亲人来接我+。他们看起来年轻了许多,而我也变回了小孩。真好,一切都重新开始了。

        耳边传来了滋滋的声音,我+迈开步子,走进了一条漆黑而又跳动着绚烂色彩的走廊。这感觉,就像是来到了电影院一般。我+推开门,见到了许多个“我”,而大荧幕上正在播放的,正是我+一生的片尾。一个兄弟走过来,拍了拍我+的肩膀说:“哎,这一世你也混得不怎么样啊。”我们相视一笑,坐下一起观看。看来,下一个“我”要登场了。

"**************************************本册结束,下册开启********************************************"

        轮到我登场了。这一次,我的目标只有一个——家族的崛起。一个家族的崛起,至少需要三代人坚持不懈的努力。我出生在南波万,由于前一代祖先的辛勤付出,我们家从村里的土房搬进了二线城市的楼房。而这一世,家中的大哥也在努力维持着家中的收入,三妹还小,正要上大学。为了帮助家里,也为了早日实现成功(有钱就等于成功吗?),我决心不再让上一世哥哥因缺乏资金而陷入困境的悲剧重演。我要崛起,我要发奋图强。时代的智能化为我提供了崛起的机会。起势!

Java,我回来了!这一世,我一定要拿下你!

学习目标:

                了解: 听/看一遍即可(知道没大用,但不知道很low)

                重要: 看/练3遍起步

                理解: 要听第二遍视频的.(需要理解的往往是很难的,该内容多体现在面试)

字体颜色为紫色==>个人理解/批注/细节/易错点

一、Java基础入门(了解)

1.常识

  Java  读作 "加挖"

1.1 Java背景

  1. Java是美国 sun 公司(Stanford University Network)在1995年推出的一门计算机高级编程语言。java已经29岁了
  2. Java 之父:詹姆斯·高斯林(James Gosling)。高司令健在
  3. 2009年 sun公司被Oracle公司收购。 

                

           

1.2.为什么学Java

  1. 世界上最流行的编程语言之一,在国内使用最为广泛的编程语言
  2. 功能最丰富,可以用在大部分的项目开发中
  3. 可移植性、安全可靠、性能较好,开发社区最完善

1.3.Java能做什么?

企业级应用开发

1.4.Java技术体系

技术体系

说明

Java SE(Java Standard Edition):标准版

Java技术的核心和基础

Java EE(Java Enterprise Edition):企业版

企业级应用开发的一套解决方案

Java ME(Java Micro Edition):小型版

针对移动设备应用的解决方案

 小结

        Java一门 高级 编程语言

        Java是 美国sun公司 研发的,现在属于 oracle 公司

        Java之父是 詹姆斯·高斯林

        Java主要是来做 企业级 应用开发的

        Java的三大技术体系是:Java SE(标准版),Java EE(企业版),Java ME(小型版)

  

2.JDK(重要)

    2.1 简介

         2.1.1 JDK定义

             Java语言的产品是 JDK(Java Development Kit :Java开发者工具包) ,必须安装JDK才能使用Java语言

          2.1.2 JDK组成(待完善)
                1.JDK的组成

小结

                2.Java的跨平台原理

                        什么是跨平台?

                          Java写好的代码可以做到一次编译,处处可用

小结

        1.Java的跨平台是什么含义?

             一次编译、处处可用

        2.Java如何实现跨平台的?

            Java为不同的系统提供了不同类型的JVM

            我们的程序只需要开发一次,就可以在各种安装了JVM的系统上运行

        3.JDK安装后Path和JAVA_HOME环境变量

问题导入:假定我们现在需要查询idea的版本,怎么做?

        那我们首先需要win+R键打开命令提示符黑窗口,在里面输入 java -version,回车就打印出来了,结果如下图所示

                

那么我们就可以想一想,

         Q1: 你在这里敲了"java -version"是不是相当于调了一段代码然后给你打印出结果来  那么调的到底是谁?我随便敲一个"javaxxxxxx -version"行不行呢,

        哎你会发现 不行,提示这是一个不能识别的命令,也就意味着它不是乱找的,那么它找的到底是谁呢?

      answer1: 注意,它找的就是之前我们学到的java.exe   ====>

那么我又有问题了

      Q2: 我是在C:\Users\xinming这个目录下(在黑窗口界面中 想要复制内容 就选中内容后点鼠标右键 )调用的,那我去看了看这个目录下并没有找到java.exe文件呀

那计算机怎么会找到的呢,计算机也不能不讲道理呀,那我们猜测它肯定还是来存java.exe的目录[D:\dev\jdk-17.0.4.1\bin]里找了,只有这里有,在这里找到了java.exe,然后调用了

Q3:计算机怎么知道在这个目录下会有java.exe呢

A3:这就是我们之前配的一个东西的作用了,叫做 Path (译为路径)

        右键此电脑-属性-高级系统设置-环境变量-系统变量中找到已配置的path,双击打开

仔细看,%JAVA_HOME%中                                         |    int ab=10;  

                JAVA_HOME:相当于字符串                        |    ab:是个字符串

                 %%:在windows系统中相当于变量引用      |     sout(+ab);相当于引用ab了,ab存的值为10

     所以,%JAVA_HOME%就是在引用JAVA_HOME,   要使用它里面存的东西,而它里面存的就是通往java.exe的路径地址

Q4:那它从哪定义的呢?

A4:注意,我们在配Path之前还配过一个东西,就叫做JAVA_HOME,你看

所以 %JAVA_HOME%就被JAVA_HOME里存的路径替换了,

%JAVA_HOME%    \bin

D:\dev\jdk-17.0.4.1    \bin

Q4:我也没在那个目录下搜呀?

A4:别急,因为不管你在那个目录下开始搜索,电脑都会

        1)搜索你的当前路径,看有没有,没有的话

        2)还会去电脑的path路径中找

结论一:

结论二:

如果以后你弄了一个程序,想在任意位置都能执行这个程序,你就需要把这个程序的执行路径放到path里.(若命令行窗口未关,需关闭重新打开)

          2.1.3发展史:

LTS:官方长期支持维护的,目前有8、11、17.

2年以前:任你千变万变,我只用8;

近两年11的比重突飞猛进,所以目前最重要的版本是11;

17有的公司在用,但毕竟不是主流.

   2.2 JDK的安装

      2.2.1 JDK的获取

       去Oracle官网( 官网地址:   Java Downloads | Oracle  )下载JDK。

        2.2.2 配置JDK环境变量

        

       2.2.3 验证安装(方式:查询JDK的版本号):

注意:改完环境变量后,如果之前的 命令提示符黑窗口 一直没有关,则需要关掉重新打开  命令提示符黑窗口.此时再进行下面步骤:

  1. 按下 Win + R ,在运行输入框中输入 cmd,敲回车。
  2. 在命令行 窗口中分别输入 java –version看版本提示,如果版本提示与自己安装的版本号一致,则代表JDK环境搭建成功。
      2.2.4 JDK 常用命令       

           Javac(编译工具) 和 java(执行工具)介绍

说明:

  1. 将来我们写好的Java程序都是高级语言计算机底层是硬件不能识别这些语言
  2. 必须先通过javac编译工具进行翻译,然后再通过java执行工具执行才可以驱动机器干活。
  3. 这两个是有顺序的,一定是先编译后执行.
小结

        搭建java开发环境必须先要安装 JDK

        JDK应该去 oracle 官网下载

        JDK目前发展到22.0版本,LTS版本有3个版本分别为8.0 ,11.0 ,17.0

        验证JDK,需要在命令行窗口中输入 java -version查看jdk的版本号

        Java开发环境中的编译命令是 javac, 执行命令是 java

2.3 JAVA 入门程序

课堂引入:

    需求:你要给美国笔友发你好  那么就会出现一些小问题

        Q1,我知道汉语,她不知道汉语但知道英语,  我和她说汉语她听不懂

        Q2,即使她能懂我意思了,但我们两个人在两个国家,对我们人来说太远了

     怎么办呢,好,那我们应该想出来了

        A1.我们通过一个翻译:  "你好"-----翻译-------"Hello" 这样就能美国笔友看懂了

        A2,我们通过邮箱工具来拓展人的活动范围,      邮箱把  翻译后的结果  发送给 美国笔友

这样她既能看懂也能收到信了.因为是入门第一个程序,所以例子我讲的多一些,目的是大家能够初步理解这个执行流程并开始慢慢养成计算机方面的思维.多代入计算机,多想计算机会怎么做.

 Gmn老师:好,接下来我们引出主题,信息化时代到了,有些事我干着太累了,那么我想能不能利用起来,让计算机这个工具去干我的活,就像让计算器帮我算我想算的数一样呢??可以!但你要先解决两个问题;

        Q1 我对你说人类语言,你能懂、我对机器说什么话它能懂?

       小明:机器语言嘛?

Gmn老师:没错,机器语言确实存在也确实是机器能识别的语言,那有人就问了,GMN老师呀,这个语言难不难,那我如果要指使电脑做事,岂不是每天都要写机器语言了。你放心首先,机器语言难,但我们不用写,因为那个太难写了,所以先行者们一步步钻研,研究出了高级语言Java,所以,你会用Java语言就可以了。那缩小到一个小事究竟是什么流程?抓住javac

        Q2 只懂不行呀,我还要让计算机帮我把这件事做出来,办了呀。那它怎么执行呢?抓住java往下看:

  程序开发的三个步骤:1.编写代码  2.编译代码  3.执行代码

注意事项:

  1. 第一个Java程序建议使用记事本书写。
  2. 强烈建议(强制)代码文件名全英文,首字母大写,源代码文件的后缀必须是.java

&编写代码:

第一个程序代码如下:

上图代码说明:生成一个公有的类,名字叫做HelloWorld,

注意:

        1.文件名称必须与代码中的类名称一致。(信是给Tom的,内容标头也应该是Tom)

         2.括号都是成对出现的.

  保存文件:ctrl + s

&&编译代码:

javac 文件名.java

范例:javac HelloWorld.java

注意:假定在查看文件时

        应出现:   但实际:

        这是因为你电脑的文件扩展名被隐藏了

解决:

&&&运行代码:

Java 类名

范例:java  HelloWorld    !!!注意此处直接写类名即可,不写后缀

小结

        1.  开发一个Java程序要经过的三个步骤是:编写代码,编译代码,执行代码

        2.  Java代码要求:文件名称的后缀必须是 .java结尾

        3.  Java代码要求:文件名称必须与  名称一致

        4.  Java代码要求:必须使用 文模式下的符号

回顾一下:今天我们做了这样一件事,

1)创建一个记事本,命名为Hello World.txt(此处注意文件扩展名),在记事本里面用java语言定义了一个名为Hello World的类(此处注意,类型必须与文件名相同),在类里调用了打印输出方法让计算机打印输出 内容为“Hello World”。记事本内至此结束;

2)对记事本重命名,将其后缀.txt修改为.java  ,而后(在该文件所在目录,有疑问查询2.2.2)打开命令提示符窗口按照 ”javac 文件名.java“ 格式调用javac工具对java文件进行编译,编译结束后,新生成一个以.class为后缀的 我们称为字节流文件

3)最后,我们再次(!在该文件所在目录)打开调用命令提示符黑窗口,按照 ”Java 类名“ 格式(注意,此时不带后缀.java)调用运行工具java对字节流文件执行运行操作。

4)执行后。可以看到 ”Hello World“在下面被输出

        细心的小伙伴可能已经看出来了,以上,第一步就是 编写代码,第2步-->编译代码;3)------------->运行代码

3.IDEA使用

 3.1 背景

        3.1.1 IDEA开发工具概述

          之前的开发工具存在一些问题

  1. 文本编辑工具: 记事本 、 NotePad++、 EditPlus、 sublime…
  2. 编写代码时没有错误提醒、没有智能代码提示、需要自己进行编译、执行,功能不够强大

           集成开发环境( IDE, Integrated Development Environment )

注意!!!   IDE是一类软件,IDEA是其中一个软件,就是IDE是一个概念上的东西,比如说是人,而idea具体到了某一个,比如说是你。idea是把代码编写,编译,执行等多种功能综合到一起的开发工具,可以进行代码智能提示,错误提醒,项目管理等等

      常见的Java  IDE工具有:Eclipse、MyEclipse、IntelliJ IDEA、Jbuilder、NetBeans等

  1. IntelliJ IDEA 一般简称IDEA,在代码错误提醒,智能代码补全等多方面表现的都非常优秀,是进行Java开发时,很多企业首选的开发工具。
3.1.2 IDEA 的下载、安装

下载链接:https://www.jetbrains.com/idea/

安装方式:基本上是傻瓜式安装,建议修改安装路径(不要安装在有空格和中文的路径下)。

  

3.2 四层+启动

IDEA管理Java程序的结构

  1. project(项目、工程)----------------->省
  2. module(模块)----------------->市
  3. package(包)------------>乡
  4. class(类)---------你

     1.我们之所以这么划分就是为了方便我们分层管理项目代码 

     2.以上四个缺一不可

举 例 

                        整个基础阶段是一个project,每天课程是一个module

        3.2.1 创建工程 new Project(空工程)
  • 创建新工程

  • 设置JDK

        本步骤注意,你是在为project设置JDK,,设置一次就可以了;如果你为module设置了,那么以后每一个module你都需要设置一个.

        3.2.2 创建模块new Module

        3.2.3 创建包 new Package

!!!注意,包名书写 业内不成文规定 倒写公司域名

另外要想有层级感,可通过下面是否勾选决定

此外,如果没有明显的分级效果,可按下图修改部分设置      
3.2.4 创建类new Class

细节:

        1.写类名时,不需再 Hello World.java了,只需要 Hello World即可;

        2.建类你想让它在哪个下面,就点击哪个再右键新建,比如点中src右键新建,则会在src下创建一个类(但这是不符规范的,应严格按照四层架构)

        3.写好代码之后,启动(/运行)方式常用有两种:1)快捷键ctrl+shift+F10

                                                                    2)右键点击main左侧的小箭头 选择Run...

        4.再次声明 idea优势:1.方便编写(自动保存);2.自动编译(javac) 

3.2.5 编写代码并启动

小结

        1.使用idea开发java程序的步骤是什么?

                project -> module -> package –> class

                注意:我们用的较多的是class,前面几个都是为了方便管理

        2.创建都是用哪个按钮 ?

               New

        3.idea中的java程序是自动编译和执行的,那编译后的class文件在哪里?

                在工程路径下的 一个out 文件夹里

3.3 基本改动+快捷键

        3.3.1 基本改动

   主题设置

字体设置

背景色设置

控制台窗口位置变动(底部-->右上角)

3.3.2 常用快捷键

        快捷键:组合几个键一起按下 来完成某件事,可以提高开发效率.

快捷键

功能效果

Ctrl+C  Ctrl+V  Ctrl+X

复制 粘贴 剪切

main/psvm、sout、…

快速键入相关代码

Ctrl + D

Ctrl+Z

复制当前行数据到下一行

撤销 (返回上一步操作)

Ctrl + ALT + L

格式化代码

ALT + SHIFT + ↑ , ALT + SHIFT + ↓

按住Alt,鼠标左键点中向上/下移动

上下移动当前代码

列编辑:批量处理数据

注意:当其它软件与idea的快捷键出现热键冲突时,尽量修改下其它软件的快捷键

        

好,我们归纳一下学了什么,来看一下 

        //1. 创建结构:项目-->模块-->包-->类

         //2. 编写代码:在类中书写代码 psvm  sout

         //3.编译代码:我们不需要去管,idea会自动编译

        //4.执行代码:main左侧箭头选择Run

4.基础语法 

 4.1 注释
    4.1.1 定义

        注释是写在程序中对代码进行解释说明的文字,方便自己和其他人查看,以便理解程序的。

注释:  是给人看的,机器是看不到的(so注释不影响程序的执行);  作用: 对程序(或代码)进行解释说明的.

    4.1.2 分类及用法
  1. 单行注释  //注释内容,只能写一行
  2. 多行注释  /*注释内容1

                            注释内容2

                          */           

      3.文档注释  /** 注释内容

                             注释内容

                          */           

     注意:文档注释的内容是可以提取到一个程序说明文档中去的

     4.1.3 特点
    4.1.4 快捷键

写注释是一个利人利己的好习惯!!!

 小结

Q1:注释是什么?

A:写在程序中对程序进行解释说明的文字

Q2: Java程序中书写注释的方式有几种,各自有什么不同?

A: 3种:

                单行注释://

                多行注释:/*  */

                文档注释:/**  */

Q3注释有什么特点?

  不影响程序的执行,编译后的class文件中已经没有注释了。

Q4 注释的快捷键是怎么样的?

Ctrl + /   单行注释(对当前行进行注释)

Ctrl + Shift + /   对选中代的码进行多行注释。

4.2 字面量
 4.2.1 定义

        数据在程序中的书写格式.

 4.2.2 常用数据说明

常用数据

生活中的写法

程序中的写法

说明

整数

666,-88

666,-88

写法一致

小数

13.14,-5.21

13.14,-5.21

写法一致

字符

A, 0, 我

‘A’,‘0’,  ‘我’

程序中必须使用单引号,有且仅能一个字符

字符串

南波万

“HelloWorld”,

“南波万”

程序中必须使用双引号,内容可有可无

布尔值

真、假

true 、false

只有两个值:true:代表真,false:代表假

空值

值是:null

一个特殊的值,空值(后面会讲解作用,暂时不管)

package com.day01;

public class Demo {
    public static void main(String[] args) {
        System.out.println("整数字面量:");
        //整数字面量:生活中一致 0 1 2
        System.out.println(0);//0
        System.out.println(-2);//-2
        System.out.println("小数字面量:");
        //小数字面量:生活中一致 0.1  -13.14
        System.out.println(0.1);//0.1
        System.out.println(-13.14);//-13.14
        System.out.println("字符字面量:");//字符字面量:
        //字符字面量:单引号引起来的一个字符'1' '我' 'A' '' ' '
        System.out.println('1');//1
        System.out.println('我');//我
        System.out.println('A');//A
        //System.out.println(''); //报错:必须有东西//注意,此处为编译器报错,而非运行器
        //System.out.println('AB');//报错:必须有东西,且只能有一个
        System.out.println(' ');//必须有东西,且只能有一个
        System.out.println("字符串字面量:");//字符串字面量:
        //字符串字面量:双引号引起来的任意个字符 "A" "AB" "" " "
        System.out.println("A");//A
        System.out.println("AB");//AB
        System.out.println("");//
        System.out.println(" ");// 
        System.out.println("布尔值字面量:");//布尔值字面量:
        //布尔值字面量: 真 true 假 false
        System.out.println(true);//true
        System.out.println(false);//false
        System.out.println(3>5);//false
        System.out.println(6>4);//true

        //System.out println(null);不好展示,之后完善
    }
}

小结

1.字面量是什么?

        数据在程序中的书写格式

2.字符、字符串在程序中的书写格式有什么要求?

        字符: 单引号引起来的单个内容

        字符串: 双引号引起来的任意内容

3、真、假、空的书写格式是?

        true、false、null

4.3 变量
  4.3.1 定义

        变量是用来记住程序要处理的数据的。

  4.3.2 定义格式

        

package com.day01;

public class Demo3 {
    public static void main(String[] args) {
        //数据类型 变量名称 = 值
        int a = 18;
        System.out.println(a);

        //小数类型 b 13.14
        double b = 13.14;
        System.out.println(b);

        //
        //不用变量--反例,若修改数据很麻烦
        System.out.println(0.618);
        System.out.println(0.618);
        System.out.println(0.618);
        System.out.println(0.618);
        System.out.println(0.618);
        System.out.println(0.618);
        System.out.println(0.618);
        System.out.println(0.618);
        //用变量的好处,修改一处便可实现多处内容更正
        double price=0.618;
        price=600;
        System.out.println(price);
        System.out.println(price);
        System.out.println(price);
        System.out.println(price);
        System.out.println(price);
        System.out.println(price);
        System.out.println(price);
        System.out.println(price);
    }
}
4.3.3 特性

       1. 为什么要用变量?

            使用变量记要处理的数据,编写的代码更灵活,管理代码更方便.

        2.变量有啥特点?

             变量中装的数据是可变的.

        3.应用有啥应用场景呢?

                1.变量是内存中的一块区域,是用来存储数据

                2.变量的完整定义格式是:数据类型 变量名称 =数据

                3.变量的好处是:编写的代码更灵活

                4.变量的特点:装的数据是可变

4.3.4 注意事项

        1.变量要先声明才能使用;

        2.变量是什么类型,就应该用来装什么类型的数据,否则报错;

        3.变量是从定义开始到"}" 截止的范围内有效;且同一个范围内,定义的多个变量,它们的名称不能一样.

        4.变量定义的时候可以不赋初始值;但在使用时,变量里必须有值(即只要在使用前赋值即可),否则报错.

package com.day01;
//4.3 变量的注意事项
public class Demo4 {
    public static void main(String[] args) {
        //1.变量要先声明后使用
        int a=19;//声明
        System.out.println(a);//打印

        //2.变量是什么类型,就要保存什么类型的数据
        //int b=10.4;
        double c=10.4;

        //3.变量的作用域:从定义处起至“}”截止的范围内有效;
        {
            int e=20;
            //int e;报错,能在同一个作用域中定义两个同名的变量.
            System.out.println(e);//可以输出,结果为20
            e=30;//可以,因为上面已经声明了,现在属于在赋值
        }
        //System.out.println(e);报错,找不到e,因为超出变量e的作用域

        //4.变量定义时可不赋值,只要在使用前赋值即可
        int f;
        f=99;
        int g=100;//(1)定义了一个变量名字叫g  (2)给g附上一个初始值为100
        System.out.println(f);//输出结果为 99
        System.out.println(g);//输出结果为 100
    }
}
4.4 关键字和标识符

  4.4.1.关键字

          1.Java语言自己用到的一些词,有特殊作用的,我们称之为关键字,如:public、class、int、double...

         2.注意:关键字是Java用了的,我们就不能用来作为 类名、变量名,否则会报错!

我们不能用的值一共有53个:48个关键字  2个保留字  3个特殊直接量

        (48个)关键字:Java拿走了,它要用

        (2个)保留字:Java拿走了,但是它没用,可能以后要用

        (3个)特殊直接量:true、false、null

4.4.2 标识符

        含义

        标识符就是我们自己自定义的名字,如类名、变量名等等

        要求

           1. 基本组成:只能由数字、字母、下划线(_)和美元($)等组成

           2.强制要求:不能用关键字(53个)作为名字、不能以数字开头、且是区分大小写的

大家可能会有3个疑问:

        1.class不行,Class可以,???   因为class是48关键字之一的类,不可以;因为要求里是区分大小写的,所以Class完全可以。

        2.中国 ??   因为在Java中汉字是属于字母的so可以;

        3.main?? 是可以的因为合乎要求并且也不在53之内,不过不建议使用。

  标识符的建议规范

        变量名称:满足“小驼峰模式”,例如:studyNumber -->第一个单词首字母小写,之后单词首字母均大写

        类名称:满足“大驼峰模式”,例如:HelloWorld,Student-->所有单词首字母都大写

小结

    1.什么是关键字?

        关键字就是Java自己要用到的词,并且有特殊含义的一些词。

        我们就不能用来作为 类名、变量名,否则会报错

   2.什么是标识符?

        标识符就是自己定义的名字

        标识符的规则:仅由数字、字母、下划线、美元符等组成

                                 且不能用关键字(53个)作为名字、不能以数字开头、且是区分大小写的

二、Java基础语法

 2.1 数据存储

   2.1.1 二进制

  1. 计算机中的所有信息都是二进制方式进行存储的,二进制就是只有01
  2. 换句话说,计算机只认识0和1两个数字
  3. 我们要想把数字、文字、图片、视频等等内容保存到计算机中,都要想办法把它们转换为0和1才行

   2.1.2 数字存储

        二进制就是只有0、1按照21的方式表示数

十进制转二进制的算法

        除二取余法:

基本单元和最小单位

    计算机数据中的基本单位和最小单元

  1. 数据存储基本单元:使用8个二进制位为一组,称之为一个字节(byte,简称B
  2. 数据存储最小单位: 数据基本单元中,每个二进制位称为比特(bit,简称b
小结

        1.数据在计算机底层都是使用 二 进制存储的

        2.快速计算一个数据的二进制形式的方法是 除二取余法 

        3.数据在计算机底层存储的基本单元是 字节(byte 

        4.数据在计算机底层存储的最小单位是 比特(bit) 

2.1.3 其他存储

        1.字符在计算机中是如何存储的呢?

           ASCII编码表:即美国信息交换标准编码,规定了现代英语、数字字符、和其他西欧字符对应的数字编号

  2.图片数据

        图片就是无数个像素点组成的

        每个像素点的数据:用0 ~ 255*255*255表示其颜色

3.声音数据

小结

        1. 字符存的是Ascll表中对应的数字的二进制形式

        2. 字符’0’对应的数字是 48

        3 字符’A’对应的数字是65

        4. 字符’a’对应的数字是97

        5. 图片、声音、视频等等内容在计算机中都是想办法转为 二进制或0和1 存储的

2.2 数据类型

2.2.1 分类

        1.基本数据类型:4类8种             
        2.引用数据类型:String(字符串)(ps:后续展开)
小结

        1. 数据类型分为几种?

              基本数据类型:4类8种

                        整型:  byte  short int(默认) long

                        浮点型:  float double(默认)

                        字符型:  char

                        布尔型:   boolean

                引用数据类型: String

        2.  随便写的整数、小数字面量,他们默认什么类型?

                例: 23 ,  默认是int类型 , 加上L(推荐)/l就是long类型的数据了。 23.8,默认是double类型,加上F(推荐)/f就是float类型了。

2.2.2 自动类型转换

     1.应用场景

        类型范围小的变量,可以直接赋值给类型范围大的变量。

     2.执行原理(在计算机中)

     3.其他形式:

 4.表达式的自动类型转换

    在表达式中,小范围类型的变量,会自动转换成表达式中较大范围的类型,再参与运算。

 5.注意事项

        表达式的最终结果类型由表达式中的最高类型决定

        在表达式中,byte、short、char直接转换成int类型参与运算的。

小结

        1. 什么是自动类型转换?

             类型范围小的变量,可以直接赋值类型范围大的变量

         2. 表达式的自动类型转换规则是什么?

             小范围的类型会自动转换范围的类型运算

         3. 表达式的最终结果类型是由谁决定的?

             最终类型由表达式中的最高类型决定

         4. 表达式的有哪些类型转换是需要注意的?

             byte 、short、 char直接转换成int类型参与运算

那么反过来呢,类型范围大的数据或者变量,直接赋值给类型范围小的变量,会报错。

这个时候我们就需要强制类型转换

2.2.3 强制类型转换

    1.发生场景

        强行将类型范围大的变量、数据赋值给类型范围小的变量。

     2.执行原理(在计算机中)

注意事项

     强制类型转换可能造成数据(丢失)溢出

     浮点型强转成整型,直接丢掉小数部分,保留整数部分返回。

小结

        1.什么是强制类型转换?

            默认情况下,大范围类型的变量直接赋值给小范围类型的变量会报错! 可以强行将类型范围大的变量、数据赋值给类型范围小的变量。

        2.强制类型转换有哪些需要注意的?

            可能出现数据丢失。 小数强制转换成整数是直接截断小数保留整数。

2.3 运算符

   2.3.1 定义

           对变量、字面量进行运算的符号

   2.3.2 分类

     1.算术运算符

基本的算术运算符

注:“+” 符号可以做连接符的

        “+”符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串。

用法举例:

生活例子:

小测一下 

逐行解析(ps:待完善):

小结

        1. 算数运算符有哪些?

           + 、-、 * /%

        2. / 需要注意什么,为什么?

          如果两个整数做除法,其结果一定是整数(也可理解为 就是商),因为最高类型是整数。

        3. + 除了做基本数学运算,还有哪些功能?

          与字符串做+运算时会被当成连接符,其结果还是字符串。 识别技巧:能算则算,不能算就在一起。

     2.自增自减运算符

生活举例:点赞及撤回点赞动作

此处注意++-- 只能操作变量,不能操作字面量的

举例(--同理)1) int a;a++;  可以         2)5++;  不可以          3)int a=5;a++;  不可以

自增自减的使用注意事项

 ++、--如果不是单独使用(如在表达式中、或者同时有其它操作),放在变量前后会存在明显区别

        第一种:放在变量的前面,先对变量进行+1、-1,再拿变量的值进行运算。

        第二种:放在变量的后面,先拿变量的值进行运算,再对变量的值进行+1、-1

小结

        1. 自增、自减运算符是什么,有什么作用,需要注意什么?

                 ++、--;对当前变量值+1、-1 只能操作变量,不能操作字面量

        2. 自增、自减运算符放在变量前后有区别吗?

                如果单独使用放前放后是没有区别的。

                 非单独使用:

                        在变量前 ,先进行变量自增/自减,再使用变量。

                        在变量后 ,先使用变量,再进行变量自增/自减。

小练习

逐行讲解:

     3.赋值运算符
        3.1基本赋值运算符

          就是“=”,从右边往左看。

        3.2 扩展赋值运算符

注意:扩展的赋值运算符隐含了强制类型转换。

经典面试题(待完善):

                面试官:同学,s=s+1和s+=1 一样嘛?

                你be like:一样一样  ------大错特错,就在考上面知识点

                升华的你:No,可不要骗我,

                                不一样,s+=1的含义是s=(s的数据类型)(s+1).

小结

        1. 赋值运算符有哪些?

                基本的赋值运算符:= (从右边往左看)

                扩展的赋值运算符:+=、-=、*=、/=、%=

         2、扩展赋值运算符的作用是什么?有什么特点

                 +=可以实现数据的累加,把别人的数据加给自己。

                扩展的赋值运算符自带强制类型转换。

 4.关系运算符

判断数据是否满足条件,最终会返回一个判断的结果,这个结果是布尔类型的值:true或者false。注意:在java中判断是否相等一定是“== ” ,千万不要把  “== ”误写成 “=”。  

     5.逻辑运算符

        把多个条件放在一起运算,最终返回布尔类型的值:true、false。

由于&&、||运算效率更高,所以&&,||和!在开发中用的更多!

小结

     1. 逻辑运算符有哪些,有什么特点?

         & : 有一个为false、结果是false

         &&: 一个为false、结果是false,但前一个为false,后一个条件不执行了

         | : 有一个为true、结果是true

         || :一个为true、结果是true,但前一个为true,后一个条件不执行了

        ! :!false=true、 !true=false

        ^  :相同是false、不同是true。

    注意:实际开发中、常用的逻辑运算符还是:&& 、 || 、 !

     6.三元运算符

        格式:

        执行流程:首先计算关系表达式的值,如果值为true,返回值1,如果为false,返回值2

        生活应用:

2.3.3 运算符的优先级

         在表达式中,哪个运算符先执行后执行是要看优先级的,例如 “*、/” 的优先级高于”+、-”。

        问题不大,记不清的话,以后写代码,想让哪个优先级高,给它用括号括起来就好了

/*代办事项:

1.因水印会遮挡比较重要地方,现查到并已取消图片带水印设置,有时间将把前两章的图片逐一替换;

2.关键字和标识符待完善;

3.之后会专门出一个面试题分类,把本篇文章出现或者我认为起码要知道的面试题纳入。

4.第一遍大体脉络正在完成,第二遍会听视频逐一完善各部分细节包括但不限于易错点和之注意点。

*/

三、键盘录入和流程控制

1.键盘录入

需求:

???:需要自己研发技术来实现嘛?不需要! Java已经写好了实现程序

,我们调用即可!

API (Application Programming Interface:应用程序编程接口)

        Java写好的程序,咱们程序员可以直接拿来调用。

        Java为自己写好的程序提供了相应的 程序使用说明书(API文档)

下载API文档:Java Development Kit 17 Documentation

使用Scanner接收用户键盘输入的数据,需要三个步骤:1)导包  2)创建工具对象  3)接收键盘输入

1.1 导包

        作用:告诉程序去JDK的哪个包中找扫描器技术

        代码表示:

1.2 创建工具对象

        作用:代表得到键盘扫描器对象(东西)。

        代码表示:

1.3 接收键盘输入(使用)

        作用:等待接收用户输入的数据

        代码表示:

                       接收数据是字符串类型的代码表示:

                       接收数据是整数类型的代码表示:

小结

        1.API是什么?API文档是什么?

           应用程序编程接口:Java写好的程序,咱们可以直接调用;Java提供的程序使用说明书。         

        2.Java程序中如何实现接收用户键盘输入的数据?

          使用Java提供的Scanner来完成,步骤如下:

                1. 导包:import java.util.Scanner;

                2. 抄代码得到扫描器对象: Scanner sc = new Scanner(System.in)

                3. 抄代码等待接收用户输入的数据:

                              接收int型数据 :  int age =  sc.nextInt()

                              接收String型数据:String name = sc.next()

2.流程控制

2.1 顺序结构

        默认就是顺序结构,从上往下执行的.

2.2 分支结构

        1.if
            定义

                根据条件(真或假)来执行某段代码.

            应用场景

        

        形式
          第一种:

       执行流程

                首先判断条件表达式的结果,如果为true执行语句体为false就不执行语句体

    第二种:

   执行流程

        首先判断条件表达式的结果,如果为true执行语句体1为 false 就执行语句体2

第三种:

执行流程

         (1) 先判断条件1的值,如果为true则执行语句体1,分支结束;如果为false则判断条件2的值           (2)如果值为true就执行语句体2,分支结束;如果为false则判断条件3的值

         (3) ...

         (4)如果没有任何条件为true,就执行else分支的语句体n+1。

小结

        1. if分支的作用是什么?

                 可以根据条件,选择执行某段程序

        2. if分支的写法有几种?

        

if使用的几个常见问题

        1) 如果if语句的{}中只有一行代码的情况,{}可以省略不写(但是不推荐省略)。

        2) if(条件){},()后不能跟“;”否则{}中的代码将不受if的控制了。

        2.switch
          2.1定义

            是通过比较值来决定执行哪条分支。

          形式如下

            

          2.2执行流程

            1)先执行表达式的值,再拿着这个值去与case后的值进行匹配。

            2) 与哪个case后的值匹配为true就执行哪个case块的代码,遇到break就跳出switch分支。              3)如果全部case后的值与之匹配都是false,则执行default块的代码。

        2.3注意事项

          1)表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String不支持double、float、long(记住它就ok)

          2) case给出的值不允许重复,且只能是字面量,不能是变量。

          3)正常使用switch的时候,不要忘记写break,否则会出现穿透现象

        2.4穿透现象:

                当case中没有写break时,就会开启穿透,后续的case不再匹配,直接执行,直到遇到下一个break或者整个switch执行完毕后才结束.

                穿透现象是可以加以利用, 优化代码的

小结

        1. 使用switch时有哪些注意事项?

                表达式类型可以是byte、short、int、char、枚举、String,

                                不能是double、float、long

                case给出的值不允许重复,且只能是字面量,不能是变量。

                正常使用switch的时候,不要忘记写break,否则会出现穿透现象。

         2. switch穿透性能解决什么问题?

                存在多个case分支的代码是一样时,可以把代码写到一个case块,

                其他case块通过穿透性能,穿透到该case块即可,这样可以简化代码。

         3.if和switch对比

                if适合做区间匹配,功能更加强大

                switch适合做值匹配,性能更好

2.3 循环结构

        1.for
             1.1 作用

                        控制一段代码反复执行很多次。

批量生产数据1.2.3.4.5.6...

        1.2 循环格式

        1.3 使用循环

     1.4 执行流程

小结

案例[1~3]

案例1:求和:求1-5之间的数据和,并把求和结果在控制台上输出.

   思路:1)使用for循环依次产生:1、2、3、4、5.

           2)在循环外定义一个int类型的变量sum用于求和,循环每产生一个数,就放到sum中去

           3)循环结束后,输出求和变量即是结果.

案例2:求奇数和:求1-10之间的奇数和,并把求和结果在控制台输出。

    思路:

法一:

        1)定义for循环,使其能够依次产生:1、2、3、4、5… 10。

        2) 在循环外定义一个int类型的变量sum用于求和

        3)循环每产生一个数据,都通过if判断其是否是奇数,是奇数,则进到if中将其加到sum中去。

法二:

        1)定义for循环,使其能够依次产生:1、3、5 、7 、9

        2)在循环外定义一个整数变量sum,循环每产生一个数据就加到sum中去。

        3)循环结束后,输出sum变量即可。

案例3:水仙花数:在控制台输出所有的“水仙花数”,水仙花数必须满足如下2个要求:

        水仙花数是一个三位数

        水仙花数的个位、十位、百位的数字立方和等于原数

思路

        1)定义一个for循环从“100一直到999”

        2) 每次访问到数据后,提取该数据的:个位、十位、百位数字。

        3)使用if判断:个位、十位、百位的数字立方和是否等于原数,等于则输出该数据。

        2.while
2.1 格式

2.2执行流程

    1) 循环一开始,执行int i = 1 一次。

    2) 此时  i=2 ,接着计算机执行循环条件语句:1 <= 3 返回true , 计算机就进到循环体中执行,输出 :helloWorld ,然后执行迭代语句i++。

    3) 此时  i=2 ,接着计算机执行循环条件语句:2 <= 3 返回true , 计算机就进到循环体中执行,输出 :helloWorld ,然后执行迭代语句i++。

    4) 此时  i=3 ,接着计算机执行循环条件语句:3 <= 3 返回true , 计算机就进到循环体中执行,输出 :helloWorld ,然后执行迭代语句i++。

    5) 此时  i=4 ,然后判断循环条件:4 <= 3 返回false, 循环立即结束!!

2.3 案例

        

        需求:世界最高山峰珠穆朗玛峰高度是:8848.86米=8848860毫米,假如我有一张足够大的纸,它的厚度是0.1毫米。请问:该纸张折叠多少次,可以折成珠穆朗玛峰的高度?

        思路:

           1)定义变量存储珠穆朗玛峰的高度、纸张的高度。

           2)使用while循环来控制纸张折叠,循环条件是(纸张厚度<山峰高度),循环每执行一次,就表示纸张折叠一次,并把纸张厚度变为原来两倍。

           3) 循环外定义计数变量count,循环每折叠一次纸张,让count变量+1;

        3.do while

           特点:先执行后判断

               3.1 格式                                 3.2 执行流程                            3.3应用场景

4.三种循环区别

        1.for循环 和 while循环(先判断后执行); do...while (先执行后判断)

        2.for循环和while循环的执行流程是一模一样的,功能上无区别,for能做的while也能做,反之亦然。

        3.使用规范:如果已知循环次数建议使用for循环,如果不清楚要循环多少次建议使用while循环。

        4.其他区别:for循环中,控制循环的变量只在循环中使用。while循环中,控制循环的变量在循环后还可以继续使用。

        

个人记法:

  第一分支:a.先执行后判断=>do..while循环

                 b.先判断后执行=>for和while,其中a.已知循环次数 或 i不需他用=>for循环

                                                                      b.未知循环次数或i需他用==>while循环

   5.死循环
      5.1作用

                可以一直执行下去的一种循环,如果没有干预不会停下来。

5.2 格式

        

    6.嵌套循环
        6.1 定义

                循环中又包含循环。

        6.2 举例

        

        6.3 特点

            外部循环每循环一次,内部循环会全部执行完一轮。

2.4 跳转
       1.continue

                用于跳出当前循环的当次执行,直接进入循环的下一次执行。

        2.break

                跳出并结束当前所在循环的执行。

        3.注意事项

             a.  continue : 只能在循环中进行使用。

             b.  break : 只能用于结束所在循环, 或者结束所在switch分支的执行。

        4.案例

         需求: 系统密码是520,请用户不断的从键盘输入密码进行验证  

             验证不对输出:密码错误, 然后继续让用户输入

             验证成功输出:欢迎进入系统, 并停止程序。

        思路:

           1) 定义一个键盘对象

           2) 定义一个整型变量记录从键盘上接到的密码

           3) 使用while死循环,让用户不断输入数据,与正确密码比对

                  验证不成功输出:密码错误

                  验证成功输出:欢迎进入系统,并使用break结束当前循环的执行。

2.5 Random
        1.作用

           生成随机数

        2.示例

          需求:得到0~9的随机数

          思路:

        注意: nextInt(n) 功能只能生成: 0 至 n-1之间的随机数,不包含n。       

小结

        1. Random生成随机数需要几步?

                 导包:import java.util.Random;

                Random r = new Random();

                 int number = r.nextInt(10);        

         2.如何生成 小数 – 大数 之间的随机数?[小数,大数]

                 int number = r.nextInt(大数-小数+1) + 小数;       

四、数组

  4.1含义

        数组是引用类型,是一个用来存储多个“同类型数据”的容器

  4.2 定义和访问

        4.2.1 数组定义

                (1)静态初始化数组(适用于当我们已经明确的知道数组各个元素是啥的时候)

                        完整格式:   数据类型[ ] 数组变量名=   new 数据类型[ ]  {元素1,元素2...};

                        简化格式:   数据类型[ ] 数组变量名=  {元素1,元素2...};

                        例如: 我需要把98,67,45这三个数据存到一个数组,由于已知数组元素的值,So

                                  int[ ] arrs={98,67,45};

                (2)动态初始化数组(适用于当我们只能确定数组的数据类型和长度时)

                        格式:       数据类型[ ] 数组变量名=new 数据类型[数组长度];

                        例如:跳水比赛我需要连续接受6个评委的打分(有小数)并存入数组---->动态

                                 double[ ] arrs=new double[6];

         4.2.2 访问

                比如我们静态初始化一个整形数组arrs,数组初始化3个元素分别为:11,22,33.

                                                                                          即    int[ ] arrs={11,22,33};

                1.获取数组长度:  数组变量名.length;                 即   arrs.length; // 值为3

                2.获取指定索引的元素:  数组变量名[索引];        即  arrs[1]; //值为22

                3.设置指定索引的元素:  数组变量名[索引]=值   即  arrs[0]=44; //值为44(11被44替换)

                4.最大索引:  数组长度-1    即 数组元素个数-1,例中为3-1=2,所以索引0~2,最大索引为2.

                5.数组遍历:依次访问数组中所有元素  即 for(int i=0;i<arrs.length;i++){

                                                                                                //对arrs[i]进行操作;

                                                                                };    //快速生成  arrs.fori+回车

  4.3 经典案例

        1.累加求和

        2.求平均值

        3.求最值

        4.数组反转

        5.打乱顺序

  4.4 执行原理

        1.jvm内存分配

                       主要(或常用)的分为三块:                                           |               简记

                方法区:程序设计的类的字节码对象都先加载到方法区;     |    方法区--> 字节码文件

                栈内存:运行时main方法及 其中的变量都是存在栈中;       |     栈内存--> 方法+变量

                堆内存:new出来的对象都是放在堆内存里的;                    |     堆内存-->new出来的对象

        2.数组在计算机中的执行原理

4.5 Debug工具的使用

五、Java方法

        5.1 定义

                1.定义:方法就是一些代码打包起来,然后在需要的地方可以重复使用

                2.好处:提供代码的复用性和可维护性

        5.2 格式

                1.定义:public static 返回值类型 方法名(参数列表){
                                      //方法体
                                    return 返回值;
                          }

                2.调用:赋值调用       返回值类型 变量 = 方法名(实参列表);

                             直接调用        方法名(实参列表);

                             打印调用        System.out.println(方法名(实参列表));

        5.3 案例

        5.4 方法重载

                1.规则: 多个方法, 方法名相同,形参列表不同(数量\类型\顺序)

                2.好处::方便调用者 不用记很多的名字;代码简洁,逻辑清晰。

        5.5 执行原理

                方法的压栈(入栈)、弹栈(出栈)

        5.6 参数传递

                1.基本数据类型-->传递的是数值。

                2.引用数据类型-->传递的是堆内存对象的地址。

Java方法

方法是什么:

  • 方法就是把一些代码打包在一起,用到的时候就调用
  • 方法就是程序中最小的执行单元(程序要想执行,必须放在方法里 如main方法是程序主入口)
  • 方法只有在被调用时才会执行(注意当你点击Run时,JVM会自动调用main方法)

方法的好处:

提高代码的复用性(抽取重复代码,重复使用)

提高代码的可维护性(方便修改)

方法的定义与调用

方法定义:把一些代码打包在一起的过程

方法调用:方法定义后并不是直接运行的,需要手动使用才能执行,该过程成为方法调用.

定义格式一: 不带参                                     范例:

public static void 方法名(){ public static void fire(){

方法体//就是打包起来的代码            发射炮弹的语句;

}                                     }

调用:                                           调用:

方法名();                                     fire();

多个方法一起调用的执行流程:

当方法遇到方法调用时,会进入被调用的方法执行,执行完毕后再退回来,继续执行下面的内容


Q1:调换方法的定义顺序,会不会影响到程序的执行结果

Answer1: 不会

Q2:调换程序的调用顺序,会不会影响到程序的执行结果

Answer2: 会

若由主程序调用方法A,在方法A中调用方法B,是可以的

但若在方法B中再调用A方法,则会不断地调用两方法,最终报错,堆栈内存溢出,原因是方法在循环调用 没有结束的机会

StackOverflowError====>堆栈内存溢出异常

因为方法在栈中,而执行以上程序,循环的过程就是在重复的向栈里放东西,最后栈内存不够了,报出堆栈内存溢出异常.

带参数方法:

定义格式二: 带参                                     范例:

public static void 方法名(参数1,参数2, ...){ public static void getSum(int num1,int num2){

方法体//就是打包起来的代码            int result=num1+num2

sout(result);

}                                     }

调用:                                           调用:

方法名(参数1,参数2, ...);       getSum(10,20);

注意:方法调用时,参数的数量与类型必须与方法定义中小括号里面的变量一一对应,否则程序将报错.

注意:

    方法调用时,实参必须与形参保持同样的类型、数量和顺序

        形参:全称形式参数,是指方法定义中的参数

        实参:全称实际参数,方法调用中的参数

方法的返回值: 就是方法运行的最终结果

当我们调用一个方法时,如果方法的执行结果会在后续程序中用到,那么就需要这个方法将执行的结果返回

带返回值的方法:

定义格式三: 带返回值                                     范例:

public static 返回值类型 方法名(参数1,参数2, ...){  public static void getSum(int a,int b){

方法体//就是打包起来的代码                  int result=a+b

Return 返回值;                               return result;

}                                     }

此处调用分为三种:

1.赋值调用:

数据类型 变量名 = 方法名(实参);(常用这种)

2.直接调用:

方法名(实参);

3.输出调用:

Sout(方法名(实参));

注意细节:return部分返回数据的类型必须和方法定义时声明的返回值类型一致.

  1. 面向对象

实体类(Dish)

1.声明属性

2.快捷生成 无参、全参、getter和setter

操作类(DishOperation)

1.维护对象的引用  

如果是单个对象(比如就一台车,不存在多或少)-->new Dish.var

如果有多个对象(比如很多菜,要把它放进集合,那直接集合来维护就好)------------------->new ArrList<Dish>(注意在操作类中由于没有main,所以new的东西要自己打的)

2.定义方法

    public void 方法名(){}

测试类(DishOperationTest)

  1. 建立主程序入口(psvm)
  2. 在main中进行

2-1对象维护 即 new DishOperation.var

//2-2 属性赋值 即 全参构造赋值或set赋值

2-3 方法调用 即DishOperation.方法名()

注意细节,若有的方法传出的内容经sout是内存地址,那我们应在输出时sout(内容.get方法)

  1. 字符串和集合

System.err.println:输出时,字体颜色变红

细节:

  1. 标识符:      中国√(java把它当做字母)    Class√  main√
  2. Why能跨平台?  针对不同的操作系统提供不同的虚拟机  做到一次编译处处可用.
  3. 在计算机中,所有的数据都是以二进制存储的;
  4. 在Ascll码表 ‘0’-48  A-65  a-97
  5. 类型转换:从一种类型向另一种类型进行赋值操作.
  6. 自动类型转换:类型范围小的变量,可以直接赋值给类型范围大的变量

强制类型转换:强行把类型范围大的变量,数据赋值给类型范围小的变量   有可能出现数据类型损失.即精度损失.

格式:   目标数据类型 变量名=(目标数据类型) 变量值

6.5 byte类型在参与运算时会转为int

  1. /  :整数/整数=整数  (也就是商)
  2. + :  (1) 数字+数字  加和       (2)数字+字符串  拼接
  3. 自增自减  ++--  只能修饰变量 :   (1) 单独存在    a++和++a没有区别

(2)参与运算     a++:先a参与运算,再本身加1

++a:先让本身值加1,再使用加之后的数值参与运算

  1. 赋值运算符 +=:  
  2.    有个强转.
  3. 关系(比较)运算符
  4. 逻辑运算符 &&(并且)  左边为假不执行右边

||(或者)  左边为真不执行右边           !(取反)

  1. 三元运算符  表达式? 值1 :值2
  2. 优先级
  3. 键盘对象
  1. 不同问法

类名 Scanner

全路径 或 全限定名 :

  1. API:应用程序编程接口
  2. 流程控制:顺序

分支 if    switch   for

循环


不管是a++还是++a,对a影响都是一样的,不一样的是rs.

长度的不同表示:

数组  arr.length;---注意 length在数组对象中是属性,而在数组和集合中是方法.

   字符串 String.length();

集合  arrList.size();

数组的length属性是指数组的长度,String的length()方法是指字符串对象的长度。

数组具有  length  属性   用     数组变量名.length    可获得数组长度。

int[]  arr  =  new int[8];

int    lengthInt=arr.length;   //获得数组长度

System.out.println(lengthInt); //  打印结果8

字符串(String)具有 length()方法  

String  str  = "abcdefg";

int    lengthStr = str.length();  //获得字符串长度

System.out.println(lengthStr);    //  打印结果7

字符串(String)  底层实现时  利用  char[]  value;   字符型数组

字符串(Stingth)  中 length()方法源码:

 public int length() {

        return value.length;

    }

    

同样基于数组的   length  属性。

创建字符串数组时,获得数组的长度也是要利用    数组length属性  

String[] strs  = {"香蕉","苹果","梨","西瓜","麻瓜"};

int  lengthStrs =strs.length;

System.out.println(lengthStrs);  //  数组长度为5

任何数组都有   length属性   访问长度时用    .length

报空指针异常,怎么办?

根据控制台提示,找到问题行

找三个符号 .  +  [] 它们前面的东西应该就是null

null.什么   

null+     null作加减乘除运算

null[0]

方法的好处  提高方法的复用性和可维护性


但long类型,要求后面是L.

下列( )不能作为switch表达式的数据类型 

A、long B、char C、short D、int

Float和long不行,要求转为short类型

System.out.println(5+5+"="+5+5);打印出的结果是

A、5+5=5+5

B、10=10

C、10=5+5

D、10=55

System.out.println(5+5+"="+5+5);

5+5+"="+5+5

10+"="+5+5

"10="+5+5

"10=5"+5

"10=55"

必须有无参

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值