JAVA基础知识点

本文深入探讨Java编程语言的关键概念和技术细节,涵盖数据类型、内存管理、类与对象、继承与多态、异常处理等多个方面,帮助读者全面掌握Java开发的基础与进阶知识。

1、使用浮点型数值时,默认的类型是double,后面加上f或F才被识别为float类型。

2、使用数组前一定要先开辟内存空间,当然也可以直接用静态赋值的方式。

3、Java中的变量为全局变量时,可以不赋值,直接使用,因为有默认值,但是作为局部变量时,就必须在赋值后才能使用另外。另外,凡是用new关键字新建出来的对象或数组等,对象或数组里面的基本类型都被初始化了默认值,用static关键字声明的变量也被初始化为了默认值。关于默认值,boolean类型数据的默认值是false,String以及类对象的默认值为null,其他的为0,0.0f,0.0等。

4、任何数据类型碰到String类型的变量或常量之后都会向String类型转换。

5、引用数据类型:类似于C/C++中的指针,这种变量在声明时不会分配内存,必须另外进行开辟内存空间的操作,如类和数组均属于这种数据类型。

6、由于数组是引用数据类型,因此在数组操作中,栈内存中保存的永远是数组的访问地址(即引用,相当于C/C++中的指针),只开辟栈内存空间的数组是无法使用的,必须有指向的堆内存才可以使用,要想开辟堆内存则必须使用关键字new,然后只是将此堆内存的使用权交给了对应的栈内存空间,而且一个堆内存空间可以同时被多个栈内存空间所指向。

7、由main方法直接调用的方法,要用static关键字声明。

8、当使用new关键字实例化对象时,才会调用构造方法。

9、匿名对象就是没有明确给出名称的对象,一般匿名对象只使用一次,而且匿名对象只在堆内存或常量池中开辟空间,而不存在栈内存的引用。

10、比较对象时,使用“==”,是对对象的引用进行比较,而用equals方法,则是对对象的内容进行比较。equals方法时Object类中的方法,它默认的行为时比较引用,类库中的类都将其覆写为了比较内容的方法,对于自定义类,我们需要实现自己将其覆写为比较内容的方法。

11、String类的两种实例化方式的区别:

首先,一个字符串就是一个String类的匿名对象,匿名对象就是已经开辟了内存空间的并可以直接使用的对象。

第一种:String str1 = “ hello”

实际上这种实例化方式就是把一个在常量池中开辟好的内存空间的使用权交给了str1对象,而使用这种方式还有另外一个好处,就是如果一个字符串已经被一个名称所引用,则以后再有相同的字符串声明时,就不会在重新开辟新的空间,而继续使用已经开辟好的空间,比如:String str1 = “hello”与String str2 = “hello”中的str1和str2都指向同一块堆内存。这在Java中成为“共享设计”。

第二种:String str1 = new String(“hello”)

由于一个字符串是一个String类的匿名对象,因此它已经开辟了一个堆内存空间,而如果使用new关键字,不管如何都会再开辟一个新的堆内存空间,但此时,此空间的内容还是“hello”,所以这种实例化方式实际上是开辟了两个内存空间,但真正使用的知识一个使用new关键字开辟的空间,另外一个是垃圾空间。

12、在使用String类进行操作时,特别重要的一点:字符串的内容一旦声明则不可改变。在程序中,改变String类对象的内容时,实际上是改变了String类对象的引用,将其指向了其它字符串所在的地址,这样是很耗费内存资源的,因此,如果在开发中遇到改变很多次String类对象内容的时候,一定要用StringBuffer类代替完成。

13、关于引用传递(针对引用数据类型)和值传递(针对基本数据类型):

一、所谓引用传递就是指将堆内存空间的使用权交给多个栈内存空间,引用传递的参数类型只能是类或者数组等引用数据类型。而值传递,其形参是基本数据类型,方法调用时,实际参数把它的值传给对应的形式参数,形参只是用实参来初始化自己的存储单元,它与实参是两个不同的存储单元,所以方法执行后,形参值的改变不会影响实参值。

二、一般对象类,在进行引用传递操作,对类中属性的值进行修改后,操作有效,会改变原来对象中属性的值。

三、字符串(即String类对象),在进行引用传递操作,对字符串的值进行修改后,不会改变原来字符串的值,因为字符串的内容一旦声明是不可改变的。若想要通过引用传递操作改变字符串的值,则可以把该字符串设置成为某类的属性值,对该类进行引用传递操作。

四、把数组作为形参进行引用传递时会影响到实参数组内元素的值。 

14、使用this()调用构造方法时有两点需要注意的:

一、由于构造方法是在实例化对象时被自动调用的,也就是说在类的所有方法中,只有构造方法是被优先调用的,所以用this调用构造方法必须也只能放在构造方法的首行。

二、this调用构造方法时一定要留一个构造方法作为出口,即程序中至少存在一个构造方法时不使用this掉哟偶那个其它构造方法的。

15、static相关应用:

一、使用static关键字的属性是静态的(所有类对象共享的),可以通过静态引用修改其属性值,其结果是所有的对象中该属性值均被修改。不存在this引用。

二、使用static声明的方法,可以通过类名称直接引用。非static声明的方法可以调用static声明的属性或方法,而static声明的方法不能调用非static类型声明的属性或方法。这也并不难理解,因为在程序中所有的属性和方法必须在对象开辟堆内存之后才可以调用,而static类型的方法在对象未被实例化时就可以被类名调用,所以如果直接由static方法调用非static操作,则有可能在属性还没有被初始化时就被调用了,这一点在语法上就讲不通。

16、构造块优先于构造方法执行,而且每次实例化对象时都会执行构造块中的代码。静态代码块优先于构造方法执行,而在类中定义的静态代码块会优先于构造块执行,且不管有多少对象产生,静态代码块只执行一次。

17、单例设计模式:定义Singleton类,将构造方法私有化,用static关键字在类内部产生本类的实例化对象,再在本类中通过static方法取得Singleton类的实例。这样做的好处是:可以控制实例化对象的产生,即无论在程序中声明几个Singleton对象,但实际上只有一个Singleton类的实例化对象存在,只是产生了几个该对象的引用而已。

18、内部类唯一的好处就是可以方便地访问为本类中的私有属性。

一、static内部类的实例化方法:外部类.内部类 内部类对象 = new 外部类.内部类();

二、非static内部类的实例化方法:外部类.内部类 内部类对象 = 外部类实例.new 内部类();

19、使用static声明的内部类变成了外部类,即在外部可以直接通过外部类的名称调用,但是使用static声明的内部类不能访问外部类中的非static属性。也可以在方法中定义一个内部类,但是在方法中定义的内部类不能直接访问方法中的参数,如果方法中的参数要想被内部类访问,则参数前必须加上final关键字。

20、JAVA中常用的内存区域:

一、栈内存:保存基本数据类型的变量值,保存类中的局部变量及方法中的形参,保存数组、类对象等的引用。

二、堆内存:保存每个引用数据类型对象的具体属性内容,即由new关键字实例化的数组或对象等。

三、 常量池:保存基本数据类型的常量值(public static final声明),字符串常量值,如String str = “avc”中的“avc”字符串以及代码中的方法、类的名称等具体的字符。

四、 java的八种基本类型(Byte Short、Integer、Long、Character、Boolean、Float、Double),除Float及Double意外,其它六种都实现了常量池,但是他们只在大于等于-128且小于等于127时才能使用常量池,如果不在此范围内,则会new一个出来,保存在堆内存中。。

五、静态数据区:保存static类型的属性值。

21、Java中只允许单继承,不能使用多重继承,但是允许进行多层继承。

22、子类对象在实例化前只会先默认调用父类中的无参构造方法,因此要在子类的构造方法中调用父类中的有参构造方法,须显式地加上super方法。

23、被子类覆写的方法不能拥有比父类方法更加严格的访问权限,当方法被覆写后,子类对象调用的方法将是被覆写后的方法,方法覆写时从private变为default不算方法的覆写,这是因为private方法被自动认为是final方法,而且对子类是屏蔽的,其实是重新定义了一个方法,这与方法的覆写没有任何关联。另外,域(即初始化变量)和静态方法均不具有多态性,如果在子类和父类中均有该域和静态方法,则即使发生向上转型,调用的域或静态方法也是父类中的,而不是子类中“覆写”的(实际上不能算是覆写,只是重复定义而已),

24、在继承类中,this和super是不允许同时出现的,因为两者调用构造时都必须放在构造方法的首行。

25、final关键字:使用final声明的类不能被继承,使用final声明的方法不能被覆写,使用final声明的变量即成为常量,不可修改,使用final声明变量时,要求全部的字母大写。如果在一个程序中的变量使用public static final声明,则此变量将成为全局常量。

26、抽象类的定义及使用规则:

一、包含一个抽象方法的类必须是抽象类。

二、抽象类和抽象方法都要使用abstract关键字声明

三、抽象方法只需声明而不需要实现。

四、抽象类必须被子类继承,子类(如果不是抽象类)必须覆写抽象类中的全部抽象方法。

五、一个抽象类不能使用final关键字声明。

六、抽象类中的抽象方法不要使用private声明。

27、接口的定义及使用规则:

一、接口有全局常量和公共的抽象方法组成。

二、接口中的抽象方法必须定义为public访问权限,在省略访问权限的时候,接口中的方法也是public权限的,这点事绝对不可改变的。

三、接口中的常量一般public static final声明,即使不声明,也默认为全局常量。

四、一个类(如果不是抽象类)实现接口也必须覆写接口中的全部抽象方法。

28、类、接口等的继承与实现关系

一、一个子类只能继承一个抽象类,但是可以实现多个接口。

二、一个接口不允许继承抽象类,但是允许继承多个接口。

三、允许一个抽象类实现多个接口。

29、多态性

多态在Java中主要有2种体现形式:方法的重载与覆写、对象的多态性。对象的多态性主要分为以下两种类型:

一、向上转型:用子类实例化父类对象或接口对象。调用被子类覆写的方法时,调用的是覆写后的方法,不可以调用子类中独有的方法(即在父类或接口中没有),要想调用,则必须进行向下转型。

二、向下转型:将实例化后的父类强制转化为其子类的实例化对象。在进行对象的向下转型前必须首先发生对象的向上转型。 

30、instanceof关键字:对象 instanceof 类 ——>返回boolean类型值,对象为该类的实例化对象,则返回true,否则返回false 。

31、Object类中的equals方法默认使用的是按地址进行比较的,并不能进行对内容的比较,而在String类中覆写的方法则是进行内容比较的。

32、一切的引用数据类型都可以使用Object进行接收,包括数组和接口类型。

33、finally作为异常的统一出口,所以在此语句块的编写中尽可能不要出现像throw或return这样的语句,这样可以避免不必要的问题出现。如果在try语句中出现return,那么该return语句是在finally中的语句执行完后才执行的。

34、Exception在程序中必须使用try…catch进行处理,而RuntimeException则可以不使用try…catch进行处理,但如果有异常产生,则将交由JVM进行处理。但在开发代码时,最好也是用try…catch进行处理。

35、如果一个类中的方法全部是使用static声明的静态方法,则在导入时就可以直接使用import static的方式导入,这样在调用该类中的方法时,就不再需要使用“类。静态方法()”的形式,可以直接调用。

36、四种访问权限:

一、private访问权限:属于私有访问权限,只能在被类中进行访问。

二、default访问权限:默认的访问权限,可以被本包中的其他类所访问,但是不能被其它包中的类所访问。

三、protected访问权限:受保护的访问权限,只能被本包中的类以及不同包中的子类所访问。

四、public访问权限:公共访问权限,可以在所有的类中访问。

37多线程实现的两种方法:继承Thread类,实现Runnable接口。

一、联系:两种方式,无论使用哪种,最终都必须依靠Thread类才能启动多线程,而在Thread类中的run方法调用的是Runnable接口中的run方法。

二、区别:如果一个类继承Thread,则不适合于多个线程共享资源,因为每个Thread类的实例化对象只能对应并启动一个线程,而实现Runnable接口,就可以方便地实现资源的共享,因为每个Runnalbe接口的实例化对象可以作为参数传入到多个Thread对象中,从而用一个Runnable接口的实例化对象启动多个线程。

38、由于线程操作的不确定性,所以主线程有可能最先执行完,那么此时其他线程不会受到任何影响,并不会随着主线程的结束而结束。

39、线程同步:即多个操作在同一时间段内只有一个线程进行,其它线程要等待此线程完成之后才可以继续执行。如果在普通代码块上加上synchronized关键字,则此代码块就称为同步代码块,在使用同步代码块时,必须指定一个需要同步的对象(一般为类的实例化对象)。如果在方法前加上synchronized关键字,则此方法称为同步方法。

40、多线程的开发中可以通过设置标志位的方式停止一个线程的运行,一般不建议使用Thread类中的suspend、resume、stop等方法,因为这三种方法在操作时会产生死锁问题。、

41、在引用传递中,在泛型操作中可以设置一个泛型对象的范围上限和范围下限。范围上限使用extends关键字声明,表示范型的类型可能是所指定的类型或者此类型的子类,而范型下限使用super进行声明,表示泛型的类型可能是所指定的类型,或者是此类型的父类型,或是Object类。

42、一个类的子类可以通过对象多态性为其父类实例化,但是在泛型操作中,子类的泛型类型是无法使用父类的泛型类型接收的,例如:Info<String>不能使用Info<Object>接收,因此在参数传递时不能进行向上转型,但该限制可以用通配符解决,即可以在方法的参数中使用类似Info<?>形式的参数来接受任意类型的泛型。

43、Java允许把任何基本数据类型转换成别的基本数据类型,但布尔类型除外,它根本不允许进行任何类型的转换处理,这与C++中不同。

44、如果没有明确定义一个类的构造方法,那么编译器会自动创建一个默认的无参构造函数,在创建该类的实例对象时,会默认调用它,如果明确定义了一个构造函数(无论有没有参数),编译器都不会自动创建默认构造函数。

45、Java程序初始化的书序是先静态对象,后非静态对象,而且静态初始化只在Class对象首次加载的时候进行一次。

46、对于类的访问权限,仅有两种选择:包访问权限(default)或public(一个内部类可以是private或protected的,但那时一个特例)。如果不希望其他任何人对该类拥有访问权限,可以把所有的构造器指定为private,从而不让任何人创建该类的对象。

47、可以为每个类都创建一个main方法。这种技术可使每个类的单元测试都变得简便易行,而且在完成单元测试之后,也无需删除main方法,可以留待下次测试。当一个程序中含有多个类,也只有命令行所调用的那个累的main方法才会被调用,即时该类不是public的。

48、有final修饰的数据属于编译期常量,必须在域的定义处或每个构造器中用表达式对final进行赋值。final用在基本数据类型上,保证其值不变,当对用final修饰对象时,它保证的是该引用恒定不变,一旦引用被初始化指向了一个对象,就无法再把它改为指向另一个对象。类中所有的private方法都隐式地指定为是final的。

49、类的加载通常发生于创建类的第一个对象时,但是当访问static域或static方法时,也会发生加载(构造器也是static方法,尽管static关键字并没有显式地写出来。)。

50、绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来。对java来说,绑定分为静态绑定和动态绑定。

一、静态绑定:在程序执行前方法已经被绑定,此时由编译器或其它连接程序实现。针对java简单的可以理解为程序编译期的绑定;这里特别说明一点,java当中的方法只有final,static,private和构造方法是前期绑定。

二、后期绑定:在运行时根据具体对象的类型进行绑定。在java中,几乎所有的方法都是后期绑定的。

51、一个复杂对象调用构造器要遵照以下顺序:

1)调用父类构造器。这个步骤会不断地反复递归下去,首先是构造这种层次结构的根,然后是下一层子类,等等,直到最低层的导出类。

2)按照声明顺序调用成员的初始化方法。

3)调用子类构造器的主体。

 

转自:http://blog.csdn.net/ns_code/article/details/8846697

内容概要:本文提出了一种基于瞬态三角哈里斯鹰算法(TTHHO)的多无人机协同集群在三维空间中的避障路径规划方法,旨在通过优化综合目标函数实现最低路径成本。该方法综合考量路径长度、飞行高度、环境威胁区域及转弯角度等多个因素,构建精细化的代价评估模型,从而提升路径的安全性与经济性。研究采用Matlab平台完成算法设计与仿真实验,验证了TTHHO算法在复杂三维动态环境下的高效寻优能力与强鲁棒性,能够有效支持多无人机系统的自主导航、协同控制与实时避障,具有良好的工程应用前景。; 适合人群:具备一定编程基础和优化算法理论背景,从事无人机路径规划、群体智能优化算法研究及相关领域的科研人员、工程技术人员与研究生。; 使用场景及目标:①解决多无人机在复杂三维空间中的协同避障与路径优化问题;②降低飞行综合能耗与风险,提高任务执行效率与安全性;③为智能优化算法在无人系统、自动驾驶、空中交通管理等实际工程场景中的应用提供可复现的技术范例与仿真支持。; 阅读建议:建议读者结合提供的Matlab代码深入理解算法实现细节,重点关注目标函数的设计逻辑、约束条件的处理方式以及参数调优策略,同时可将该方法迁移拓展至其他群体智能优化或路径规划应用场景中进行对比研究与性能验证。
内容概要:本文提出了一种考虑算力负荷时空迁移特性的多数据中心与共享储能协同优化调度策略,旨在实现“算电协同”背景下综合能源系统的高效运行。该策略深度融合算力、电力与储能资源的动态特性,通过构建优化调度模型并利用Matlab进行仿真求解,实现了多数据中心算力负荷在时间和空间维度上的灵活调度,以及共享储能系统的优化配置与运行,从而提升能源利用效率与系统整体经济性。研究重点探讨了算力负荷作为可调度资源的潜力,揭示了算力-电力-储能耦合系统的协同优化机制,为应对能源与算力双重挑战提供了创新解决方案。; 适合人群:从事电力系统、综合能源系统、数据中心运营管理、优化调度算法研究的科研人员及工程技术人员,具备一定的Matlab编程能力和数学建模基础。; 使用场景及目标:①为实现“东数西算”等国家战略提供关键技术参考,研究如何利用地理和时间差异调度算力以最大化消纳可再生能源;②为多数据中心与电网的协同规划与运行提供优化方案,有效降低运营成本,同时提高能源系统的灵活性、可靠性和可持续性。; 阅读建议:此资源以Matlab代码实现为核心,建议读者结合代码深入理解模型构建与求解过程,重点关注目标函数的设计、约束条件的设定以及算例分析部分,以便将该优化思路应用于实际工程项目或进一步开展学术研究。
内容概要:本文档介绍了一个基于Simulink的光伏储能直流系统仿真模型,涵盖PV光伏阵列、Boost DCDC变换器、负载、双向DCDC变换器及锂离子电池系统等关键组件的建模与仿真,旨在实现对光伏储能系统的能量管理与动态特性分析。文中深入探讨了系统在离网或并网工况下的能量均衡控制策略,重点实现了最大功率点跟踪(MPPT)技术、储能系统的充放电协同控制以及直流母线电压稳定控制,并通过Simulink平台进行系统级仿真验证,帮助研究人员掌握新能源系统的核心控制逻辑与仿真技术。; 适合人群:具备扎实的电力电子、自动控制理论基础,熟练掌握MATLAB/Simulink仿真环境,从事新能源系统、微电网、储能技术等相关方向的科研人员或工程技术人员,尤其适合电气工程、能源动力类专业的研究生及企业研发人员。; 使用场景及目标:①开展光伏储能一体化系统的建模与仿真研究;②验证MPPT控制算法、双向DCDC变换器的能量双向流动控制及储能系统的充放电管理策略;③作为高校电力系统、新能源技术等课程的教学案例,辅助学生理解系统能量流动与控制逻辑;④支撑科研项目中的系统方案设计、控制算法开发与优化验证。; 阅读建议:建议结合MATLAB/Simulink环境动手搭建模型,逐步理解各功能模块的设计原理与参数设置,重点关注光伏出力波动下的系统动态响应特性,深入分析控制环路之间的耦合关系,并基于文中提供的仿真框架进行扩展研究,如引入不同控制策略或优化目标,以全面提升对新能源系统仿真与控制的综合能力。
本资源提供截至2025年长江流域水库与大坝空间分布数据,系统整合流域内各类水库、大坝及重要水利工程的空间位置信息,包含可编辑MXD工程文件、标准Shapefile矢量文件以及标准成图TIF文件。数据经过统一整理与标准化处理,空间定位准确、属性结构规范,可直接应用于GIS空间分析、水资源管理、水利工程研究及科研教学等多种应用场景。 从数据背景来看,长江流域是我国面积最大、径流量最丰富的流域,也是全国水利工程最为密集的区域之一。经过长期开发建设,流域内形成了由大型控制性水库、中小型水库及各类拦河坝共同组成的水利工程体系,在防洪减灾、水资源调配、水力发电、农业灌溉、航运保障及生态修复等方面发挥着重要作用。水库与大坝的空间分布特征也是流域水资源开发利用及流域治理研究的重要基础数据。 在数据内容方面,本资源收录截至2025年长江流域各类水库与大坝,以面状矢量形式表达其空间位置。Shapefile文件包含水库(或大坝)名称、类型、所属行政区划、库容、建成时间及地理坐标等基础属性信息,可用于水利工程统计分析、空间分布研究及专题制图。同时配套提供MXD工程文件,已完成基础图层组织与符号配置,用户可在ArcGIS平台中直接进行编辑、查询及成果输出。 在应用层面,该数据可广泛用于流域综合管理、水资源优化配置、水库调度分析、防洪风险评价、水电开发研究及生态环境保护等领域。结合DEM、河流水系、降水、径流、土地利用及人口等数据,还可开展流域水文过程模拟、水利工程布局评价、水库蓄水能力分析及流域生态安全研究。此外,该数据也适用于GIS教学、水文学、水利工程及自然资源管理等相关课程实践。 资源同时提供标准成图TIF文件,可直接用于科研论文插图、项目报告及教学展示。整体数据结构规范、兼容性强,可在ArcGIS、QGIS等主流GIS软件平台中直接使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值