Java基础 自学讲义 1. 语法基础

今天开始看CoreJava Vol.1学Java啦 嘤嘤嘤 ^O^
我的环境是macOS High Sierra Version 10.13.5(17F77) Java的版本是 10.0.2
java version "10.0.2" 2018-07-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)
资料:JDK 1.6 在线中文手册

目录:

一.编译运行Java程序
二.基本结构流程
A.数据类型

    1.注释
    2.数据类型
    3.运算符
    4.强制类型转换
    5.逻辑关系运算符
    6.位运算
    7.优先级
    8.枚举类型
    9.字符串

B.输入输出

    1.流读入
    2.格式化输出
    3.文件读写

C.控制流程
D.大数运算
E.数组

    1.数组声明两种方式
    2.初始化数组
    3.数组拷贝
    4.命令行参数
    5.数组排序
    6.多维数组

一.编译运行java程序

编写好java程序后保存为code.java,当前目录下终端里使用javac code.java 这会在当前目录生成一个code.class 然后终端中使用java code就可以执行这个java代码;

二.基本结构流程

1.数据类型
1.注释

可以用// 或者/*   */来注释 可以用/** */来生成文档;

2.数据类型

1.整型
整型
java中没有unsigned的形式的整型;
java的可移植性体现在 变量在不同机器上的内存占用是相同的;
2.浮点型
浮点型
3.字符型char
java中不建议使用char类型;
4.boolean型
java中不可以用0表示false 1表示true; 注意不是bool,是boolean型!!
5.常量
使用final int INFINITY=0x7fffffff;来定义,表示只可以定义一次,不可以多次修改;
常量定义常用大写字母;
全局下常量可以这样定义 public static int INFINITY=0x7fffffff;
6.java中所有数据定义后必须要进行赋值初始化才能操作;

3.运算符

java提供了 + - * / 四种算术运算符; 还有取余运算%;
注意的是java默认在浮点运算过程中会进行截断,如果想要进行精确浮点运算可以在主函数中加入strictfp标记 public static strictfp void main(String[] args)
在Math类中提供了其他的一些常用运算;

Math.sqrt()
Math.pow()
Math.sin() Math.cos() Math.tan()
Math.exp()
Math.log()
还有一个Math.floorMod()修正了直接使用%运算符 对被除数是负数情况的修正;
还有一些常量 Math.E表示自然对数的底数e Math.PI表示π
在代码开头加入import static java.1ang.Math.*;就可以不用每次都写Math.了;
java还提供了赋值和运算符的结合写法,如x+=1;x%=2;这种语法;
也可以使用x++;--x;这种自增自减的写法;

4.强制类型转换

可以使用(int)x这样的方法进行强制类型转化;
可以使用下面这种方法进行四舍五入的浮点数取整,注意的是Math.round()返回的是long型,需要强制转换为int 默认的直接转换是向下取整的;

double x=9.5;
System.out.println((int)Math.round(x));

尽量不要把bool型和其他类型的变量进行转换,如果实在需要可以用 a?1:0来转换bool成int;

5.逻辑关系运算符

相等== 不等!= 还有< > 之类的;
与&& 或||;
还有x<y ? x : y ;这样的语法;

6.位运算

与(and) &
或(or) |
非(not) ~
异或(xor) ^
左移位<<
右移位>>
还有一个>>>运算符,与>>的区别在于>>>会用0填充高位,而>>会用符号位填充高位(负数的情况);

7.优先级

以后再说吧,脑阔疼;

8.枚举类型

转一篇blog吧 Java 枚举(enum) 详解7种常见的用法

9.字符串

Java 字符串就是 Unicode 字符序列;
Java 没有内置的字符串类型,但是可以使用标准库里的String;
所有双引号括起来的都是String的一个实例;
1.子串substring
子串substring 例如 s.substring(a,b) 截取了s字符串的[a,b)位的字符串;
2.拼接
可以使用+来拼接,比如

String s="Hello";
s+="World";//s="HelloWorld"

字符串也可以和其他类型拼接 比如

int ans=1;
String s="The answer is "+ans;//s="The answer is 1"

+进行拼接可以连续用多次;
也可以使用String的join方法,比如String s=String.join("-","T","P","N","B");要注意,这样做得到的s串是"T-P-N-B" join函数会把第一个接收到的字符串作为分隔符;
3.修改元素
要注意的是java里的字符串是不可变的,比如我定义了String s="Hello"那么我不可以直接s[0]=”F”来把它变成”Fello”,而需要s="F"+s.substring(1,s.length());来修改其中的元素;
4.检查字符串是否相等
可以用s.equals(t);来检查s和t是否相等;equals函数等价于compareTo函数,类似于C中的strcmp;
也可以用s.equalsIgnoreCase(t)来检查不区分大小写是否相等;
5.获取字符串中的单个字符
可以用char a=s.charAt(1);来获取s字符串的第2个字符;
当然如果不介意使用String的话也可以String b=s.substring(1,2);

还有一些常用的函数在这里可以找到

6.构建字符串
构建字符串

2.输入输出
1.流读入

在程序开头加上import java.util.*;

Scanner in = new Scanner(System.in);
String name = in.nextLine();

这是读入一行的办法;
还可以直接in.next()读取一个字符串,以空格为结束标志;
还有nextInt() nextDouble()等方法;
因为Scanner的读入会让输入保留在屏幕上,如果想输入密码,使得输入不保留在屏幕上可以:

Console cons = System.console();
String username = cons.readLine("Username: ");
char[] passwd = cons.readPassword("Password: ");

记得要import java.io.Console;

2.格式化输出

java支持和C一样的prinf方法,System.out.printf()即可;
string可以格式化字符串

String message = String.format("Hello, %s. Next year, you'll be %d", name, age);
3.文件读写

可以这样来用 File 对象构造一个 Scanner 对象

Scanner in = new Scanner(Paths.get("/Users/zhangpeiwen/Downloads/list"),"UTF-8");

然后可以使用in.nextline()等方法从文件里读内容了;
然后写文件:

PrintWriter out = new PrintWriter("dt.txt","UTF-8");
out.println("Recluse");
out.close();

注意的是写文件时要关闭文件才会保存;

3.控制流程

java支持和C++一样:

判断语句 if else;
循环语句while 和do while;
选择switch语句 ;

java里的break和continue有和C++一样的功能;
而且还提供了带标签的break;

L1://程序输入2后会结束这个循环
        while(true){
            Scanner cin = new Scanner(System.in);
            int a = cin.nextInt();
            if(a==2) break L1;
        }
        System.out.println("End of this program\nThanks!");

要注意的是标签只能用于循环结构前面,不能完全当做goto来用;
Java中没有goto语法;

Java还提供了for each语句;
比如可以用这个代码来打印数组

for(int i:a){
    System.out.println(i);
}

也有更简单的方法打印数组:

System.out.println(Arrays.toString(a));
//结果形如[1, 2, 3, 4]
4.大数运算

java提供了很方便的库BigInteger和BigDecimal可以进行任意精度的整数和浮点数运算;
不过并没有重载运算符,所以加减乘除幂乘之类的操作都要用方法来实现;
比如有些常用的:

valueOf(BigInteger val)//将参数转换为大整数类型
abs()//求绝对值 
add(BigInteger val)//加法
subtract(BigInteger val)//减法(this - val)
multiply(BigInteger val) //乘法
divide(BigInteger val)//除法(this / val)
remainder(BigInteger val)//取模
mod(BigInteger val); //同上
gcd(BigInteger val)//求最大公约数
negate(BigInteger val); //求相反数
boolean equals(BigInteger val)//比较是否相等
compareTo(BigInteger val)//比较,返回值1、0、-1分别表示大于、等于、小于  
pow(intexponent) //返回当前大数的exponent次幂
toString()//返回此BigInteger的十进制字符串表示形式
toString(intradix)//返回此BigInteger的给定基数(radix进制)的字符串表示形式
BigInteger(String val)//将字符串转换为大整数型十进制表示形式
BigInteger(String val,int radix)//将指定基数的字符串转换为BigInteger型

常用姿势:

BigInteger a = BigInteger.TEN;//BigInteger的基本常量有ONE TEN ZERO
BigInteger b = a.pow(31);//pow的输入是int 哈哈幂乘也要大数过分了 实在要可用二分幂模拟一哈
b=a.subtract(BigInteger.valueOf(20));
5.数组
1.数组声明两种方式
int[] a; (Recommend)
int a[];
2.初始化数组:
int[] a = new int [100];
//100这里也可以是一个变量n;
//int初始化为0,boolean为false;string初始化为null,注意不是空串
int[] a = {1,2,3,4};
//长度为4,不可更改
int[] a = new int[] {1, 2, 3};
//使用匿名数组来初始化数组
3.数组拷贝

可以直接对数组元素进行赋值 如 a[5]=12;
当需要拷贝数组的时候可以使用Arrays.copyOf()方法;

    int[] b = Arrays.copyOf(a,2*a.length);
    //(b为目标数组,a为待拷贝数组,2*a.length为目标数组的长度);
    //这个方法常用于增加数组长度,当目标数组的长度小于待拷贝数组长度时会只拷贝前面的元素;
4.命令行参数

我们的主函数是这样写的 public static void main (string[] args){}

for(String i : args) System.out.println(i);
//编译时使用java test Tang Peng Niu Bi
//可以输出Tang Peng Niu Bi
5.数组排序

使用Arrays.sort(a)函数,用优化过的快排算法对a数组进行排序;
二分查找:返回[start,end)范围内查找成功的第一个元素的下标值,否则,返回一个负数值r,-r-1是为保持a有序v应插入的位置;
static int binarySearch(type[] a, int start, int end, type v)

6.多维数组

声明和初始化方法:

double[] a = new double[row][col];
double[] b = {
{1,2,3},
{4,5,6},
{7,8,9}
};

多维数组
注意,如果想实现每一位数组不同的长度,可以先定义row,再循环定义col的长度,实现不规则长度的二维数组;

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目 录 第一章 JAVA入门 10 计算机语言发展史 10 机器语言 10 汇编语言 10 高级语言 10 其他高级语言 11 JAVA发展简史 12 JAVA为什么能够流行? 13 JAVA各版本的含义 13 JAVA技术体系架构 14 JAVA的特性和优势 14 JAVA应用程序的运行机制 15 JVM(JAVA VIRTUAL MACHINE) 16 Java运行时环境JRE(Java Runtime Environment) 17 JAVA语言应用范围 18 第一个JAVA程序 18 JAVA开发环境搭建 18 一个典型的JAVA程序的编写和运行过程 19 第一个程序常见错误 20 第一个JAVA程序的总结和提升 20 常用Java开发工具 20 常用dos命令 21 本章笔试作业 21 本章上机操作 21 第二章(1) 编程的基本概念 22 注释 22 标识符 22 关键字/保留字 23 变量(variable) 24 常量(Constant) 25 命名规则(规范) 25 基本数据类型(primitive data type) 26 整型变量 26 浮点型 27 字符型(2个字节): 28 boolean类型 29 运算符(operator) 29 二元运算符 29 一元运算符 30 布尔逻辑表达符 30 位运算符 30 扩展运算符 31 字符串连接符 31 三目条件运算符 31 运算符优先级的问题 31 自动类型转换 32 基本类型转化时常见错误和问题 33 方法 33 简单的键盘输入和输出 33 本章思考作业 34 上机操作 34 第二章(2) 控制语句 35 顺序结构 35 选择结构 35 if单选择结构 35 if-else双选择结构 35 If-elseif-else多选择结构 36 switch多选择结构 37 循环结构 39 While和dowhile的区别 41 For循环 42 break语句和continue语句 47 语句块 48 递归结构 49 本章作业 50 本章上机操作 51 第三章 JAVA面向对象程序开发 52 编程语言发展史 52 类和对象是如何产生发展的?如何进化的? 52 面向对象思想初步(OOP初步Object Oriented Programming) 53 面向对象编程的语言的三大特征简介 56 对象和类的概念 56 类和对象初步 57 测试类的定义方式 57 简单的学生类编写示例 58 内存分析 59 属性(field,或者叫成员变量) 59 引用类型 60 类的方法 60 对象的创建和使用 60 构造器(或者叫做构造方法,constructor) 60 垃圾回收机制(Garbage Collection) 63 方法的重载(overload),构造方法的重载 63 this关键字 65 static 关键字 66 静态初始化块(经常用来初始化类,加载类信息时执行!) 67 package 68 JDK中的主要包 68 import 68 eclipse的使用 69 继承(extend, inheritance) 70 为什么需要继承?继承的作用? 70 继承介绍 70 如何实现继承? 70 继承使用要点 71 Object类 72 toString方法 72 equals方法 73 super关键字 74 方法的重写(override) 74 隐藏/封装(encapsulation) 75 为什么需要封装?封装的作用和含义? 75 使用访问控制符,实现封装 76 封装的使用细节 76 多态(polymorphism) 76 为什么需要多态? 76 如何实现多态? 77 方法绑定(method binding) 77 静态绑定 77 动态绑定 77 多态的使用要点 78 对象的转型(casting) 79 final 81 抽象类 82 抽象类的使用要点 83 接口 83 为什么需要接口? 84 如何定义接口? 84 接口的本质探讨 84 接口使用要点 85 接口的多继承 86 面向接口编程 87 OOP更多应用 87 组合 87 内部类(innerclasses) 88 字符串(java.lang.String类)的使用 90 字符串相等的判断 92 思考作业 93 上机作业 94 第四章 异常机制 95 导引问题 95 异常(Exception)的概念 96 异常分类 96 Error 97 Error和Exception的区别 97 Exception 97 异常的处理办法之一,捕获异常 99 try块 99 catch 99 finally 100 try, catch,finally ,return 执行顺序 100 异常的处理办法之二,声明异常: throws子句 101 方法重写中声明异常原则 102 异常的处理办法之三,手动抛出异常,throw子句 103 自定义异常 103 使用异常机制建议 104 总结 105 思考作业 105 上机作业 105 第五章 数组 106 数组概述和特点 106 创建数组和初始化 106 数组常见操作 108 数组的拷贝 108 数组排序 109 多维数组 110 附录(面试前复习一下!!) 111 冒泡排序 111 二分法查找 112 命令行参数的问题 113 增强for循环 114 思考作业 114 上机作业 115 第六章 常用类的使用 117 基本数据类型的包装类 117 包装类基本知识 117 包装类的用途 118 自动装箱和拆箱?autoboxing,unboxing 119 字符串相关类(String、 StringBuffer 、 StringBuilder) 120 String类的常用方法(已讲过,不再讲!) 120 StringBuffer和StringBuilder 121 String和StringBuffer和StringBuilder使用要点 123 时间处理相关类 124 Date时间类(java.util.Date) 124 DateFormat类和SimpleDateFormat类 125 Calendar日历类 126 可视化日历的编写 128 Math类 131 File类 132 File类的基本用法 132 树状结构展现文件结构 133 枚举 133 上机作业 135 第七章 容器(Collection) 136 容器的作用和概览 136 容器中的接口层次结构 136 Collection接口 137 LIST接口 137 SET接口 138 Map接口 138 Iterator接口 139 遍历集合 140 Collections工具类 141 Comparable接口 141 equals和hashcode方法 143  泛型 144 思考作业 145 上机作业 145 第八章 IO技术 146 为什么需要学习IO技术 146 基本概念 146 数据源 146 流的概念 146 第一个简单的IO流程序及深入(将文件中的数据读入) 146 Java中流的概念细分 148 Java中IO流类的体系 149 四个IO基本抽象类 150 InputStream 150 OutputStream 150 常用InputStream和OutputStream子类用法 150 FileInputStream和FileOutputStream 150 ByteArrayInutStream和ByteArrayOutputStream 154 BufferedInputStream和BufferedOutputStream 156 DataInputStream和DataOutputStream 157 ObjectInputStream和ObjectOutputStream 158 PrintStream 158 Reader 158 Writer 159 FileReader和FileWriter 159 BufferReader和BufferWriter 159 InputStreamReader和OutputStreamWriter 161 JAVA对象的序列化和反序列化 161 为什么需要序列化和反序列化 161 对象的序列化主要有两种用途 161 序列化涉及的类和接口 162 序列化/反序列化的步骤和实例 162 综合的序列化和反序列化练习 163 JAVA.IO包相关流对象用法总结(尚学堂1002班王鑫) 165 IO中其他常用类 165 File类 165 RandomAccessFile 166 思考作业 166 上机作业 166 提高课外作业 166 第九章 多线程技术 167 基本概念 167 程序 167 进程 167 线程 167 线程和进程的区别 167 进程与程序的区别 168 JAVA中如何实现多线程(重点!!) 168 通过继承Thread类实现多线程 168 通过Runnable接口实现多线程 169 线程状态和sleep/yield/join/stop/destroy方法 170 新生状态 170 就绪状态 170 运行状态 170 死亡状态 170 终止线程的典型方法(重要!!!) 171 阻塞状态(sleep/yield/join方法) 171 线程基本信息和优先级别 173 线程同步和死锁问题 175 死锁及解决方案 179 生产者/消费者模式 181 线程回顾总结 184 任务调度(补充内容,了解即可!) 184 思考作业 185 上机作业 185 第十章 网络编程 186 基本概念 186 什么是计算机网络 186 计算机网络的主要功能 186 什么是网络通信协议 186 网络通信接口 186 为什么要分层 186 通信协议的分层规定 186 数据封装 188 数据拆封 188 IP 188 端口 188 URL 189 TCP协议和UDP协议 189 区别 189 TCP协议 189 UDP协议 190 JAVA网络编程 190 InetAddress 190 InetSocketAddress 191 URL类 191 基于TCP协议的SOCKET编程和通信 193 UDP通讯的实现 201 思考作业 203 上机作业(分组完成,3人一组,周末完成) 204 第十一章 JAVA多媒体编程 205 字体 205 字体示例和效果 205 颜色 206 颜色编程示例 206 图形绘制 206 绘制各种图形示例 207 图像处理 208 加载图片示例 208 图片任意缩放并输出新图片 209 使用JMF处理音频和视频 211 JMF的下载 211 JMF的安装和配置 211 使用JMF播放音频文件 212 上机作业 213 第十二章 GUI编程之AWT 214 为什么需要GUI?GUI是什么? 214 AWT是什么? 214 AWT的优势 214 AWT的缺点 214 为什么还需要学习AWT? 215 AWT各组件的整体关系 215 组件 215 容器 216 布局管理器 218 为什么需要布局管理器? 218 FlowLayout布局管理器 218 BorderLayout布局管理器 219 CardLayout布局管理器 220 GridLayout布局管理器 220 GridBagLayout布局管理器 221 综合应用组件和容器和布局管理器 221 AWT事件处理模型 223 问题 223 事件处理模型是什么? 223 最简单的事件处理程序 224 AWT中事件处理代码编写 225 编写过程 225 处理过程 225 简化理解上面过程 225 事件和事件源对象 225 事件适配器 232 为什么需要事件适配器 232 事件监听器常见的定义形式 233 AWT其他组件 233 菜单的实现 233 特点 233 代码示例和效果 233
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值