文章目录
- 自学java核心技术笔记
- 第一章 Java技术简介
- 一、Java的性质
- 面向对象
- 可移植性
- 动态性
- 二、关于对Java常见误解的解释
- 1.Java是HTML的拓展
- 2.Java是专用的,应避免使用
- 3.Javascript是Java的简易版
- 第二章 Java程序设计环境
- 安装Java开发工具包
- 1.下载jdk
- 2.设置JDK
- 3.设置环境变量
- 4.测试JDK能否正常使用
- 5.使用集成开发环境
- 6.简单的命令行指令应用
- 第三章 Java的基本程序设计结构
- 一、一个简单Java应用程序应具有的结构
- Java程序结构
- 使用Dos命令运行一个简单的Java程序,输出HelloWorld
- Java文件的建立及编译
- 编译,运行,输出HelloWorld
- 二、注释
- 三、数据类型
- 四、变量和常量
- 1.声明变量
- 2.变量的初始化
- 3.常量
- 4.运算符
- 5.数值类型之间的转换
- 6.字符串
- 字符串的定义:
- 子串:
- 字符串的拼接:
- 字符串的修改:
- 字符串的输出
- 检测字符串是否相等
- 空串与Null串
- 五、进制
- 1.二进制
- 2.二进制转换十进制
- 3.十进制转换二进制
- 4.二进制与八进制,十六进制之间的转换
- 5.进制之间的转换
- 六.关键字与保留字
- 1.关键字
- 2.保留字
- 3.标识符
1. 简单性
2.*可移植性
3.*面向对象
4.分布式
5.*安全性
6.体系结构中立
7.健壮性
8.解释型
9.高性能
10.*多线程
11.*动态性
面向对象,木匠做椅子,先关注的是所制作的椅子而不是工具,非面向对象的,木匠主要先考虑的是所用的工具。
两个基本概念:类,对象
三大特性:封装性,继承性,多态性
数据具有固定字节或是格式,移植到其他操作系统时不会发生改变,可在多操作系统上使用。
Java语言是运行在Java虚拟机上(JVM)的,所以在不同操作系统当中,Java在JVM上运行。对于不同的平台有不同的JVM。
可为正在运行的程序增加代码,不会影响运行中程序的使用,相比于C和C++而言,更加具有动态性,,可以很容易的实现运行程序的演进。
二、关于对Java常见误解的解释 1.Java是HTML的拓展Java是一种程序设计语言,HTML是一种描述网页结构的方式,二者没有任何共同之处
2.Java是专用的,应避免使用Java语言是闭源的,但是可以查看,可以很好的使用,在未来不久,Java语言专利到期后,会转为开源,
3.Javascript是Java的简易版Javascript是一种网页中使用的脚本语言,只有名字有些相像,其他并无任何关系
第二章 Java程序设计环境 安装Java开发工具包 1.下载jdk下载Java开发工具包,可以访问Oracle公司的网站:www.oracle.com/technetwork/java/javase/downloads进行下载,在得到所需软件之前需要明白大量专业术语,例如编写Java程序的程序员使用的软件Java Developmen Kit(jdk),这就是我们所需要下载的软件专业术语
2.设置JDK这个可以百度自行搜索
3.设置环境变量 4.测试JDK能否正常使用 1.win+R,输入cmd2.输入javac.exe 出现如下界面
3.输入java -version 注意中间有空格
(如果输入java -version无反应,可以输入java.exe -version)
出现如下界面
安装成功后,即可使用集成开发软件编写代码了,如果出现错误请重新安装jdk,或者安装低版本jdk
5.使用集成开发环境我们可以使用一些免费的集成开发软件,例如Eclipse,IntelliJ IDEA,NetBeans等
6.简单的命令行指令应用dir:列出当前目录下的文件以及文件夹
md:创建目录
rd:删除目录
cd:进入指定目录
cd…:返回至上一级目录
cd:返回至根目录
del:删除文件
exit:退出dos命令
public class Test{
public static void main(String[] args){
System.out.println("Hello world");
}
}
例如以上简单Java程序,此程序虽然简单,但是所有java程序都应具备这种结构
Java程序结构1.Java程序中是区分大小写的,如果出现大小写拼写错误,程序将无法运行
2.关键字public成为访问修饰符,这些修饰符用于控制程序的其他部分对于这段代码的访问级别。
3.关键字class表明Java程序中的全部内容包含在类中,class后紧跟类名
4.类名问题:Java中定义类名的规则很宽松,名字必须以字母开头,其后可以添加符号与字母的任意组合,但是不可以使用Java保留字,类名规范为大写字母开头的名词,例如:class Sample,如果类名由多个名词构成,那么应以每个单词的首字母大写定义,例如:class FristSample.
5. 定义Java程序名字后切记不要添加(.class)拓展名,程序执行后会自动添加
6.在以上例子中我们使用了System.out对象并调用了println()方法,注意,点号(.)用于调用方法,Java中使用调用方法的通用语法是object.method(parameters参数)
7.代码中的大括号({ }),Java中的任何方法都用 ‘{’开始,用 ’ } ’ 结束。
8.在Java中,每个句子必须用分号(;)结束
9. 执行Java程序是,Java虚拟机总是从指定类中的main方法开始执行,所以为了代码能够执行,必须在类的源文件中必须包含一个main方法,并在main方法中调用这些方法(main方法必须声明为public)
10.在一个java源文件中可可以声明多个class,但是,最多有一个类声明为public的,而且要求声明public的类的类名必须与源文件名相同
11.编译源文件(.java)后或出现一个或多个字节码文件(.class),字节码文件的名称为类名
使用Dos命令运行一个简单的Java程序,输出HelloWorld Java文件的建立及编译Java程序是通过将代码编写到.java文件(源文件)中,再由javac.exe进行编译的,编译完成后生成.class文件(字节码文件),最后通过java.exe对生成的.class文件进行运行的。(注:.class文件的命名是在对源文件编译完成后,将源文件中的类名用作于.class文件的名字)。
编译,运行,输出HelloWorld建立一个.txt文件,命名为Helloworld,更改文件类型为.java类型,这边建立一个Helloworld.java文件,使用记事本打开,如下图输入
打开Dos命令,进入.java文件路径,并输入javac HelloWorld.java进行编译,生成HelloChina.class文件(取名为类名)
输入java HelloChina.class进行运行,最后输出HelloWorld
//注释方法以及使用
// 1.单行注释:符号// 在输入//符号后 符号后同行内容不会影响代码运行
//2.多行注释:符号 在符号之间的内容会被注释,不影响代码的运行
public class Notes {
public static void main(String[] args) {
System.out.println("hellowrld");//输出helloworld
}
}
三、数据类型
//
//数据类型:整型(byte,int,short,long) 浮点型(float,double) 布尔型(boolean) 字符型(char),引用型数据-字符串(String)
//
public class DateType {
public static void main(String[] args) {
//整型 long>int>short>byte
int a=1;
short b=2;
long c=1000000000000000l; // 长整型之后要加l(L),输出结果不带L,不加l会默认为int类型,编译不报错
//浮点型 double>float
float n=0.3f;// float类型之后要加 f或F 否则 则会被默认为是double类型,不加f会默认为double类型
double m=0.34;// double类型之后可以选择 加d或D或不添加
//布尔型 (整型值与布尔值不能相互转换)
boolean one=true;
boolean two=false;//布尔型只有两种值
//字符型
char s='a';// 定义一个字符型 符号是'',内容可以是一个字符,转义字符,Unicode的值
//char s=97的值和char s='a'的值相同,因为java语言会自动把97转义为小写字母a
char car='n';
System.out.println("注意Unicode转义在注释后定义转义符号u等会提示转义错误");//输出结果:转义出错
//字符串
String ni="wode"; //定义一个字符串 符号是""
System.out.println(ni);
}
}
四、变量和常量
1.声明变量
//变量(Variable)
//声明一个变量的名字可以定义很多,范围有数字.字母.符号(_,$)
//符号不可单独做一个变量名
//不可使用保留字作为变量名
public class Variable {
public static void main(String[] args) {
//定义一个变量
int a;
//定义多个变量
int d,e,f;
//给变量赋值的方法
int b;
b=1;
//或者
int c=1;
}
}
变量的作用域,其定义所在的一对{ }中,变量只有在其作用域内有效,同一作用域中,不能重复定义变量的名。
public class Variable{
public static void main(String[] args){
int num=1;
System.out.println(num);
Variable2 v=new Variable2();// v 为引用Variable类的对象
System.out.println(v.num);//在这里调用variable2类中的num变量
//两个相同的变量名,但是其作用域不一样,所以可以使用
}
}
class Variable2{
int num=2;
}
2.变量的初始化
定义变量的格式:数据类型 变量名 = 变量值;
在Java语言中,声明一个变量要对其进行初始化,如果声明完,没有对其赋值直接进行使用,会出现错误,例如以下
int a; System.out.println(a);//没有对该变量进行初始化,直接使用会出现错误
声明完变量后,我们应对其进行初始化,如下
//对变量进行初始化的方法有两种 //可以在声明变量的同时直接对变量进行初始化 int a=10; //也可以在声明变量后进行变量的初始化 int a; a=10;
变量要先声明并初始化,然后在进行使用,变量的初始化尽量靠变量第一次使用的地方近一些
3.常量//常量(final)
//定义一个常量用关键字 final
//关键字final表示这个变量只能被赋值一次,赋值后不能更改
//类常量,定义在main方法的外部,类常量可以在一个类的多个方法使用
public class Final {
public static final int a=1;//使用static final定义一个类常量,在此类中可以被多个方法使用,添加public可以被其他类使用
public static void main(String[] args) {
final int b=2;//定义一个常量,此常量的值不可被改变
b++;//当尝试改变b的值时会报错
System.out.println(b);
}
}
4.运算符
//运算符
//算术运算符 + - * /(除) %(求余) (也叫二元运算符)
//赋值 和运算符
//自增与自减
//关系运算符
//位运算符
public class Calculation {
public static void main(String[] args) {
//赋值 和运算 符
int x=1;
x=x+4;//或者x+=4 其他算数运算符也是如此
x+=3.5;//如果这种写法的两边类型不一致时,就会发生强制类型转换 将其计算结果类型转换成与左边的一致
System.out.println("x的值:"+x);
//自增与自减
int y=3;
y++; //y++相当于y=y+1 会先计算结果
++y;//++y会先输出y的值,在进行y=y+1
//减号与加号同样
int z=1,h=2;
z=z*h++;//这样会先计算h++,再计算z*h
z=z*++h;//这样会先计算z*h,在计算h=h+1
//关系运算和boolean
//检测相等性 可用== 3==7 结果为flase
//检测不相等 可用!= 3!=7 结果为true
//还有经常用的 > < >= <= 等
// &&(与 一假则假) || (或 一真则真)
//位运算符
//括号与与运算符级别
// a&&b||c
//&&优先级高于|| 等价于 (a&&b)||c
//a+=b+=c +=是右结合运算符 所以等价于a+=(b+=c)先计算b+=c 再用 b+c的值加a
}
}
5.数值类型之间的转换
//类型转换
int n=123456789;
float f=n;
//在数据类型转换时,高精度向低精度转换会丢失精度
System.out.println(f);//输出结果为1.23456792E8
int num1=3;
float num2=4.56f;
System.out.println(num1+num2);
//强制类型转换
double xy=9.997; //将double类型强制转换为int类型
int nx=(int) xy;//丢失精度 变为整型 nx=9
int next=3;
float nex=(float)next;//将int类型强制转换为float类型
System.out.println(nex);//输出结果为3.0
6.字符串
字符串的定义:
(1)用String定义字符串,(2)给字符串初始化赋值时使用( " ")
String a = "hello";//定义一个字符串,用""
String b = "study";
String c = "Java";
String d="Hello";
子串:
//子串 用substring方法可以从字符串中提取子串
String a = "hello";
String s = a.substring(0, 3); //substring从0开始计数,到3为止,但不包括3
System.out.println(s);//输出结果为hel
字符串的拼接:
//字符串拼接
String a="hello";
String b="我今年";
String c="world";
String sum = a + c;//字符串拼接中间没空格,+会按照顺序将两个字符串拼接起来
System.out.println(sum);//输出结果helloworld
int age = 13;
String ra = b + age;//当字符串与非字符串类型拼接时,会自动将其转换为字符串类型
System.out.println(ra);//输出结果为 我今年13
字符串的修改:
由于String类中并没有提供修改字符串中某个字符的方法,所以想要修改字符串,只可以使用方法进行拼接替换
//字符串的修改 字符串是不可修改的,所以想要修改字符串只有替换字符串,使用substring方法提取字符串
String h ="hello";
String New=h.substring(0,3)+"p!";
System.out.println(New);//输出结构为help!
字符串的输出
//直接输出字符串
System.out.println("This is my name : 昭浅");//
//如果想将多个字符串输出,并且使用一个界定符号分开,可以使用静态join方法
String all=String.join("/","s","m","l"); //输出结果为 s/m/l
//重复输出字符串的方法repeat
String repeat="java".repeat(3); //将java重复输3遍
System.out.println(repeat);//输出结果为 javajavajava
检测字符串是否相等
// 用equals方法检测字符串是否相等 相同为true 不相同为false
String a="me";
String d="your";
System.out.println(a.equals(d)); //直接使用连个变量相比较
System.out.println("hello".equals(a)); //用字符串与变量相比较
System.out.println(a.equalsIgnoreCase(d)); //两个变量间不分大小写的比较
空串与Null串
NULL:代表声明了一个空对象,不是一个字符串,可以赋给任何对象。 空字符:代表声明了一个对象实例,这个对象实例的值是一个长度为0的空字符串
String a="";//a为空串,长度为0,内容为空的字符串 String b=null;//声明一个空对象五、进制 1.二进制
二进制的整数有如下三种形式
原码:直接将一个数值换成二进制数,最高位是符号位
负数的反码:是对原码按位取反,只是最高位(符号位)确定为1
负数的补码:其反码加1
用14 的二进制数来举例说明
这是14的二进制形式:
| 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 |
|---|
最高位为符号位,0:正数,1:负数
这是-14的原码:
| 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 |
|---|
这是-14的反码:
| 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 |
|---|
这是-14的补码 负数的补码:其反码加1
| 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 |
|---|
在计算机的底层都以补码的方式来存储数据(无论正负)!
正数的原码,反码,补码是相同的,所以正数可以直接当做数据存储,而负数的补码需要通过负数的原码推至反码,再到补码进行存储(原码→反码→反码)
以此,我们反向思考一下,给了一个二进制的补码,我们应该怎么算出它的原码呢
以下随机用一个二进制数补码来推出原码
这是一个随机二进制数的补码
由此补码减1,我们可得到这个随机补码的反码
再进行除符号位外,取反,我们可得到这个随机补码的原码
最后我们得到这个随机二进制补码的原码:
| 1符号位 | 1 | 0 | 0 | 1 | 0 | 0 | 1 |
|---|
这个二进制数的结果为-73
2.二进制转换十进制 举例说明,随机写一个二进制数
转换计算过程为
最终得出结果为14
3.十进制转换二进制 举例说明,随机写一个十进制数 17
将十进制数除二,最后除尽(结果为1)为止,如上图,最后结果取逆,得出结果:17的二进制数为10001
在本图中由二进制转换为八进制,可以理解为八是二的三次幂,在所以在本图中可以把三位数当做一个二进制数来处理,推算出从低到高(从右至左),得出三个数字1,5,3
,所以该二进制数转换为八进制数为 0 3 5 1
同理,由二进制转换为十六进制,十六是二的四次幂,在本图中,可把四位数当做一个二进制数处理,最后得到结果分别是 9,E(二进制1 1 1 1是十进制的15,也就是16进制的F)
以上,我们讲解了二进制到十进制,八进制,十六进制之间的转换,所以,想要四种进制之间的互相转换只需要中间的纽带(二进制)就可以
八进制→二进制:举例八进制数 0357
所以可得该八进制转换为二进制为 011101111
十六进制→ 二进制:举例十六进制数 0x3AF
所以可得该十六进制数转换为二进制为 001110101111
到这里,我们学完了二进制到所有进制之间的转换,也学完了所有进制到二进制之间的转换,通过二进制为纽带,我们可以做到所有进制之间的相互转换。
六.关键字与保留字 1.关键字定义:被Java语言赋予了特殊含义,用作专门用途的字符串(单词)
特点:关键字中所有的字母都为小写
定义:现有java版本尚未使用,但以后版本可能会作为关键字使用,自己命名标识符时要避免使用这些保留字
具体保留字: goto、const
定义:Java对各种变量、方法和类等要素命名时使用的字符序列成为标识符
技巧:凡是自己可以起名的地方都叫标识符
涉及到的结构:类名、接口名、变量名、方法名、常量名
定义合法标识符规则:必须要遵守,否则编译不通过
(1)由26个英文字母大小写,0-9,_或$组成
(2)数字不可以开头
(3)不可以使用关键字和保留字,但可以包括关键字和保留字
(4)Java中严格区分大小写,长度无限制
(5)标识符不能包含空格
Java中的名称命名规范:
(1)包名:多单词组成时所有字母都小写:xxxyyyzzz
(2)类名、接口名:多单词组成是,所有单词的首字母大写:XxxYyyZzz
(3)变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
(4)常量名:所有字母都大写,多单词时每个单词用下划线链接:XXX_YYY_ZZZ
注意:在起名字时,为了提高阅读性,要尽量有意义,见名知意
Java采用unicode字符集,因此标识符也可以使用汉字声明,但是不建议使用



