Java程序设计-基础知识
目录
1、JAVA概述
1.1程序设计语言
1.2Java的特点
1.3JDK的设置
1.4编译和运行java程序
2、Java基础
2.1标识符和关键字
2.1.1标识符
由字母、数字、下划线、和美元符组成,且第一个字符不能是数字!
2.1.2关键字:
int 整型 |
long 长整型 |
float 浮点型 |
double 双精度 |
char 字符 |
byte 字节 |
boolean 布尔型 |
final 常量 |
if 如果 |
else 其它 |
switch 开关 |
case 事例 |
break 跳出循环 |
default 违约 |
for 循环 |
continue 跳出当前循环 |
do |
while 在..之间 |
null 空 |
this 当前对象 |
implements 实现接口 |
package 包 |
extends 继承 |
class 类 |
void 空的 |
static 静态的 |
return 返回 |
import 导包 |
true 真 |
false 假 |
private 私有的 |
protected 保护的 |
public 公共的 |
abstract 抽象的 |
new 新的 |
super 父类 |
throws 抛出异常 |
throw 抛出异常 |
Instanceof 类型检查 |
transient |
catch |
finally |
native |
synchronized |
volatile |
Instanceof //对于父对象的类型检查,父类是否是子类的类型
//用于检查当前Object对象的类型 是不是为Integer
If(obj Instanceof Integer){} |
2.2数据类型与常量、变量
2.2.1字符类型(char)
2.2.2布尔型(Boolean)
2.2.3常量(final)
2.2.4变量
2.3运算符和表达式
2.3.1运算符
- 单目运算符:自增(++)、自减(--)、绝对值(-)
- 双目运算符:加(+)、减(-)、乘(*)、除(/)、取余(%)
- 三目运算符:表达式1 ?表达式2 :表达式3
- 关系运算符:大于( >)、小于(<)、等于(==)、
2.3.2数据类型转换
3、基本控制结构
3.1顺序结构
3.2选择结构
3.2.1 If 语句
3.2.2 switch语句
3.3循环结构
3.3.1While语句
3.3.2Do…while
3.3.3for语句
3.3.4多重循环
3.4跳转语句
4、方法
4.1书写方法的格式:
public int/void addNumber(参数) throw Excepion {}
public int addNumber(int a,int b){
4.2方法声明
4.3方法调用
注:参数传递时 形参 是不能改变实际的,只有参数传递时,所传的是数据地址时,实参才会改变!
4.4递归
import java.util.Scanner;//导包 public class 递归算法 { /** * 采用递归算法求n! * fac()=1 n=1 * n*fac(n-1) n>1 */ public static void main(String[] args) { 递归算法 cjc = new 递归算法();//实例化类对像 Scanner sc = new Scanner(System.in); int k = sc.nextInt();//输入 long f = cjc.fac(k);//调用方法 System.out.println(f); } public long fac(int n) {//定义一个方法 if (n == 1) { return 1; } else { return n * fac(n - 1);// 递归调用 } } } |
5、数组
5.1一维数组
传引用(地址传递):数组在进行方法的参数传递的时候,传的是数组的首地址,那就意味着在调用的时候,方法里面处理的那个数组就是调用时传入的数组;
所以能够对传入的数组产生影响(比如:数组,或者类的对象,string)
传值(值传递):传入的值的拷贝,那么传入的变量,和方法体的变量不是一回事;
所以方法体不能对传入的变量产生作用(比如:值类型int double char float)该类型的变量,
5.1.1声明
5.1.2初始化数组
5.1.3数组长度
5.2多维数组
5.3数组长度
数组排序:Arrays.sort(a);//对数组a进行排序
6、字符串
6.1字符串变量的声明和初始化
6.2字符串操作
6.2.1访问字符串
char ch=str.charAt(int 3); //提取第三个字符
- int indexOf(int ch) //返回”个“在字符串中的下标
- int indexOf(String str,int index) //返回”字符串“在字符串中从7开始出现的位置
- substring(int index1,int index2) //提取出从3到8之间这一个子字符串
public static void main(String[] args) { String str = new String("这是一个字符串操作的测试程序"); int n = str.length();//提取字符串长度 char ch = str.charAt(5);//提取字符串中下标为5的字符 int n2 = str.indexOf('个');//返回”个“在字符串中的下标 int n3 = str.indexOf("字符串",7);//返回”字符串“在字符串中从7开始出现的位置 String str2 = str.substring(3, 8);//提取出从3到8之间这一个子字符串 System.out.println(n);//14 System.out.println(ch);// 符 System.out.println(n2);// 3 System.out.println(n3);// -1 System.out.println(str2);// 个字符串操作 } |
6.2.2字符串比较
equals(object obj) //区分大小写字符串比较
equalsIgnoreCase(String str) //不区分大小写的字符串比较
compareTo(String str) //比较二个字符串的大小
6.2.3数据类型转换
7、类和对象
什么是对象:EVERYTHING IS OBJECT(万物皆对象)
7.1架构师的思维方式:
- 你设计类是由你模拟的事务决定;
- 类的属性,仅限于你需要用到的;
- 设计类的行为的时候,用第一人称的视角来思考,假如你就是那个类,那么你的行为是什么;
- 对于行为方法中不能写死的东西,可以考虑用方法的参数来传入;
- 对于方法参数和方法的返回值,不在局限于 int double 之类的基本类数据类型,而是扩展到所有你自己定义的复杂的数据类型;
- 在进行方法的设计的时候,先考虑参数,后考虑反回值;
- 在实现方法的时候,想清楚你和被你施加动作的东西,想清楚动作施加了之后你发生了什么变化,被你施加动作的东西发生了什么变化。
注意:在对象变量中存放的是引用(地址);在简单变量中存放的是数值。
面向对象思想来源:我们因需要描述更加复杂的现实世界,比如星际争霸的场面,需要有更多的数据类型,但是正常情况下,我们没有,我们只有int、double等等,一些简单的数据类型,所以,我们需要创建更多更复杂的数据类型。
面向对象技术,让我们能够追寻更加复杂的数据类型,来模拟我们的现实世界
面向对象和面向过程的区别:面向对象的思维方式,不再是一开始就去想一步步的步骤,而是先创建模拟世界中间需要的复杂的数据类型
星际争霸:
先创建复杂数据类型,比如机枪兵类型,飞龙类型
创建了之后才去实现具体的过程
面向对象的好处:1、能够帮助我们更加形象的写出人性化的程序
2、能够实现内容的封装,比如:兵1.攻击(飞龙1)
3、能够让代码变得更加简洁,继承等面向对象的技术
4、能够让你站在巨人的肩膀上
7.2注意区分:对象(本身)、对象的实现者、对象的调用者。
我们通过类来看待对象,类是对象的抽象。其次,采用面向对象方法可以使系统各部分各司其职、各尽所能。
7.3面向对象内存结构
//所有变量都是存在栈中的,只是值类型存值,而引用类型存地址
堆和栈本质上都是内存中的一段区域,他们是不同的区域,分别取名为堆和栈,
功能使用上有不同,在创建对象时,堆存储的是对象,栈存储的是对象的首地址
1、值类型(基本数据类型)数值类型:int double long float
引用类型存储在堆里,但是栈里有一个空间存储该引用类型的首地址
2、引用类型是通过访问栈中存储的对象的首地址,然后找到对应堆中地址的对象,所以引用类型的访问效率低
变量都是存在栈里的,只不是值类型的变量直存储的是值,而引用类型的变量存储的是堆中对象的首地址
定义引用类型的变量时,如果不让它引用对象,而又要初始化,那么我们一般设定为null
null 表示空的意思。null本质上就是0,低表的就是0地址,对于0地址的空间,系统是不允许占用,所以,可以统一用于表示空对旬或者说没有引用任何对象。
7.4类的声明
【修饰符】class 类名【extends 父类名】【implements 接口名列表】{
7.5实例化对象
7.6构造方法:
- 方法名与类名相同的方法称为构造方法;
- 构造方法没有返回值,前面不能有返回值类型,也不能有void;
- 程序中不能直接调用构造方法;
- 构造方法没有返回值。格式为:public 方法名。
- 构造方法是在对象生成的过程中自动调用,不可能利用指令去调用。
- 如果我们未给系统提供一个构造方法,那么系统会自动提供一个为空的构造方法。
一个类可以构造多个构造方法,但多个构造方法的参数表一定不同,参数顺序不同即属于不同的构造方法:
public student(string name,int a){
public student(int a,string name){
8、类的封装
8.1访问权限
Java中共有四种访问权限:public(公有的)、protected(受保护的)、缺省的和private(私有的)
权限修饰符 |
本类 |
本类所在的包 |
其他包中的子类 |
其他包中的非子类 |
Public |
√ |
√ |
√ |
√ |
Protected |
√ |
√ |
√ |
— |
缺省 |
√ |
√ |
— |
— |
Private |
√ |
— |
— |
— |
8.2类成员
public class 类成员变量 { String name; //实例成员变量 String sex; //实例成员变量 static int count=0;//类成员变量 public static void main(String []args){ System.out.println(类成员变量.count);//直接调用类成员变量 } } |
8.3实例成员变量的使用:
1、我们一般情况下,定义的属性,通常都属于该类型的个体,是具体对象所拥有的属性,比如名字,年龄,这些都是具体对象的属性。具体对象的属性可以通过(通过对象,属性实现调用)
2、但是还存在另外一钏属性,它不再单单隶属于某些个体,而属于类的。比如:人类的数量这种属性。(通过类,属性调用)
3、当你new对象的时候,第一次new的时候,系统首先会加载类,把它作为产生对象的模板,在这个模板中,包含类的(静态的),也包含对象的,类一经加载过后,无需再次加载。
4、new对象的时候,对象通过类的模板,实施对应拷贝,但是只会包含对象的成类,而不会包含类的成员。
5、属于类的成员,只会有一个。比如人类的数量这样一个成员,就只有一个,但是属于人对象的年龄,则是每个具体的对象一个。
6、对象(非静态)的方法中,可以访问类(静态)的属性和方法。
8、静态的方法中, 不可以直接访问该类的非静态属性,除非new对象,用对象来调用
静态块的作用:静态块一般用于实现静态属性的初始化;可以放置更多,更复杂的初始化代码,而不是仅仅只是个初值。
非静态块是在new 对象时候自动调用 的,只是先于构造方法执行(在构造方法之前执行)
什么时单例模式:限制只能创建一个对象的设计模式(面向对象的应用)
8.4什么情况下直接调用属性,什么情况下调用封装属性的get 和set 方法
在本类中,如果需要访问自己的属性,一般情况下直接调用属性来访问; 但在写构造方法的时候,最好要用自己封装的set属性方法来完成参数的初始化。
类中间调用其他的类的属性的时候,那么如果对方的属性是非公共的,那么只能通过对方提供的公共的get或set方法来实现访问。
8.5数学函数类方法
max(double x,double y) //返回X和Y中的较大值
random(double x) //返回[0,1]区间内的随机数
pow(double x,double y) //返回y的x次方法
9、类的继承
9.1继承的实现
9.1.1定义子类
9.1.2继承原则
9.1.3Super引用
9.1.4This引用
9.2类的多态性
9.2.1方法重载
9.2.2方法覆盖
10、Final类和final成员
11、抽象类和方法
【权限修饰符】 abstract 返回值类型 方法名(参数表);
12、接口
12.1声明接口
【public】 interface 接口名 【extends 父接口名】{
【public】【static】【final】成员变量名=常量;
【public】【abstract】返回值类型 成员方法名(参数表)
12.2实现接口
【修饰符】 class 类名【extends】 implements 接口名1,接口名{
13、包
13.1声名包
13.2使用包中的类
Mypackage.cpoint point=new mypackage.cpoint(参数表);
13.3导入包中的类
14、输入输出
15、设计模式
设计模式:需要区分设计者和调用者,要站在设计者的角度和调用者的角度去思考设计模式。
15.1单例模式
15.1.1什么时单例模式:限制只能创建一个对象的设计模式(面向对象的应用)
public class Dog { static Dog i = null;// String name; private Dog(String name) {//私有构造方法 this.name = name; } public static Dog setDog(String name) { if (i == null) {//限制只能创建一个对象的设计模式 Dog go = new Dog(name); i = go; return go; } else { return null; } } } |
15.2工厂模式
15.2.1工厂模式:
创建一个工厂类(Factory),在工厂类中实现一个创建对象的方法(createInstance)
通过传入的类型,返回对应的对象,通过这种方式,类的开发者实现了对象创建的封装,这个方法的返回值一般是所创建对象类型的父类类型,
类的调用者:类的调用者通过这个工厂对象来得到他所需要的对象,而不需要关心中间的细节。
15.2.2工厂模式实例:
public class Factory { // 创建对象的方法:传入要创建对象的类型 // 返回创建的对象 // 如 JiQiangBin jqb= createInstance(“机枪兵”); // KuangGong kg=createInstance("矿工"); public static Bin createInstance(String type) { // 判断传入的类型,创建并返回对应的对象 if (type.equals("机枪兵")) { Bin bin = new JiQiangBin(); return bin; } else if (type.equals("矿工")) { Bin kg = new KuangGong(); return kg; } else { return null; } } } |
16 java集合框架
集合:提供对数据可扩展(变长的)存储(存放元素的个数不确定)
16.1、Collection接口:线性结构的存储(类似数组的存储)
a、集Set接口:
b、列表List接口:
16.2、Map接口:存储数据是基于Key / value对
16.3、中文排序问题
17 Java 泛型
泛型(jdk1.5):限制集合元素中存储的元素必须相同; 还可以将类作为一个
Java程序设计-基础知识相关推荐
- Java程序设计 基础知识
1-1 字节码文件是与平台无关的二进制码,执行时由解释器解释成本地机器码. T 1-2 一个Java源文件中可以有多个类,但只能有一个类是public的. T 1-3 如果Java源文件中包含了多个类 ...
- Java面试基础知识III
Java面试基础知识: 1.C++或Java中的异常处理机制的简单原理和应用. 当JAVA 程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常.违反语义规则包括2种情况.一种 ...
- java薄弱基础知识记录
java薄弱基础知识记录(一) 总结了我认为需做笔记的地方 基础知识 面向抽象编程 异常处理 反射 注解Annotation 泛型 集合 I/O 时间与日期 单元测试 正则表达式 安全和加密 多线程( ...
- java核心技术 基础知识<集合并发part1>
文章目录 java核心技术 基础知识<集合&并发part1> 9 泛型程序设计 9.5 算法 9.6 遗留的集合 14 并发 14.2 中断线程 14.3 线程状态 14.4 线程 ...
- java培训基础知识都学哪些
很多人都开始学习java技术,觉得java语言在未来的发展前景空间非常大,事实却是如此,那么针对于零基础的同学, 学习java技术需要学哪些呢?下面我们就来看看java培训基础知识都学哪些? java ...
- 你觉得什么才是 Java 的基础知识?
近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java的基础知识?又怎么样才算掌握了java的基础知识呢?这个问题还真值得仔细思考. ...
- 计算机java语言教程,计算机JAVA教程二讲Java语言基础知识.doc
计算机JAVA教程二讲Java语言基础知识 2.1简单数据类型 2.1.1 标识符和保留字 1.标识符 程序员对程序中的各个元素加以命名时使用的命名记号称为标识符(identifier).Java语言 ...
- java ee基础知识_Java EE:基础知识
java ee基础知识 想要了解一些基本原则,即与Java EE相关的技术术语. 对于许多人来说,Java EE / J2EE仍然最多意味着Servlet,JSP或Struts. 没有冒犯或双关语! ...
- hashcode是什么意思_什么才是 Java 的基础知识?
作者:晓风轻 链接:zhuanlan.zhihu.com/p/28615617 近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java ...
最新文章
- 【原创】项目管理杂谈(1):代码评审这点事,元芳你怎么看
- 一种医学图像分割的新思路【nnU-Net网络配置教程】
- 如何解决弹出窗口固定大小及内容的问题
- 1.10 Iterator(迭代器)遍历集合元素
- python文件下载器代码_GitHub - applechi/pythonCollection: python代码集合(文件下载器、pdf合并、极客时间专栏下载、掘金小册下载、新浪微博爬虫等)...
- 封装不同类模板的随机数生成器
- B端产品如何寻找竞品
- java重入锁 自旋锁_java 自旋锁(可重入且无死锁)
- 2019.2.4时GitHub超过15个粉丝就可以领取3000元啦!
- TF2.0-tf.keras.callbacks.ModelCheckpoint
- 【转帖】MATLAB中用FDATool设计滤波器及使用
- OD数据集(一)—介绍
- 小米图标大小设置方法_miui12如何设置图标大小
- 基于FPGA的深度学习CNN加速器设计
- CASS11.0.0.6安装以及教程
- 勒索病毒数据库恢复 勒索病毒解密恢复 中勒索病毒解密恢复数据
- 计算机网络CDMA是什么,CDMA是什么
- 洋桃开发板笔记(五 ) Flash闪存的使用
- Peekaboo——项目系统设计与数据库设计
- oracle field怎么翻译,field是什么意思_field的翻译_音标_读音_用法_例句_爱词霸在线词典...