知识屋:更实用的电脑技术知识网站
所在位置:首页 > 科技  > 电脑

java面向对象编程基础

发表时间:2022-03-25来源:网络

java面向对象编程基础

前言:什么是java

是咖啡飘香的清晨

- 是斯坦福校园意浓情深
- 是James的思想睿智

是剁手党双十一挥舞的利刃

是大数据云计算驰骋的平台
- 是ATM上吐出的钞票
- 是Android手机游走的灵魂

啊!java我的神

课程内容:

Java的基础知识 Java流程控制语句 Java常用包和类 数组操作 面向对象的概念 异常处理 文件访问 数据集合操作 JDBC访问数据库

课程目标:

掌握面向对象编程的基本思想和技能

第一章:java入门

本章内容

java语言简介 JDK安装和配置 java运行原理 Hello World java的数据类型、变量、运算符 控制台的输入输出

java学习的思路

Java和前端不同,前端的学习内容 能看到效果,我们开始学习的是java的语法。

看不见摸不着,但是需要我们记住。所以我们学习java很重要的一个事情就是背语法。此时很多人会出现一个问题,不理解。何为不理解 :不知道为什么要这么做?Java语法的特殊性在于很长时间语法 到后面才会应用。我们学习的步骤 先记忆与法,然后在实际应用中去理解。

第一节:java简介

java历史

1996年,SUN公司发布了JDK1.0 1998年,SUN公司发布了Java2平台 2000年,SUN公司发布了J2ME 2001年1月,Java的企业版J2EE发布 2004年8月, JDK1.5发布 2010年10月,sun嫁给Oracle 最新的JDK版本是JDK14

JDK最早是1.X版本,后来陆陆续续的升级 1.2 1.3 1.4 1.5 后来有一个划时代版本此时再以小版本命名就太low,从此就开始以大版本命名 JDK5 JDK6 JDK7 JDK8

####java的基本概念

#####一、java平台:

JavaSE

Java Standard Edition 用于工作站,PC机的Java标准平台

JavaEE

Java Enterprise Edition可扩展的企业级应用Java平台

JavaME

Java Micro Edition用于嵌入式Java平台;

二、java的特性

开源具有面向对象、跨平台、简单性、解释执行、多线程、安全性等很多特点

三、 JDK JRE JVM

JDK(Java Development Kit) 是 Java 语言的软件开发工具包。就是我们电脑如果要进行java语言的编写开发运行就需要安装JDK。

JRE是Java Runtime Environment缩写,指Java运行环境。JRE是JDK的一部分,意思就是说 安装完成JDK之后电脑上就有了JRE。JRE作用就是我们写java代码所需要的资源库支持,和运行所需要的虚拟机都在jre中。

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。(虚拟机就好像是 模拟器。我们现在电脑上面有很多软件能模拟 安卓操作系统。然后可以在电脑上面下载安卓手机软件玩手机游戏 ,虚拟机和模拟器差不多。我们的java代码需要在虚拟机中才能运行 )

JDK 中包含 JRE ,JRE中包含 JVM


所以说我们电脑上要开发java 就需要安装JDK。

###第二节、jdk的安装和配置

2.1 安装

在 我们电脑的某个盘符下创建一个文件夹 叫java。这个文件夹专门用来安装JDK所需要的文件(不能有中文路径)

双击JDK


点击【下一步】


安装过程中会弹出安装JRE的选项,这是java运行环境,因为JDK中自带JRE,所以可以选择不装。

在这里插入图片描述

此时 JDK安装完成。我们的电脑上面安装了JDK,但是电脑需要配置环境变量才能识别。(配置环境变量:我们写的java代码需要到jdk中的jvm里运行,但是每个人安装的位置不一样,jvm到底在哪,电脑此时不知道,所以我们需要告诉自己的电脑 ,jdk安装到哪了。此时就是配置环境变量)

2.2 配置环境变量

【我的电脑】-右键-【属性】-【高级系统设置】-【环境变量】

【系统变量】-【新建】-java_home:jdk安装根目录

【新建】-classpath:.;%java_home%\lib

【编辑】-path:添加 %java_home%\bin

测试:在命令窗口输入java和javac命令观察结果

2.3 java的运行原理

平台: Windows OS MacOS Linux OS

跨平台: 不同的操作系统,内部的运行原理是不一样,换句话说,windows的软件不能在mac电脑上面进行安装。所以我们很多软件的制作成本就加大了。例如 爱奇艺,需要制作windows版 还需要制作mac版。此时就需要两个开发团队。假如你是老板,急需一种操作:能不能开发一个版本在不同的平台中都能运行,这就是跨平台。

Java是支持跨平台操作的一门语言。一次编写 多处运行。

Java跨平台实现的原理:

我们使用java语言开发一套程序。然后编译成字节码文件。在不同的平台中安装该平台对应的jvm,此时 就能运行我们的字节码了。

java virtual machine jvm:虚拟机,利用软件的形式模拟一台虚拟计算机的环境。java跨平台的特性。同样的一份代码可以运行在不同的操作系统上。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9vdy8hi3-1616211187442)(assets/image-20201016084302932.png)]

java源文件——【javac 命令编译】——.class文件——【java 命令运行】

2.4 创建第一个java程序

示例1:使用记事本编写HelloWorld

在E盘根目录创建Hello.java文件,注意文件后缀是:.java ,而不是:.txt 。

public class HelloWorld { public static void main(String[] args){ System.out.println("你好java"); } }

【cmd】——打开命令行窗口

输入:【E:】 + 【enter】进入E盘

输入:【javac HelloWorld.java】命令,注意这里要带文件后缀【.java】

如果没有反应,就说明编译完成,此时同目录下会多一个HelloWorld.class文件

然后输入:【java HelloWorld】

输出:浣犲ソjava

这是因为编码格式问题,可以在编译时加入指定的编码集:utf-8

输入【javac -encoding utf-8 Hello.java】

输入:【java Hello】

输出:你好java

示例2:使用EditPlus编写HelloWorld(可选)

【新建】-【java】

class { public static void main(String[] args) { System.out.println("Hello World!"); } }

写入类名:Hello

保存为Hello.java文件

配置javac命令行工具:

【tools】-【prefersences】打开工具配置并进行如下配置

2.5 java注释

很多人毕业了 注释都不会加。---- 很多程序员都加不对

Java的注释分成三种:

单行注释: // 注释部分

多行注释: /* 注释部分 */

文档注释: /** 注释部分 */

/** * 这是文档注释 */ public class Hello { public static void main(String[] args){ System.out.println("你好java"); /*String form=MessageFormat.format("你好:{0},我是{1},今年{2}岁了","花和尚","豹子头",23); System.out.println(form); 这是整段注释*/ //这是单行注释 } /*这是整段注释 public void test(){ System.out.println("这是测试方法"); } */ }

第三节:类的基本概念

3.1 创建包package

在java中有包的概念。包的英文名称为 package。包其实就是一个文件夹。也就是说我们创建包就是创建文件夹,在java中我们需要创建的文件要分包管理。

其实就和我们前端一样的思想:css文件夹 里面存放的是css文件,img文件夹存放的是 资源文件。 java的包和这些文件夹有异曲同工之妙。我们java的分包是 创建不同的包 用来存放不同功能的java文件。

操作:

1)选中src 【右键】—【new】 —【package】

2)输入包名,如果有子包,则使用“.”连接和间隔

包名的命名规范:

全小写 点分割 反域名 (严格遵循)

例如 : com.aaa.taobao.test com.alibaba.taobao.util

com : 代表不同的类型 如果是com 代表企业组织 org 代表公益组织 java开头 代表原生代码

aaa : 代表公司名称 如果没有公司 就用自己的名字 com.gfs.taobao.com

taobao: 代表项目名称 平时的时候我们都省略

test : 当前包的作用 例如 test 测试代码 util 工具类代码 dao 数据访问层代码

从今天开始我们写任何代码 都要遵循代码的命名规范。

很多人说 我现在在做练习,不用注意规范。还有人说我没有遵循命名规范 这不也没有什么错误吗?

----- 命名规范是约定俗成。

####3.2 创建类

【File】——【New】——【Project】

选择【java】,一般默认就是你安装的JDK版本【这里是1.8】,然后【Next】

直接点击【Next】

在项目目录【src】上右键——【New】——【java Class】——输入文件名称【Hello】,注意首字母要大写

public class Hello { }

大括号中间添加代码:

public static void main(String[] args){ System.out.println("你好java"); }

点击边上的箭头即可运行。

3.3 类的构成

package com.aaa; /** * @author: wangxiangnan * @time: 2020/10/16 9:31 * @description: */ public class HelloWorld {//[修饰符] class关键词 类名{类体,简单理解为写代码的地方,} /** * public 访问修饰符,公有的,还有其它的private protected等,以后会讲 * static 静态的,以后会讲 * void 代表该方法没有返回值 * args 运行时传入的参数 */ public static void main(String[] args){ System.out.println("你好java"); } //还可以有其它的方法 public static void test(){ System.out.println("这是测试方法"); } }

3.4 类文件(Xxxxx.java)中的类

面试题: 请求一个.java中可以有多个类(外部类)吗?有什么要求?

答案:A 可以有多个类

package com.aaa; public class HelloWorld { public static void main(String[] args){ System.out.println("你好java"); } } class testAClass{ } class testBClass{ }

但一个类文件中只能有一个用public修饰的类,并且该类的类名必须和类文件名相同。

3.5 错误信息处理

如果public修饰的类名和文件名不同则会出现错误

Class 'HelloWorld1' is public, should be declared in a file named 'HelloWorld1.java' 这个公共类型 HelloWorld1 必须 被 声明 到 一个名为 HelloWorld1 的文件中。

鼠标放到错误提示的红线上会在左上角出现一个小红灯泡,点击灯泡旁边的下拉箭头,会出现几个建议改正的选项,可以点击使用其中一个来修改错误,一般使用最后一个“Rename class ‘HelloWorld1’ to ‘HelloWorld’”

3.6 java文件的运行机制

###第四节:数据类型、变量

####一、java的数据类型

基本数据类型8种:

整形:byte,short,int,long

浮点型:float ,double

字符型:char

布尔型:boolean

引用数据类型:

String “1234” 字符串类型的值必须使用双引号将内容包裹,

如果没有包裹,有两层含义:1)如果是文字字符则可能是变量;2)如果是数字字符则是数字值。

“1234” != 1234

注意: 在java中 单引号代表的是 字符类型 双引号代表的是字符串类型

​ 但是在js中 单引号和双引号都是字符串类型

​ 字符类型只能存储一个字符 字符串可以存储多个。

面试题: 请问 String 是基本数据类型吗?

警告:很多人毕业的时候 八种基本数据类型都忘了。

类型名称 关键字 占用内存 取值范围 字节型 byte 1 字节 -128~127 短整型 short 2 字节 -32768~32767 整型 int 4 字节 -2147483648~2147483647 长整型 long 8 字节 -9223372036854775808L~9223372036854775807L 单精度浮点型 float 4 字节 +/-3.4E+38F(6~7 个有效位) 双精度浮点型 double 8 字节 +/-1.8E+308 (15 个有效位) 字符型 char 2 字节 ISO 单一字符集 布尔型 boolean 1 字节 true 或 false

1GB(一部电影) = 1024 MB 1MB(一张照片) = 1024KB

1KB(一个文档) = 1024B 1B就是一个字节 1B = 8b

一个字节在内存中就是8位二进制数

所以我们电脑的运行内存8G,当我们写的java程序中 有一句 int a = 10; 相当于在你的电脑运行内存的8G中 有四个字节的内存被这个a所占据

Java希望我们在编程的时候 能选择合适的数据类型,从而控制内存。例如 我们要存储一个人的年龄,人普遍年龄是 0-125.所以可以选择使用 byte类型,那么此时我们如果使用 int 类型 也可以,但是浪费内存。如果要存储一个乌龟的年龄,可以使用short类型。这就是为什么java能存储整数 需要四种类型。

第五节:标识符和运算符

一、java的标识符

以下划线,$或字母开头,不能有特殊字符,中间不能有空格,关键字不能用,大小写严格区分。

二、变量声明和使用

int age;//声明变量,此时还未创建空间 age=19;//开辟空间并放入值 System.out.println(age);//从age的空间中取出值并输出到控制台 String name="王重阳";//声明并赋值 System.out.println("你好,我的名字叫:"+name);//拼接字符串

三、java的运算符

算数运算符

+ - * / += -= % ++ --

示例:给一个3位的数,求个位数、十位数、百位数相加的和

int a=963; int g=a%10; int s=a/10%10; int b=a/100; System.out.println(g+s+b);

比较运算符(下一章再讲)

> , >= , < ,

强制类型转换其实就是欺骗编译器

我们强转之后 有可能会出现数据溢出的情况。

public static void main(String[] args){ short a=128; byte b=(byte)a; System.out.println(b);//结果是:-128 double c=56.9; int d=(int)c; System.out.println(d);//结果是:56 int e=20; int f=3; double g=a/b; System.out.println(g);//结果是:6.0 }

为什么 a 和 b 相除的结果的类型是int类型呢?

原因是 java中变量的运算会自动提升:

两个变量运算 ,所得的结果类型 取决于参与运算变量的类型.

例如 a是int b 也是 int a和b进行运算结果 的类型要从a和b之中选一个。此时只有一种选择是 int 。

此时将a的类型改成 float b的类型还是 int ,结果的类型 就可以从 float 和 int之中选一个。此时结果类型选了float类型作为结果结果类型。(选取更精确的 所占字节大)

byte a=20; short b=3; int c=60; float d=56.5f; double e=a+b+c+d; System.out.println(e);//结果是:6.0

编译器对数据类型和取值范围的判断

byte a=200;//错误,因为byte的取值范围是-128~127,常量整数默认为int类型 float d=56.5;//错误,因为默认情况下小数位double类型的,需要注明这个浮点数就是float类型 //--------下面两种就是正确的--------- byte a=127; float d=56.5f;

为什么会报错呢?

因为 常量的整数,数据类型为 int ,常量的小数,数据类型为double。也就是说 200 这个数字 也有数据类型是 int。此时将int类型赋值给byte类型,是大给小,所以报错。同理 30.5的数据类型是double类型,double类型赋值给float也报错。所以我们的float在赋值的时候 需要加 F long类型赋值的时候需要加 L,F 和 L 可以理解成数据类型转换的特殊形式

下面的代码

此时 byte类型的a 赋值为127 此时不报错 为什么呢?

127是int类型 ,此时int类型的127 赋值给 byte类型的a 此时大给小不报错。原因是 编译器在预编译的时候,发现 127 是int 但是 在 byte的范围之内,所以将127给byte不会出现数据溢出的情况,此时编译器就隐式(偷偷地)将127的数据类型编程了 byte类型。

如果要进行基本的算术运算,则要求结果 的最低数据类型是整形(int)

short a=5; short b=6; short c=a+b;//a+b是int类型的,不能直接赋值给short类型,需要强制类型转换 short c=(short)(a+b); 不同种类型的要通过函数转换 String count="18"; int age=20; System.out.println(count+age);//输出结果是1820,而不是38,这是因为这里的+号运算是将两个字符串进行了拼接 int ct=Integer.parseInt(count); System.out.println(ct+age);//此时输出38; 基本类型包装类:

为了便于操作,java针对基本数据类型都有包装类,定义了很多便于操作的方法。

Byte byte;
Short short;
Integer int;
Long long;
Float float;
Double double;
Boolean boolean;

小结

算术运算的最小类型单位是int。

整数的除法结果是整形。

取值范围小的类型会自动转换为取值范围大的类型,反之则需要强制转换。

数值类型只要和字符串类型拼接(+),就可以转换为字符串类型。

字符串类型要转换成数值类型则必须使用数值类型的包装类的parse(字符串)方法。

第六节:控制台输入输出(重点)

一、格式输出

%s:字符串占位符

%d:整数占位符

%f:浮点数占位符

System.out.printf("我是%s,今年岁%d了,体重%.1f","王重阳",18,78.5);

二、接收键盘输入

Scanner扫描仪

创建对象:new Scanner(System.in);

public static void main(String[] args) { System.out.println("请输入你的姓名:"); Scanner sc=new Scanner(System.in); String name=sc.next(); System.out.println("请输入你的年龄:"); int age=sc.nextInt(); System.out.println("请输入你的体重:"); double weight=sc.nextDouble(); System.out.println("请输入你的爱好"); String hobby=sc.next(); System.out.printf("你的名字是:%s,今年%d岁了,体重是%.1f公斤,爱好是:%s",name,age,weight,hobby); }

作业:类似上面的输入输出(10分钟)

请输入你要吃的菜名

请输入菜的价格

请输入菜的数量

输出:您点的???菜,?盘,单价是??元,总金额是:??元

第二章:流程控制

内容回顾:

java通过什么实现跨平台

java是诞生于美国哪所大学

java的基本数据类型有哪些

接收键盘输入的类是什么

本章内容:

选择和分支结构 循环结构

第一节:程序结构

顺序结构

分支结构

循环结构

第二节:分支结构1:if-else

if(条件){

​ 条件成立执行的代码

}else{

​ 条件不成立执行的代码

}

public static void main(String[] args) { System.out.println("亲输入你的存款"); Scanner sc=new Scanner(System.in); double money=sc.nextDouble(); if(money>1000000) { System.out.println("你是土豪"); }else { System.out.println("你是屌丝"); } }

多重if-else

请输入学生成绩,判断优良中差

System.out.println("亲输入你的成绩"); Scanner sc=new Scanner(System.in); double score=sc.nextDouble(); if(score>=90) { System.out.println("你是学霸"); }else if(score>=80) { System.out.println("你是学酥"); }else { System.out.println("你是学渣"); }

第二节:switch结构

switch(表达式){case 1: 执行1后面的代码 break;case 2 :执行1后面的代码 break;case 3: 执行1后面的代码 break;default: }

使用switch判断学生成绩

System.out.println("亲输入你的成绩"); Scanner sc=new Scanner(System.in); double score=sc.nextDouble(); switch((int)score/10) { case 10: case 9: System.out.println("优秀");break; case 8: System.out.println("良好");break; case 7: System.out.println("一般");break; case 6: System.out.println("及格");break; default: System.out.println("不及格");break; }

​ 判断月份的天数

public static void main(String[] args) { System.out.println("亲输入年份"); Scanner sc=new Scanner(System.in); double score=sc.nextDouble(); int year=sc.nextInt(); System.out.println("亲输入月份"); int month=sc.nextInt(); int mcount=31; switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: mcount=31;break; case 4: case 6: case 9: case 11:mcount=30; break; case 2: if(year%4==0&&year%100!=0||year%400==0) { mcount=29; }else { mcount=28; } } System.out.printf("本月有%d天",mcount); }

第三节:while循环

语法:

初始化变量 while(循环条件){ ​ 循环体 改变变量 } public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("是不是要输入新的成绩"); String tiaojian=sc.next(); while(tiaojian.equals("是")) { System.out.println("请输入郭大侠的比赛名次"); int lever=sc.nextInt(); switch(lever) { case 1:System.out.println("武林盟主"); break; case 2:System.out.println("武当掌门"); break; case 3:System.out.println("峨眉掌门");break; default: System.out.println("逐出师门"); } System.out.println("是不是要输入新的成绩"); tiaojian=sc.next(); } }

使用循环改造输入判断每月有多少天的代码

public static void main(String[] args) { Scanner sc = new Scanner(System.in); String ans = "是"; while (ans.equals("是")) { System.out.println("亲输入年份"); double score = sc.nextDouble(); int year = sc.nextInt(); System.out.println("亲输入月份"); int month = sc.nextInt(); int mcount = 31; switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: mcount = 31; break; case 4: case 6: case 9: case 11: mcount = 30; break; case 2: if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { mcount = 29; } else { mcount = 28; } } System.out.printf("本月有%d天", mcount); System.out.println("还要继续输入年月么?:是/否"); ans = sc.next(); } }

使用while循环改造输入成绩判断优良的代码

public static void main(String[] args) { Scanner sc = new Scanner(System.in); String ans = "是"; while (ans.equals("是")) { System.out.println("亲输入你的成绩"); double score=sc.nextDouble(); switch((int)score/10) { case 10: case 9: System.out.println("优秀");break; case 8: System.out.println("良好");break; case 7: System.out.println("一般");break; case 6: System.out.println("及格");break; default: System.out.println("不及格");break; } System.out.println("还要继续输入年月么?:是/否"); ans = sc.next(); } System.out.println("程序结束"); }

练习:本金存入1000元,年利率5%,问多少年后本金能超过5000元。

public static void main(String[] args) { double money=1000; double rate=0.05; int i=0; while(money
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜