Java语言

Java语言基础教程

Java语言基础教程

本文将放入菜单栏中方便学习,记得点赞哦!

Java分为3个体系,为JavaSE,JavaEE,JavaME,是一种面向对象的程序设计语言,记住Oracle公司收购了 Sum公司,然后Oracle公司就负责了Java语言的维护。

“一次编译,到处运行”

体系

Java语言的特点,具有面向对象,平台无关性,简单性,解释性,多线程,分布式,健壮性,高性能,安全性等。

特点

Java的开发环境,JDK,它提供了编译和运行的Java程序环境,下载JDK,输入 www.oracle.com,单击 DOWNLOAD 按钮

下载jdk,和eclipse就比较简单了,提供JDK 9 地址:

http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.html

提供JDK 8 地址:

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

效果

效果

效果

效果

效果

JDK包安装完成后,需要配置环境变量。点击桌面上的“我的电脑”或者“此电脑”,选择“属性”,接着选择“高级”,点击其中的“环境变量”弹出“环境变量”对话框,其中包含“用户变量”和“系统变量”两部分。

设置系统“变量名”为“JAVA_HOME",“变量值”为“C:\ProgramFiles\Java\jre1.8.0_112”,即是JDK安装路径,你也可以将地址栏中的路径直接复制过来。

再次选择”系统变量"列表中找到其"Path"(双击)–>“编辑”,弹出”编辑系统变量",点击新建:

效果

然后,单击”系统变量"下面的“新建"按钮,创建名为”classpath“的环境变量,值为”.",英文的一点,代表当前路径。

“环境变量”对话框中单击“系统变量”列表框下方的“新建”按钮,弹出“新建系统变量”对话框,“变量名”文本框中输入 JAVA_HOME,“变量值”文本框中输入 JDK 的安装路径。

“系统变量”列表框中双击 Path 变量,进入“编辑系统变量”对话框,添加最前端添加

.;%JAVA__HOME%\bin;

环境变量:

1JAVA_HOMED:\Java\jdk1.8.0_25 2 3CLASSPATH.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; 4 5Path:;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin 6 7 8bin:提供 JDK 工具程序 9jre:存放 Java 运行环境文件 10src.zip:提供的 API 类的源代码压缩文件 11include:存放用于本地访问的文件 12lib:存放 Java 的类库文件

编程:

1public class HelloJava 2{ 3 public static void main(String[] args) 4 { 5 System.out.println("hello world"); 6 } 7} 8 9 10javac HelloJava.java 11java HelloJava

Java程序运行流程:编写、编译和运行

流程图

Java 虚拟机(JVM)是运行 Java 程序的软件环境

下载eclipse链接(官网):

https://www.eclipse.org/downloads/

接下来我们进入到这个链接:

https://www.eclipse.org/downloads/eclipse-packages/

效果

官方网站是 www.eclipse.org,进入网站,点击 Download Packages,从 Eclipse IDE for Java EE Developers,选择下载的系统版本, 点击“64-bit”后跳转到“Choose a mirror close to you”界面,选择“大连东软信息学院”,点击下载,看到“click here”。

效果

下载语言:

www.eclipse.org/babel

效果

效果

简体中文的下载列表,下载会得到一个文件,Eclipse\drogins文件夹中同名的 features 目录和 plugins 目录,重启就会自动加载语言包。

标识符

标识符由数字,字母,下划线,美元符号,第一个符号为字母,下划线,和美元符号,后面随意,Java是区分大小写的!标识符用来命名 常量,变量,类,和类的对象的。

关键字

51关键字,数据类型,流程控制,修饰符,动作,保留字

1boolean, int, long, short, byte, float, double, char, 2class, interface 3 4true, false, null, goto, const 5 6if, else, do, while, for, switch, case, default, 7break, continue, return, 8try, catch, finally 9 10public, protected, private, final, 11void, static, strict, abstract, 12transient, synchronized, volatile, native 13 14package, import, throw, throws, extends, implements, 15this, supper, instanceof, new

运算符、数据类型、变量、控制流程语句

常量是运行过程中保存不变的量,常量值称为字面常量。

整型int
长整型long
双精度型double
单精度型float

字符型,单引号引起来的字符,双引号是用来表示字符串额,使用final定义常量的关键字。

变量,初始化变量指定义一个明确的初始值,初始化变量有两种一种为声明直接赋值,一种是先声明,后赋值。

1var a = 1; // 直接赋值 2 3 4String name; // 先声明 5name = "dashucoding"; // 后赋值

变量,可以分为类变量,局部变量等。
类变量是声明在类中,也叫成员变量。
局部变量是声明在方法或是在方法代码块中的变量。

数据类型

基本数据类型:byte short int long float double
boolean, char

byte字节型有1字节,short短整型有2字节,整数int有4个字节,长整型long有8字节,单精度float有4字节,双精度double有8字节,字符型char有2字节,布尔型boolean有1字节。

基本数据类型分,数值型(整数类型,byte,short,int,long)(浮点类型float,double),字符类型char,布尔类型boolean

整数字面量为整型(int
小数字面量为双精度浮点型(double

引用数据类型:类class,接口interface,数组

运算符:算术运算符,逻辑运算符,关系运算符,赋值运算符。

加(+)、减(-)、乘(*)、除(\)

逻辑运算符:

&& 逻辑与
II 逻辑或
! 逻辑非

关系运算符:

>、<、>=、<= 

位逻辑运算符

1&(与) 2|(或) 3~(非) 4^(异或)

1 true 0 false

位与运算符

同时为1,才是1,不然就是0,任何数与0都是为0。

位或运算符

有一个是1,就为1,只有都是0,才为0。

位异或运算符
异或
同时为0,或,同时为1,才为0,否则都是为1。

位取反运算符
取反
1变0,0变1

左位移运算符
原来数的 2 倍

右位移运算符
原来数的 1/2 倍

数据类型转换

什么是向上转型?向上转型就是将子类的对象赋值给父类的引用。
什么是向下转型?向下转型就是将父类的对象赋值给子类的引用

显式转换,强制类型转换
隐式转换,自动类型转换

数据类型转换:

byte -> short -> int -> long -> float -> double

字符类型转换:

1char -> int 2 3 4public class Test{ 5char c = 'a'; 6switch(c){ 7 case 'b': 8 System.out.println('b'); 9 break; 10 case 'c': 11 System.out.println('c'); 12 break; 13 case 'a': 14 System.out.println('a'); 15 break; 16 default: 17 System.out.println('d'); 18} 19} 20} 21// swith( char byte short int )只允许四种类型 22 23 24public class Test{ 25public static void main(String args[]){ 26 int score = 90; 27 if(score > 85 && score <= 100){ 28 System.out.println("成绩为优"); 29 } 30 else if(score > 75 && score <= 85){ 31 System.out.println("成绩为良"); 32 } 33 else if(score > 60 && score <= 75){ 34 System.out.println("成绩为中"); 35 } 36 else if(score <= 60 && score >= 0){ 37 System.out.println("成绩为差"); 38 } 39 else if(score > 100 || score < 0){ 40 System.out.println("成绩不在正常的范围之内"); 41 } 42} 43} 44 45for(int i = 0; i < 10; i++){ 46System.out.println(i); 47} 48 49public class Test{ 50public static void main(String args[]){ 51 int i = 0; 52 while(i < 10){ 53 System.out.println(i); 54 i++; 55 } 56} 57}

流程控制语句:顺序结构,选择结构,循环结构
打印100-200的素数:

1class Test{ 2public static void main(String args[]){ 3 for(int i = 100; i < 201; i++){ 4 boolean b = false; 5 6 for(int j = 2; j < i-1; j++){ 7 int k=i%j; 8 if(k==0){ 9 b=true; 10 } 11 } 12 //如果不是true就打印出素数 13 14 if(!b){ 15 System.out.println(i); 16 } 17 } 18} 19} 20 21 22public class Test{ 23public static void main(String args[]){ 24 int i = 5; 25 int j = i++ + 5; 26 System.out.println(i); 27 System.out.println(j); 28 } 29} 30 31j=10; 32i=6; 33 34int j = ++i + 5; 35System.out.println(j); 36j=11; 37i=6;

if语句:

1if (条件表达式) 2{ 3 // 语句块; 4} 5 6if (表达式) 7{ 8 // 语句块1; 9} 10else 11{ 12 // 语句块2; 13}

switch语句:

1switch(表达式) 2{ 3 case1: 4 // 语句块; 5 break; 6 case2: 7 // 语句块; 8 break; 910 case 值n: 11 // 语句块; 12 break; 13 default: 14 // 语句块; 15 break; 16}

while语句:

1while(条件表达式) 2{ 3 // 语句块; 4} 5 6do 7{ 8 // 语句块; 9}while(条件表达式); 10 11 12for(条件表达式1;条件表达式2;条件表达式3) 13{ 14 // 语句块; 15}

九九乘法表

1public class Demo 2{ 3 public static void main(String[] args) 4 { 5 for(int i=1;i<=9;i++){ 6 for(int j=1;j<=i;j++){ 7 System.out.print(j+"*"+i+"="+j*i+"\t"); 8 } 9 System.out.println(); 10 } 11 } 12}

foreach 循环语句:

1for(类型 变量名:集合) 2{ 3 // 语句块; 4}

break,continue,return语句:

return用于终止函数的执行或退出类的方法
break用于退出循环,使用break语句可以实现goto功能
continue 语句跳出循环体,主要结束本次循环

break label;

输入语句:

1Scanner sc=new Scanner(System.in); 2int year=sc.nextInt(); 3int month=sc.nextInt();

判断闰年:

1if((year%4==0&&year%100!=0)||(year%400==0)){ 2 System.out.println(year+"闰年"); 3}else{ 4 System.out.println(year+"平年"); 5} 6 7int day=0; 8switch(month) 9{ 10 case 1: 11 case 3: 12 case 5: 13 case 7: 14 case 8: 15 case 10: 16 case 12: 17 day=31; 18 break; 19 case 4: 20 case 6: 21 case 9: 22 case 11: 23 day=30; 24 break; 25 default: 26 if(isR){ 27 day=29; 28 }else{ 29 day=28; 30 } 31 break; 32}

字符串一旦被创建,值是不能改变的,但是可以用其他变量重新赋值。字符串必须要进行初始化才能使用。

String()表示一个空字符序列:

1String str1=new String("hello world"); 2String str2=new String(str1);

concat()方法,把一个字符串连接到另一字符串后面

字符串1.concat(字符串2);

toLowerCase()和toUpperCase()

1字符串名.toLowerCase() 2 3 4字符串名.toUpperCase()

trim()去除空格:

字符串名.trim()

substring()方法用于获取字符串的,截取字符。

1str.substring(0); // 从开始到结束 2str.substring(3); // 从3开始 3str.substring(03); // 从0到3

spilt()切割分隔符

字符串替换:

1replace(), replaceFirst(), replaceAll() 2 3 4str.replace(String old, String new); // 旧的, 新的 5 6 7str.replaceFirst("dashucoding", "dashu"); // 替换第一个字符出现的位置 8 9 10str.replaceAll("dashu", "da"); // 替换所有子字符串

Java虚拟机把内存分为栈内存和堆内存

1class Test{ 2public static void main(String args[]){ 3 Dog d = new Dog(); 4 d.name="哈哈"; 5 d.age=2; 6 d.jump(); 7 System.out.println("名字是"+d.name); 8 } 9}

重载的表达

1class A{ 2void funA(){ 3 System.out.println("没有参数的funA函数"); 4} 5void funA(int i){ 6 System.out.println("有参数的funA函数"); 7} 8void funA(int i,double d){ 9 System.out.println("拥有两个参数的funA函数"); 10} 11} 12 13class Test{ 14public static void main(String args[]){ 15 A a = new A(); 16 a.funA(); 17 a.funA(1,2.0); 18 } 19}

equals()方法:

str1.equals(str2);

equalsIgnoreCase()忽略大小写

str1.equalsIgnoreCase(str2);

indexOf(),lastIndexOf,CharAt()

indexOf()返回索引值,

1str.indexOf(value) 2str.indexOf(value,int fromIndex) 3 4 5// 从末尾找 6str.lastIndexOf(value) 7str.lastlndexOf(value, int fromIndex) 8 9 10str.charAt(索引值);

继承,封装,多态
Java只支持单继承,不允许多继承,继承是为了减少重复代码

1class Person{ 2String name; 3int age; 4Person(){ 5 System.out.prinltn("Person的无参数构造函数"); 6} 7Person(String name,int age){ 8 this.name=name; 9 this.age=age; 10 System.out.println("Person有参数的构造函数"); 11} 12 13void eat(){ 14 System.out.println("定义吃饭的方法"); 15} 16} 17 18class Student extends Person{ 19//子类继承父类 20Student(){ 21 //父类 22 super(); 23 System.out.println("Student的无参数构造函数"); 24} 25Student(String name,int age,int id){ 26 super(name,age); 27 this.id=id; 28} 29} 30 31class Test{ 32public static void main(String args[]){ 33 Student student = new Student(); 34} 35}

什么是复写?
具有父子关系的两个类中,父类和子类各有一个函数,这两个函数的定义(返回值类型,函数名,参数列表)完全相同。

StringBuffer类是可变字符串类,创建StringBuffer类的对象后可以修改字符串的内容,如果超出了类对象的容量,会自动扩大的。

1//多个引用指向同一个字符串 2String str1 = "dashu" 3String str2 = "dashu"; 4System.out.println(str1==str2); 5//结果 6true 7 8 9//内容相同,但是创建方式不同的情况 10String str3 = "abc" 11String str4 = new String ("abc"); 12System.out.println(str3==str4);//false 13System.out.println(str3.equals(str4));//true 14//结果 15false 16true

StringBuffer

对于字符串是常量,它的值在创建后时不可以改变的,但字符串缓冲区支持可变的字符串。

StringBuffer类为java.lang中,StringBuffer为字符串缓冲,StringBuffer为线程安全的可变字符序列,类似String的字符串缓冲区,缓冲区不能改,但里面可以改,通过某方法可以改变序列的长度和内容。

StringBuffer提供了主要的两种方法,一,append(),二,inset()

StringBuffer为一个字符串缓冲区,相对于一个容器,长度是可变的,可以存储任意类型数据,是将任意数据转变为字符串进行存储,StringBuffer提供了对数据的很多的操作功能。

例子:

1StringBuffer sb = new StringBuffer(); 2sb.append("da"); 3sb.append("shu"); 4System.out.println(sb); 5//sb.append("da").append("shu");

如果要操作数据,要转换为字符串。StringBuffer所有存储的元素都被转成字符串才可使用。

String str = sb.append("da").append("shu").toString();

在指定位置插入元素

sb.insert(2,"hehe");//插入

StringBuffer和StringBuilder的区别

StringBuilderjava.lang类,是一个可变的字符序列,提供了与StringBuffer兼容的APIStringBufferStringBuilder方法是一模一样的。

StringBuilder不同步,不安全。如果同时append(),delete(),insert(),会导致出错,多线程访问不安全,添加修饰synchronized即可。在jdk1.5版本后,推出StringBuilder被用作一个StringBuffer的简易替换,用在字符串缓冲区被单个线程使用的时候。

使用StringBuilder的出现,是为了提高效率,是非同步的,是对单线程访问效率高,对于StringBuffer是同步的,对多线程的访问是安全的。这些是不同点,相同的是功能一模一样的哦。

StringBuffer类替换字符

1StringBuffer 对象 2对象.setCharAt(int index, char ch); 3 4 5StringBuffer 对象 6对象.reverse(); 7 8 9StringBuffer 对象 10对象.deleteCharAt(int index); 11 12 13StringBuffer 对象 14对象.delete(int start,int end);

正则表达式

1^ 匹配输入字符串开始的位置 2$ 匹配输入字符串结尾的位置 3* 零次或多次匹配前面的字符或子表达式 4+ 一次或多次匹配 5? 零次或一次 6{n} 正好出现 n 次 7{n,} 至少出现 n 次 8{n,m} 出现 n~m 次 9[a-z] 匹配指定范围内的任何字符 10[^a-z] 反向范围字符 匹配不在指定的范围内的任何字符 11\d 数字字符匹配 [0-9] 12\D 非数字字符匹配 13\s 匹配任何空白字符 14\t 制表符匹配

结言

好了,欢迎在留言区留言,与大家分享你的经验和心得。

感谢你学习今天的内容,如果你觉得这篇文章对你有帮助的话,也欢迎把它分享给更多的朋友,感谢。

作者简介

达叔,理工男,简书作者&全栈工程师,感性理性兼备的写作者,个人独立开发者,我相信你也可以!阅读他的文章,会上瘾!,帮你成为更好的自己。长按下方二维码可关注,欢迎分享,置顶尤佳。

努力努力再努力Jeskson

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Java语言 - HelloWorld