![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java笔记
文章平均质量分 60
linkinparkzlz
不要想太多,还是来一杯Java吧
展开
-
理解面向对象
7.java语言是纯粹的面向对象的编程语言,这主要表现在java完全支持面向对象的三种基本特征:继承,封装和多态。 8.面向对象方式主要由OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)组成结构化程序设计:(面向功能程序设计、面向数据流程序设计) //结构化程序设计主张按功能来分析系统需求,主要原则是:自顶向下,逐步求精,模块化等。 //SA(结构化分析) SD(结构化设原创 2016-09-19 16:28:43 · 248 阅读 · 0 评论 -
网页上随机验证码的生成:
//网页上随机验证码的生成: 可以先随机生成一个在指定范围内的int数字(如果希望生成小写字母,就在97-122之间),然后将其强制转换为char类型,再将多次生成的字符连接起来。//下面程序示范如何生成一个随机字符串 public class RandomStr { } { public static void main(String[] args) {原创 2016-09-19 16:38:08 · 1809 阅读 · 0 评论 -
自加运算符( ++)
特点: (1)自加是单目运算符,只能操作一个操作数 (2)只能操作单个数值型的变量,不能操作常量或者表达式。 (3)运算符既可以出现在操作数的左边,也可以出现在操作数的右边,但效果不一样。 出现在操作数左边时,则先把操作数+1,然后再把操作数带入表达式中计算 出现在操作数右边时,则先把表达式带入表达式计算,再把操作数+1;int a = 5; int b = ++a + 6;原创 2016-09-19 16:39:40 · 1746 阅读 · 0 评论 -
位运算符,逻辑运算符,比较运算符
位运算符: 区别逻辑运算符 举例: System.out.println(5 & 9); //将输出1 5—0000 0101(省略前面24个0) 9 ——-0000 1001(省略前面24个0)0000 0101& 0000 1001 —————— 0000 0001=1——————————————————————————————————————————原创 2016-09-19 16:42:22 · 430 阅读 · 0 评论 -
三目运算符 ? 等
(expression) ? if-true-statement : if-false-statement ; 如果逻辑表达式expression正确,则返回第二个操作数的值,如果错误,则返回第三个操作数的值。 String str = 5>3 ? “5大于3” :”5小于3” ;———————————————————————————————————————————————————原创 2016-09-19 16:43:57 · 350 阅读 · 0 评论 -
Java数组
java 语言的数组要求所有的数据元素具有相同的数据类型。因此,在一个数组中,数组元素的类型是唯一的,即一个数组只能存储一种数据类型的数据 —————————————————————————————————————————————————————————————————————— 一旦数组初始化完成,数组在内存中的空间将被固定下来,因此数组的长度将不会改变。即使把是数组元素的数据清空,但它所占的原创 2016-09-19 16:44:54 · 230 阅读 · 0 评论 -
foreach循环
foreach循环:从java5之后,java提供了一种更简单的循环,foreach循环。使用其遍历集合和数组元素时,无须获得数组和集合的长度,无须根据索引来访问数组元素和集合元素,会自动遍历数组和集合中的每个元素。public class ForEachTest{ public static void main(String[] args) { String原创 2016-09-19 16:45:30 · 210 阅读 · 0 评论 -
Java堆内存和栈内存:
实际的数组对象被存储在堆(heap)内存中; 如果引用该数组对象的数组引用变量是一个局部变量,那么它被存储在一个栈(stack)内存中。 为什么要有堆内存和栈内存??? (1)当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法内定义的变量将会逐个放入这块内存栈中,随着方法的执行结束,这个方法的内存栈也会自然销毁。因此,所有方法中定义的局部变量都是放在内存栈中的。 (2)在程序中创建一原创 2016-09-19 16:46:54 · 204 阅读 · 0 评论 -
java8增强的工具类:Arrays
java8增强的工具类:Arrays java提供的Array类里包含的一些static修饰的方法可以直接操作数组,这个Arrays类里包含了如下几个static修饰的方法(static修饰的方法可以直接通过类名调用)(1)int binarySearch(type[] a,type key) 使用二分法查询key元素值在a数组中出现的索引;如果a数组中不包含key元素值,则返回负数。调用此方原创 2016-09-19 16:48:19 · 258 阅读 · 0 评论 -
Java面向对象语法基础
面向对象:(1)可以使用类定义变量,使用类定义的变量都是引用变量。 (2)java程序使用类的构造器来创建该类的对象。 (3)java支持面向对象的三大特征:继承,封装和多态。java提供了private protected public三个访问控制修饰符来实现良好的封装; 提供了extends关键字来让子类继承父类,子类继承父类就可以继承到父类的成员变量和方法,继承是实现原创 2016-09-19 16:50:16 · 893 阅读 · 0 评论 -
对象(实例)的产生和使用:
创建对象(实例)的根本途径是构造器,通过new关键字来调用某个类的构造器即可创建这个类的实例。Person p = new Person();创建对象之后,就可以使用该对象了,java对象大致有以下作用。 (1)访问对象的实例变量 (2)调用对象的方法//如果权限允许,类里定义的成员变量或方法都可以通过类或实例(对象)来调用。***static修饰的成员变量或方法,既可以通过类来调用,也可以原创 2016-09-19 16:52:19 · 356 阅读 · 0 评论 -
对象的this引用
java提供了一个this关键字,this关键字总是指向调用该方法的对象。根据this出现的位置不同,this作为对象的默认引用有两种情形。 (1)构造器中引用该构造器正在初始化的对象。 (2)在方法中引用调用该方法的对象。****this关键字最大的作用是让类中的一个方法,访问该类里的另一个方法或实例变量。示例(程序1)public class Dog { //定义一个jump(原创 2016-09-19 16:53:42 · 447 阅读 · 0 评论 -
方法
方法: (1)如果需要定义一个方法,则需要在类体内定义,不能独立定义一个方法。一旦将一个方法定义在类体内,如果这个方法用static修饰,则这个方法属于这个类,否则这个方法属于这个类的实例(对象)(2)执行方法时必须使用类或或对象作为调用者,即所有的方法都必须使用 类 . 方法 或 对象 . 方法的形式来调用。(3) ————————————————————————————————原创 2016-09-19 16:54:33 · 197 阅读 · 0 评论 -
递归方法:例题
已知有一个数列:f(0)=1,f(1)=4,f(n+2)=2*f(n+1)+f(n),其中n是大于0的整数。求f(10)public class Recursive{ public static int fn(int n) { if(n==0) { return 1; } else if(n原创 2016-09-19 16:55:16 · 432 阅读 · 0 评论 -
方法重载
方法重载:java允许同一个类里定义多个同名方法,只要形参列表不同就行如果一个类里包含了两个或者以上的方法名相同,但形参列表不同,则被称为方法重载。 ———————————————————————————————————————————————————————————————————————— //程序实例public class Overload{ //下面定义了两个方法,方法名相同原创 2016-09-19 16:55:58 · 171 阅读 · 0 评论 -
成员变量和局部变量:
成员变量和局部变量:( 1)成员变量是指在类里定义的变量;局部变量指的是在方法里定义的变量。 (2) 实例变量(不以static修饰) 成员变量 类变量(以static修饰)所有变量原创 2016-09-19 16:57:15 · 247 阅读 · 0 评论 -
理解封装:
理解封装: 封装(Encapsulation)是面向对象的三大特征之一(继承、多态),它指的是将对象的状态信息隐藏在对象内部,不允许外部对象直接访问对象内部信息,而是通过该类提供的方法来实现对类的操作和访问。怎样实现良好的封装: (1)把对象的成员变量和方法隐藏起来,不允许外部直接访问。 (2)把方法暴露出来,让方法来控制对这些成员变量进行安全的访问和操作。java的封装有两方面的含义,把该隐原创 2016-09-19 16:58:46 · 553 阅读 · 0 评论 -
package 、import
java允许将一组功能相关的类放在同一个package下,从而形成逻辑上的类库单元(同一个包里的类可以自由访问,而不需要加上包前缀)()—————————————————————————————————————————————————————————————— 使用如下命令来编译一个java文件javac -d . Hello.java-d选项用于设置编译生成java文件的位置,这里指定将生成的原创 2016-09-19 17:08:42 · 259 阅读 · 0 评论 -
Java入门基础
1.如果某个类能够被解释器直接解释执行,则这个类必须包含main方法,main方法必须使用public static void 修饰i,且main方法的形参必须是字符串数组形式(String[] args)2.(1)java源程序的后缀名必须是.java,不能是其他的。 (2)通常情况下,java源文件的主文件名可以是任意的,但是有一种情况例外:如果java程序源代码里定义了一个public类,则原创 2016-09-19 16:27:25 · 297 阅读 · 0 评论 -
类的继承和构造器重载
构造器重载: 同一个类里有多个构造器,多个构造器的形参列表不同,即被称为构造器重载 ———————————————————————————————————————————————————————————————————————— *******类的继承:************(1)java的继承具有单继承的特点 (2)继承的格式 修饰符 class Subclass extends原创 2016-09-20 08:51:12 · 296 阅读 · 0 评论 -
super限定
super限定****(重要): 如果需要在子类中调用父类中被调用的实例方法,则可以使用super限定来调用父类被调用的实例。为上面的Tuoniao类增加一个方法CallOverrideMethod(), 在这个方法中调用Bird类中被覆盖的fly方法。class Bird { //定义一个fly方法 public void fly(){ System.out.pri原创 2016-09-20 08:52:30 · 259 阅读 · 0 评论 -
*调用父类的构造器
调用父类的构造器** (1)子类不会获得父类的构造器,但子类构造器可以调用父类构造器的初始化代码,类似于一个构造器调用另一个重载的构造器 (2)在一个构造器调用另一个构造器用this完成,在子类构造器中调用父类构造器用super完成。 —————————————————————————————————————————————————————————————————————— 调用父类构造器示原创 2016-09-20 08:54:21 · 402 阅读 · 0 评论 -
引用变量的强制类型转换:
引用变量的强制类型转换: 编写java程序时,引用变量只能调用它编译时类型的方法,而不能调用它运行时类型的方法,即使它实际所引用的确实包含该方法。 如果需要这个引用变量调用它运行时类型的方法,则必须把它强制类型转换成运行时类型。强制类型转换需要借助于类型转换运算符。(1)类型转换运算符是小括号,类型转换运算符的用法是:(type)variable,这种用法可以将variable变量转换成一个ty原创 2016-09-20 08:56:18 · 636 阅读 · 0 评论 -
instnanceOf运算符
instnanceOf运算符 考虑到强制转换可能出现异常,因此进行类型转换之前应先通过instancOf运算符来判断是否可以成功转换。例如上面的String str = (String)objPri,代码运行时会发生ClassCastException异常,这是因为objPri不可转换成String类型。为了让程序更加健壮,可以将代码改为如下:if(objPri instanceOf Strin原创 2016-09-20 08:57:45 · 257 阅读 · 0 评论 -
继承与组合实现软件复用
继承与组合:继承是实现软件复用的重要手段,但继承会破坏封装性。组合也是是实现软件复用的方式,且可以提供更好的封装性。//继承方法实现复用程序代码class Animal{ private void beat() { System.out.println("心脏跳动"); } public void breath() { beat();原创 2016-09-20 09:01:10 · 690 阅读 · 0 评论 -
初始化块
java使用构造器对单个对象进行初始化操作,使用构造器先完成对整个java对象的状态初始化,然后将java对象返回给程序,从而让java对象的信息更加完整。 与构造器作用非常相似的是初始化块,它也可以完成对java对象进行初始化操作。 —————————————————————————————————————————————————————————————————————— 初始化块是java原创 2016-09-20 09:02:28 · 273 阅读 · 0 评论 -
包装类
包装类java为8个基本类型提供了对应的包装类,通过包装类可以把基本类型的值包装成对象使用,JDK1.5提供了自动装箱和自动拆箱的功能,允许把基本类型的值直接付给对应的包装类引用变量,也允许把包装类对象直接付给对应的基本类型变量。————————————————————————————————————————————————————————————-—————————————————————————原创 2016-09-20 09:09:44 · 308 阅读 · 0 评论 -
自动装箱(Autoboxing)和自动拆箱(AutoUnboxing)
JDK1.5提供了自动装箱(Autoboxing)和自动拆箱(AutoUnboxing)功能。 所谓自动装箱,就是可以把一个基本类型变量直接赋给对应的包装类变量,或者赋给Object变量(Object类是所有类的父类,子类对象可以直接赋给父类变量); 自动拆箱则与之相反,允许直接把包装类对象直接赋给一个对应的基本类型变量。—————————————————————————————————————原创 2016-09-20 09:11:57 · 1489 阅读 · 0 评论 -
处理对象:
处理对象: java对象都是Object类的实例,都可以直接调用该类中定义的方法,这些方法提供了处理java对象的通用方法。1.打印对象和toString方法class Person{private String name;public Person(String name){this.name=name;}} public class PrintObject{public st原创 2016-09-20 09:13:22 · 293 阅读 · 0 评论 -
== 和 equal方法
java程序中测试两个变量是否相等有两种方式: 一种是利用 == 运算符,另一种是利用equal()方法。 (1)当利用 == 来判断两个变量是否相等时,如果两个变量是基本类型变量,且都是数值类型(不一定要求数据类型严格相同),则只要两个变量值相等,则将返回true。 (2)但对于两个引用类型变量,只有当他们指向同一个对象时, == 判断才会返回true, == 不可用于比较类型上没有父子关原创 2016-09-20 09:14:26 · 425 阅读 · 0 评论 -
类成员和单例(Singleton)类
类成员: static修饰的成员就是类成员,如类变量、类方法、静态初始化块。static关键字不能修饰构造器。static修饰的类成员属于整个类,不属于单个实例。 (1)在java类里只能包含成员变量、方法、构造器、初始化块、内部类(包括接口,枚举)5种成员。其中static可以修饰成员变量、方法、初始化块、内部类(包括接口,枚举) ,以static修饰的成员就是类成员。类成员属于整个类,而不原创 2016-09-20 09:15:54 · 875 阅读 · 0 评论 -
final修饰符:
final修饰符:final关键字用于修饰类、变量和方法,用来表示修饰的类 变量和方法不可改变。 (1)final修饰变量时,表示该变量一旦获得初始值就不能被改变,final既可以修饰成员变量(类变量和实例变量),也可以修饰局部变量和形参。 (2)final修饰的成员变量必须由程序员显示的指定初始值。 (3)类变量:必须在静态初始化或者声明类变量时指定初始值,只能二选一。 (4)实例变量原创 2016-09-20 09:17:18 · 205 阅读 · 0 评论 -
缓存实例的不可变类:
可变类的实例状态不可改变,可以很方便的被多个对象所共享,如果程序要经常使用相同的不可变类实例,则应该考虑缓存这种不可变的实例。因为重复创建相同的对象无太大的意义,会加大系统开销。缓存是软件设计中一个非常有用的模式。下面程序将使用一个数组作为缓存池:class CacheImmutale{ private static int MAX_SIZE = 10; //使用数组来缓存已有的实原创 2016-09-20 09:18:04 · 257 阅读 · 0 评论 -
抽象类:
抽象类: (1) 当编写一个类时,常常会为该类定义一些方法,这些方法用于描述该类的行为方式,这些方法都有具体的方法体。但在某些情况相爱,某个父类只知道子类应该包含怎样的方法,但无法准确的知道这些子类实现这些方法。抽象方法是只有方法签名,没有方法实现的方法。 (2)抽象方法和抽象类必须使用abstract修饰符来修饰,有抽象方法的类只能被定义成抽象类;抽象类里可以没有抽象方法。 (3)抽象方法不原创 2016-09-20 09:18:57 · 217 阅读 · 0 评论 -
java8改进的接口:
java8改进的接口: 抽象类是从多个类中抽象出来的模板,如果将这种抽象进行更彻底,可以提炼出来一种更加特殊的“抽象类”–接口,接口里不能包含普通方法,接口里的所有方法都是抽象方法,java8对接口进行了改进,允许在接口中定义默认方法,默认方法可以定义方法实现。—————————————————————————————————————————————————————— java8中接口的定义:原创 2016-09-20 09:20:37 · 237 阅读 · 0 评论 -
接口的继承:
接口的继承和类继承完全不一样,接口完全支持多继承,即一个接口可以有多个直接父接口,和类继承相似,子接口扩展某个父接口,将会获得父接口里定义的所有抽象方法、常量。 一个接口继承多个父接口时,多个父接口排在extends关键字之后,多个父接口之间以英文逗号隔开。———————————————————————————————————————————————————————— 示例程序:inte原创 2016-09-20 09:22:13 · 270 阅读 · 0 评论 -
内部类和匿名内部类:
内部类: (1)定义在其他内部的类就被称为内部类。 (2)内部类提供了更好的封装。 (3)内部类成员可以直接访问外部类的私有数据,外部类不能访问内部类的细节,例如内部类的成员变量。———————————————————————————————————————————————————— 匿名内部类: 匿名内部类适合那种只需要一次使用的类,匿名内部类不能重复使用。 定义内部类的格式如下:原创 2016-09-20 09:23:25 · 202 阅读 · 0 评论 -
lambda表达式:
java8新增的lambda表达式: lambda表达式是java8的重要更新。lambda表达式支持将代码块作为方法参数。lambda表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(这种接口称为函数式接口)的实例。 ———————————————————————————————————————————————— 匿名内部类: public class CommandTest{pub原创 2016-09-20 17:27:09 · 226 阅读 · 0 评论 -
枚举类:
java5新增了一个enum关键字,用于定义枚举类。枚举类是一种特殊的类,它一样可以拥有自己的成员变量、方法,可以实现一个或多个接口,也可以定义自己的构造器,一个java源文件只能定义一个public访问权限的枚举类。枚举类和普通类有如下区别: (1)枚举类可以实现一个或多个接口,使用enum定义的枚举类默认继承了java.lang.Enum类,而不是Object类,因此枚举类不能显示继承其他父类原创 2016-09-20 17:28:09 · 294 阅读 · 0 评论 -
对象与垃圾回收:
对象与垃圾回收:java的垃圾回收是java语言的重要功能之一。当程序创建对象、数组等引用实例时,系统都会在堆内存中为其分配一块内存区,对象就保存在这块内存区中,当这块内存区不再被任何引用变量引用时,这块内存就变成了垃圾,等待垃圾回收机制进行回收。垃圾回收机制具有以下特征: (1)垃圾回收机制只负责回收堆内存中的垃圾,不回收任何物理资源(例如数据库连接、网络I/O等) (2)程序无法精确控制垃圾原创 2016-09-20 17:29:03 · 310 阅读 · 0 评论