java基础

1.初识Java
 起源
  C语言的产生标志着现代计算机编程语言的开始
  代码通常是指一个程序或者程序的一部分,对于人类来说是可读的。计算机可读的信息通常被组织为字节,字节码是对计算机可读的程序。
 发展
  Java三个版本:Java SE;Java EE;Java ME
  API:应用程序编程接口
 上机实训
  环境变量的配置:计算机——属性——高级系统设置——高级——环境变量
  Java运行环境三大任务:类加载、字节码校验、解释执行
 总结
  Java起源
  Java平台分类
   Java SE:适用于普通PC及笔记本电脑。为其他Java程序的开发和运行提供技术支持
   Java EE:适用于服务器,重点定位与企业级别的分布式软件系统
   Java ME:定位于嵌入式系统的开发和运行。如手机、家电等
  Java的概念
   特点:面向对象、类是基本构造单元、所有的语句都出现在一个类中。
   面向对象
    编写Java程序就是编写类,一个 . Java 文件中只能有一个public类
    . Java 文件的文件名必须是在文件中声明的public类的名称
    main( )方法的签名为: public static void main(String[] args)
 技术特点
  语言特征:简单,面向对象,可移植性,多线程,动态
  平台是指程序运行的硬件或者软件环境
  Java平台是一个运行在其它基于硬件的平台之上的纯软件平台
  Java平台的两个组件:JVM 和Java API
  Java程序源代码文件格式为“.class”。Java文件名必须与类名相同,区分大小写
  java中函数成为方法
  类是Java程序的基本构造单元,Java程序中所有的语句出现在一个类中
  面向对象编程思想中包含两个基本概念:类和对象,其中对象由属性和行为组成。
  类:抽象出对象的属性和行为,按此标准将对象分类,类是一类事物的统称。类是对象的抽象,生成对象的模板。
  翻译的方法有两种:编译和解释。编译型语言以后不用重新编译,不能实现跨平台。解释性语言在运行的时候才翻译,效率低,可跨平台。
  Java为一半编译半解释型语言
  Java源程序文件被编译后生成Java字节码文件,字节码文件又称Java类文件
  Java虚拟机本质上是一个软件。位于JDK或jre目录下的bin目录下
  JavaAPI中是一些已经完成的软件组件。Java API与JVM一起将我们编写的Java程序与下层硬件隔离
  Java程序执行机制(图待补)
  加载类库顺序:先加载启动类库,再加载扩展类库,最后加载自定义类库
  字节码加载器对加载的字节码进行校验
  JIT,即时编译器:在每段代码执行前先将其进行编译为本地机器码
  main方法是Java.exe进程的入口点
  public 访问修饰符
2.Java基础语法
 关键字
  关键字
   const 和 goto 不能在Java中使用
  保留字
   true、false、null
  自定义标识符
 标识符:Java代码中自己选用的单词
  不能为关键字
  由字母、数字、下划线或$组成
  数字不能开头
  区别大小写,长度无限制
 数据类型、变量和常量
  数据类型(11种)
   基本类型
    整型
     byte(一个字节)=8位
     short(2个字节)
     int(4个字节)(数字默认类型)
     long(8个字节)
    浮点型
     float(4字节)
     double(8字节)
    字符型
     char(2字节)
    布尔型
     boolean(true、false、true/false)
   引用类型
    类
     class
    接口
     子主题 1
    数组
  变量的定义:变量类型 变量名;
  变量的赋值:变量名 = 值; --第一次赋值被成为初始化
  注意:变量如果没有赋值,直接使用是会报错的。
  常量的定义:final数据类型 常量名 = 值; --常量名全大写
  Char可以直接存放字符型数据,也可以存放数字(不是真正的存放了数,而是赋值为在ASCNII表中查找到的对应字符)
 运算符和表达式
  如果在字符串中使用"",则需要转义符\ 将没有字符串意义的"这样书写\"
  转义符的作用:将某个符号转换成其它意思例:",转义后为\" 变成了没有字符串含义的"
  Boolean类型在其他方法无能为力的时候,往往能够解决问题。
  三目运算符:boolean表达式?(a):(b);
  区别--和++的四种情况
  移位运算符>> << >>>
   >>右移将值转换为二进制再整体往右移两位,注意,移出去的不要了(正整数的做法)快捷算法例:10>>3 即为10除以2^3
   负数也相同,区别在于最小的整数值,例:-10>>3表示-10/2^3 理论上得-1.几,保存离它最小的整数:-2
   <<左移将值转换为二进制再整体往左移两位,不够的用0来填充.例:正整数如下:intnum = 3<<4;
   左移和右移在正整数的情况下,左移是乘,右移是除。负数和正整数一样。小数不考虑。
   >>>无符号右移:正整数和>>的运算方式是一致的。无符号右移的负整数不考虑。
   ^异或,将两边的数值转换为二进制,然后对比,如果都相同,则记0,不同记1
  短路符号有:&&,|| 分别表示短路和,短路或。这种符号如果第一个逻辑结果能够决定最终结果,则不会执行第二个逻辑
  字符串的拼接:“+”在字符串中为拼接--但是注意两边只有一个为字符串的时候
   System.out.println(11+2+"呵呵");输出13呵呵
   System.out.println("呵呵"+11+2);输出呵呵112
 上机实训
 Java中的输入
  
  Scanner sc = new Scanner(System.in);//这是输入前的准备
  方法的重载与调用
   String name = sc.next();//接收一个字符串
   doublechengJi = sc.nextDouble();//接收一个double值
   int age = sc.nextInt();//接收一个int值
  char可以直接存放字符型数据,但也可以存放数值(注意:不是真的存了数)而是在ASC表中查处对应的字符后,再赋值。例如: chara = 'a'; charb = 66;得到B。后面的写法不行char c = '12';
 Java注释
  单行注释 //
  多行注释 /* */
  javadoc文档注释 /** */
3.程序流程控制
 流程控制
  公用类:public class{}
  改变程序流程的三种方法
   调用方法
   2种 选择
    if/else语句
    switch语句
    三目运算符可看作是if/else的一个简写版本
   3个 循环
    for循环
    while循环
    do/while循环
   所有的控制结构都包含了某种类型的boolean判断
 布尔逻辑
  在组合boolean表达式时,有四种逻辑
   和:全真为真
   或:有真为真
   非:真为假,假为真
   异或:相同为假,不同为真
   逻辑非运算符!可以放在任何布尔表达式或变量的开头
 
 跳转语句
 循环语句
  while
  do/while
   do...while与while在结构上有区别。特点:不管条件是否满足都会先执行一次后再去判断是否继续执行
   结构上:do{}while(判断条件); 注意:最后while后面的;不可少!!!
  for
 选择语句
  if
   int/int 结果为 int .有时会造成数据丢失,可以将两个int中的一个改为double,强制提升另一个数据的类型。
   if语句后如果只有一条语句,大括号可以省略,但一般不建议省略。
   if语句包含:简单if语句 单分支if语句 多分支if语句。
   语句格式:if(boolean){代码段}
   作用域:该内容能够被使用的地方,即包含它的那对{ }
  if……else
   语句格式:if(boolean){代码段}else{代码段}
   在if语句中,If、else ……if 和else只会执行其一,else省略的是if和else if 之外的情况(互不相交,构成全集)。else不能单独出现。
   当有多个 else if 语句存在时,可能会出现能满足多个 if 的情况,但是程序是按照语句书写顺序执行的,这是语句的书写顺序也很重要。例如:输出学生成绩评级的结果
  switch
   switch语句中检测的变量只能是32位或更小的整数值,即只能是 byte、short、int、char
   一个switch可以有多个case,每个case后后有一个值和冒号
   case后的值数据类型与switch中的相同,必须是常量或字面量
   当变量值等于case 后的值,开始执行该case语句,直到遇到break。如果该case中没有break,虽然后面的case值不满足,也会执行后面程序中的case
   default一般出现在switch语句的最后,结尾不需要break。当default不再最后时,一样需要用break结束。
   switch语句中,每一个情况后如果没有break,都会把该语句后的情况都执行。知道遇到break
   switch语句只测试变量和值的相等性,不用于大小比较,再单个case语句中只能比较一个值
   switch语句擅长指定的值的选择.if语句擅长范围的选择.两者可以互换
   case后面不加break可以很方便求某一天为一年中的第几天时
   switch的工作原理:1.首先将值传入到switch中 2.将case 后面的值与传入的值对比 3.如果对比成功,则执行后面的语句,直到switch结束如果没有对比成功,则没有效果 4.为了让所有的值都有一定的效果,可以加上默认选项:default。case 后面的值必须和传入的值的类型相同 5.如果想执行一个case 语句后结束,需要在其后面加上break关键字6.选项的顺序无所谓,但是注意换了顺序记得加上相应的break;case后面加上常量或者字面量。
  if语句中,if/else只会执行其中的一条语句。switch中如果没有break则都会执行,此为两者一个区别
  continue关键字
  break可以用来结束死循环
6.数组
 数组--存放相同数据类型,长度不变的数据的连续内存的片段
 数组的三种定义方式
  第一种:int[] a = new int[10]; 可以拆成:int[] a;a = new int[5];
  第二种:int[] a = {1,2,3,4};第二种长度(是由赋值的个数来自行计算的)。第二种方式必须在定义时赋值。int[] a;a = {1,2,3,4,5}; 这种拆分方式不行
  第三种方式 int[] a = new int[] {1,2,3,4,5};长度同样是自行计算出来。可以拆开为:int[] a;a = new int[] {1,23,3,4};
  数组和字符串都可以直接得到长度
   数组:数组名.length
   字符串:变量名.length()
 数组为引用数据类型
 数组不能改变长度,但是变量可以重新赋值。例如a = newint[8];//重新给a变量赋值一个新的数组,长度为8
 System.out.println(a);直接输出数组,输出为内存地址
 数组如果发现有没有赋初始值的元素,会自动赋默认值
 数组中的下标就是平时所说的索引。下标只是来标记数组元素的位置,下标从0开始
 下标越界错误提示
 第一行最后的2,是说明代码中2这个数字导致的越界。
 下面一行的数字5,是指明越界所在的行数。
 java.lang.ArrayIndexOutOfBoundsException:数组下标越界
 
 数组中每个元素的类型必须相同
 创建数组的步骤:1、声明一个对数组的引用。2、使用new关键字初始化并指定数组大小。
 Java中数据分基础数据类型和引用数据类型。数组为引用数据类型,所以需要一个引用来访问它,并且需要关键字new来初始化。
 数组定义:int [ ] num;中num是一个引用,可以指向任意大小的int 类型数组。数组不能改变长度,但变量可以重新赋值。例如:Int[] nums=new int[2];nums=new int[4];最终num指向的数组长度为4,长度为2的数组被垃圾回收。
 下标的要求:满足在数组的范围中,可以是变量、常量、表达式
 System.out.println(arr[A]);System.out.println(arr[2^3]);
 二维数组
  二维数组的赋值和输出通常使用双重循环。二维数组的每一行长度不一定相等。
  int[ ][ ] a; a.length 二维数组的行数,a[i].length 二维数组第i+1行的长度.a[i]=b[j];重新引用二维数组的第i+1个数组为数组b[j].
   定义: int[][] a = new int[a][b];
  a[i].length表示每一行的长度
  a[0] = new int[6];// 将a中第一行重新赋值为新数组
   System.out.println(a.length);
   System.out.println(a[0].length);
方法
 方法重载:类型不同或 参数个数不同
 public访问修饰符
 static静态修饰符
 void返回类型(void--是无返回类型)
 main 方法名--标识符
 (String[] args) 参数列表 String[]类型args参数
 Public static void main(String[] args):方法的声明部分--方法签名。从{ 开始到 }结束,被称为方法体。方法由两部分组成:声明部分+方法体部分
 创建方法示例:public static double add ( int a , double b ) { }
 Void为无返回类型,不能用东西来接受
 没有返回类型的方法不能被拿来赋值
 有返回类型的方法可以不赋值
 java基础中所有自定义方法均写为public static形式
 调用方法:类名.方法名(实参列表)
  如何有参数要求,则传入参数
  有类名才可以实现跨类调用
  当不写类名时,会在当前类中调用
  在同一个工程中的方法才可以相互调用
  如果调用的是本类中的方法,则可以省略类名
 定义方法时,参数列表被称为形式参数列表--简称形参
 实参和形参关系: 数据类型和顺序一致,变量名随意,可以相同,可以不同。形参规定了调用时应该传递的值的数据类型以及顺序,实参是真的值。
 写参数:确定方法有哪些要素
  1.方法名:add
  2.要不要返回?返回什么?
  3.由2中得出返回内容的数据类型
  4.方法中需要不需要从外部得到数据源?
  参数只需要写定义,不需要赋值,参数应该是变量或常量的一种
  每个参数之间用,隔开
  当刚刚写完方法时发现有代码报错,原因是当方法有返回值时,需要使用关键字return表示返回
 方法重载:在同一类中具有相同名称的方法,但是其参数列表不同
  参数列表不同主要是:1.参数个数不同2.参数类型不同3.当参数类型不同时,其位置不同也算
  返回类型的不同不是方法重载的依据
模块化开发与非模块化开发
 模块化开发:将大块内容分解为无数个小的板块,每个板块完成自己的内容,再将所有小板块根据逻辑和需求进行组合,形成大板块--方法
 模块化开发优点:代码的重用性提高,使代码的结构更加清晰
 非模块化开发:与模块化相反
细节问题
 算法:有穷的解决某个问题的方法和步骤
 程序:完成指定任务的一条指令。通常程序是由多个模块组成的,每个模块对应一个文件夹。这些文件会被编译成可连接目标文件,然后连接器将所有的模块组合成一个可执行程序。
 软件:程序+数据一系列按照特定顺序组织的,计算机数据和指令的集合。
 计算机语言:机器语言——汇编语言——高级语言(编程语言)
 计算机由CPU(执行机器语言) 和 内存组成
 结构化语言:Fortran、basic、C
 面向对象语言:C++、C#、Java
 程序设计思路:分析问题——确定数据结构和算法——编程——调试
 Javac:用来编译“.Java”文件,生成“.class(字节码、中间代码)”文件。
 Java:用来运行“.class”文件
 错误:
 语法错误、逻辑错误通称开发错误
 运行时错误:内存溢出、存储空间不够
 流程图图形:椭圆、矩形、平行四边形、箭头、菱形、圆
 多线程应用程序能够同时运行多项任务
 文件名和类名相同
 类名各单词首字母大写
 Java编程中严格区分大小写
 Print()不换行,括号内必须有值
 Println()换行,括号内可以没有值
 关键字:有特殊含义已经被Java使用
 标识符:自定义的
 Java类名不区分大小写
 Ctrl+shift+O自动填充Scanner 需要的首行
 引用数据类型String比较值,不用==,而是用.equals()。 a.equals(b)
 Ctrl+?快速单行注释
 整理代码格式:源码界面右键——source——format element
 随机数:Math.random();用于产生[0,1)之间的随机数。生成a-z的取值,公式:(int)(Math.random()*(z-a+1))+a;正负数相同
 强制关闭JRM,直接结束程序:System.exit(0);
 布尔类型的变量 --赋值只能是true/false或者表示真假的结果
 数据类型不匹配
  自转为自行执行的效果,没有精度丢失。强行转换,在值前面用()加上要转换的数据类型,强转为非自行执行,执行后会造成精度丢失。也可能造成数据丢失。
  boolean类型不参与数据类型转换
 定义常量:final int A = 1;名称大写

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值