-
编译java:javac 路径\文件名.java path可以是绝对路径也可以是相对路径
-
window的dos窗口快速切换,先找到该文件的路径,在该路径的搜索栏输入cmd,即可快速切换路径的dos窗口
-
运行java: java 类名 1)先切换到该类名文件下的路径,在运行java
-
classpath-d:\course 配置了这个之后,类加载器只会去d:\course目录下找"xxx.class"文件,不会在从当前目录下找。
-
java 路径\文件名 最新版本的jdk可以这样运行,是在内存里生成类文件
-
public class test{}public表示公开的,class表示定义一个类,test是一个类名。
类名后面必须是是一个大括号,这大括号是一个类体,类体里放方法。
public static void main(string[] arges){} 主函数 -
system.out.println(); 向控制台输出一句话
-
标识符:可以标识类名,方法名,变量名,接口名,常量名… (程序员自己有权命名的单词)
(1)标识符不能以数字开头,标识符严格区分大小写
(2)标识符命名规范:
1. 类名、接口名首字母大写,后面每个单词首字母大写;
2. 变量名、方法名首字母小写,后面每个单词首字母大写;
3. 所有常量名全部大写,并且单词和单词之间用下划线衔接 -
变量
(1)就近原则:哪个离我近,我就访问那个。成员变量和局部变量定义同一个,在方法里访问的是局部变量 -
转义字符 \t tab键 \n 空格 '表示普通的’ \表示一个普通的\ "表示一个普通的“ \u 表示一个uniccode的编码
-
.(1)java中有一条重要的默认规则:所有的数字会默认当成int类型来处理,除非数字后面加上l或L,小容量写
到大容量时不加l会报错,所有的浮点型数据默认被当做double类型,除非后面加上f或F
(2)大容量转小容量,要加强制类型转换符,而且可能会丢失精度,long转int是砍掉前面4个字节
(3)byte,char,short做混合运算的时候,首先先各自转换int在做运算 -
逻辑运算符要求两边到时布尔类型,并且最终结果也是布尔类型
-
短路与&&:左边表达式已经是false,右边表达式不执行,比使用&效率高
-
使用扩展赋值运算符,永远不改变运算结果类型
-
+运算符在java中有2个作用
(1)求和:当运算符两边都是数字类型时
(2)字符串拼接:当+号两边的任意一边是字符串,就进行字符串拼接
(3)当一个表达式当中有多个加号时,遵循"自左向右"的顺序执行 -
怎么接收用户键盘输入
(1)直接在程序里写
java.util.Scanner s = new java.util.Scanner(System.in);
// 接收整数 int i = s.nextInt();
// 接收字符串 String str = s.next();
(2)在第一行调用
import java.util.Scanner;
Scanner s = new Scanner(System.in);
int h = s.nextInt(); -
switch(表达式)
{
case 值1: 语句体1; break;
case 值2:语句体2;break;
… //根据需求, 可以写多组case.
default: 语句体n; break;
}//并行执行
case穿透现象:在switch语句中,如果case的后面不写break,将出现case穿透现象,也就是不会在判断下一个case的值,
直接向后运行,直到遇到break,或者整体switch结束。 -
break 语句会让离他最近的循环终止结束,不会终止方法
-
continue语句可以指定循环
-
JVM的主要的内存划分
(1)栈: 存储局部变量以及所有代码执行的内存空间. 特点: 先进后出.(像杯子,数据就像杯子里的水)
在方法被调用时,该方法需要的内存空间在栈中分配
1. 栈帧:栈帧永远指向栈顶部的元素 .
2.处于栈顶部的元素具备活跃权
(2)堆: 存储所有new出来的内容(即: 对象)[存储对象以及对象的实例变量]. 特点: 堆中的内容会在不确定的时间, 被GC回收.
(3)方法区: (代码片段|静态区)存储字节码文件的. 字节码文件: 指的是后缀名为.class的文件.
1. 这个空间是最先有数据的,类加载器首先将代码加载到这来
2. 储存代码片段 -
方法:代码得到复用,方法是需要调用才会执行.方法定义在类体中(方法是为了完成某个特定的功能)
(1)定义: [修饰符列表] 返回值类型 方法名 (形式参数列表) { 方法体 }
1. 修饰符列表不是必选项,目前为止,统一写成 public static
2. 返回值类型可以是任何类型,只要是Java中合法的数据就行,包括基本数据类型合引用数据类型(返回值一般是指一个方法执行结束
后的结果.结果通常是一个数据)
3. void 是不返回任何值,如果返回值不是void ,在方法体执行结束后必须使用return 值;这样的语句来完成值的返回,如果把写
return 值;这样的语句编译器就会报错,但是可以写return; 这语句的意思是立即终止当前方法
4. 执行到return 关键字的语句执行,当前方法必然结束
5. 形参列表中的每一个参数都是局部变量,个数可以为0~n个,形参有多个用逗号隔开,形参的数据类型起决斗作用,对应的变量名随意
(2)怎么调用? 类名.方法名(实际参数列表)
1. 实参和形参的个数和类型必须一一对应
2. 在同一个类里面,类名.可以省略.但是要跨类调用的话,不能省略类名.
(3)怎么接受返回值?
1. 使用变量来接受,变量的定义需要指定变量的数据类型
2. 方法调用可以写在 "system.out.println()"的小括号里来精简代码或者方法写在判断语句的小括号里.(这行代码是先执行括号里的)
(4)方法重载
1. 在同一个类当中 ;方法名相同 ;参数列表不同(个数不同;类型不同;顺序不同) .
同时满足以上3高条件,那么我们就认定方法和方法之间发送了重载
2. 功能相似的,可以让方法名相同,更易于以后的代码编写.
3. Java编译器首先会通过方法名区分,但是Java允许方法名相同的情况出现,如果在方法名相同的情况下,编译器回通过方法的参数类型进行行区分
(5)方法递归 方法自己调用自己
1. 递归出现错误,看结束条件有没有问题,没有问题的话用 java-x 可以来看栈内存大小在进行调整大小
**22 . 面向过程和面向对象有什么区别?
(1)从语言方面出发:
对于C语言来说,是完全面向过程的。
对于C++语言来说,是一半面向过程,一半是面向对象。(C++是半面向对象的)
对于Java语言来说,是完全面向对象的。
(2)什么是面向过程的开发方式?
面向过程的开发方式主要的特点是:
注重步骤,注重的是实现这个功能的步骤。
第一步干什么
第二步干什么
另外面向过程也注重实现功能的因果关系。
因为A所有B
因为B所以C
因为C所以D
面向过程中没有对象的概念。只是实现这个功能的步骤以及因果关系。
(3)面向过程有什么优缺点?缺:耦合度高,扩展力差。优:快速开发
1)采用面向过程的方式开发一台计算机会是怎样?
这台计算机将没有任何一个部件,所有的都是融合在一起的。你的这台计算机是一个实心儿的,没有部件的。一体机。
假设这台一体机的任何一个“部位”出问题,整个计算机就不能用了,必须扔掉了。(没有对象的概念。)
2)采用面向对象的方式开发一台计算机会是怎样?
内存条是一个对象;主板是一个对象;CPU是一个对象;硬盘是一个对象;然后这些对象组装在一起,形成一台计算机。
假设其中CPU坏了,我们可以将CPU拆下来,换一个新的。
面向过程主要关注的是:实现步骤以及整个过程。
*(4)面向对象有什么优缺点? 耦合度低,扩展力强。
面向对象主要关注的是:对象A,对象B,对象C,然后对象ABC组合,或者CBA组合…
1. 对于小型项目(功能),采用面向过程的方式进行开发,效率较高。
不需要前期进行对象的提取,模型的建立,采用面向过程方式可以直接开始干活。一上来直接写代码,编写因果关系。从而实现功能。
2. 面向对象的方式: OOA:面向对象分析 OOD:面向对象设计 OOP:面向对象编程 整个软件开发的过程,都是采用OO进行贯穿的。
实现一个软件的过程:分析(A) --> 设计(D) --> 编程§
3. 面向对象包括三大特征:封装 继承 多态
***22. 类和对象的概念 面向对象当中最主要“一词”是:对象。
(1)什么是类?
类实际上在现实世界当中是不存在的,是一个抽象的概念。是一个模板。是我们人类大脑进行“思考、总结、抽象”的一个结果。
类本质上是现实世界当中某些事物具有共同特征,将这些共同特征提取出来形成的概念就是一个“类”,“类”就是一个模板。
(2)什么是对象? 对象是实际存在的个体。(真实存在的个体)
(3)在java语言中,要想得到“对象”,必须先定义“类”,“对象”是通过“类”这个模板创造出来的。
类就是一个模板:类中描述的是所有对象的“共同特征信息”对象就是通过类创建出的个体。
类 --【实例化】–> 对象(实例) 对象 --【抽象】–> 类
类 = 属性 + 方法 属性来源于:状态(多见于名词)[以"变量"的形式存在]对应的是数据 方法来源于:动作(多见于动词)
***23. 对象
(1)new 是一个运算符,专门负责对象的创建
(2)java中所有的"类"都属于引用数据类型
(3)成员变量没有赋值,系统会自动赋值,数值的都是0,布尔的是false,char是\u000,string是null
(4)保存了对象内存地址的变量,叫引用; 对象是通过new出来的,在堆内存中存储;
引用是但凡是变量,并且该变量中保存了内存地址指向了堆内存当中的对象(变量保存的是一个对象的内存地址,该变量就叫引用)
(5)怎么访问实例变量? 语法: 引用.实例变量名
引用是引用传递,基本数据类型是值传递.实际上都是值传递,只不过引用的值是内存地址,两个内存地址一样的指向同一块内存
**24. 构造方法 语法格式 :[修饰符列表] 构造方法名(形式参数列表){ 构造方法体; }
(1) 构造方法名和类名一致。
***(2) 构造方法用来创建对象,以及完成属性初始化操作。
*(3)构造方法返回值类型不需要写,写上就报错,包括 void 也不能写。(写上void就是普通方法)
修饰符列表写public 千万把要写public static
(4) 构造方法的返回值类型实际上是当前类的类型。
(5) 一个类中可以定义多个构造方法,这些构造方法构成方法重载。
(6) 当一个类没用提供任何构造方法,系统会默认提供一个无参数的构造方法(缺省构造器);当一个类中有一个有参构造方法,系统就不会提供无参数构造方法.
(7) 使用new运算符来调用构造方法
(8) 构造方法不能被 static、final、synchronized、abstract 和 native(类似于 abstract)修饰。构造方法用于初始化一个新对象,所以
用 static 修饰没有意义。构造方法不能被子类继承,所以用 final 和 abstract 修饰没有意义。多个线程不会同时创建内存地址相同的同一个对象,所以用 synchronized 修饰没有必要
25.方法注意事项:
(1). 方法与方法之间是平级关系, 不能嵌套定义.
(2). 方法必须先创建才可以使用, 该过程称为: 方法定义.
(3). 方法自身不会直接运行, 而是需要我们手动调用方法后, 它才会执行, 该过程称为方法调用.
(4). 方法的功能越单一越好.
(5). 定义方法的时候写在参数列表中的参数都是形参. 形参: 形容调用方法的时候, 需要传入什么类型的参数.
(6). 调用方法的时候, 传入的具体的值(变量或者常量都可以), 叫实参. 实参: 调用方法时, 实际参与运算的数据.
26.类
(1) 成员变量(属性):
- 和以前定义变量是一样的, 只不过位置发生了改变, 写到类中, 方法外
- 而且成员变量还可以不用赋值, 因为它有默认值.
成员方法(行为): 和以前定义方法是一样的, 只不过把static关键字去掉.(static 表示是静态的)
(2)格式
1.创建该类的对象. 语法:类名 对象名 = new 类名();
2.通过对象名.的形式, 调用类中的指定成员即
(3)成员变量和局部变量的区别 - 定义位置不同
–成员变量: 定义在类中, 方法外
–局部变量: 定义在方法中, 或者方法声明上 - 在内存中的存储位置不同
–成员变量: 存储在堆内存
–局部变量: 存储在栈内存 - 生命周期不同
–成员变量: 随着对象的创建而存在, 随着对象的消失而消失
–局部变量: 随着方法的调用而存在, 随着方法的调用完毕而消失 - 初始化值不同
–成员变量: 有默认值
–局部变量: 没有默认值, 必须先定义, 再赋值, 然后才能使用