用.aspx做网站,企业信息公示管理系统河南,淘宝做网站,薛城做网站面向对象和面向过程
面向过程#xff1a;把一个任务分成一个个的步骤#xff0c;当要执行这个任务的时候#xff0c;只需要依次调用就行了
面向对象#xff1a;把构成任务的事件构成一个个的对象#xff0c;分别设计这些对象#xff08;属性和方法#xff09;、然后把…面向对象和面向过程
面向过程把一个任务分成一个个的步骤当要执行这个任务的时候只需要依次调用就行了
面向对象把构成任务的事件构成一个个的对象分别设计这些对象属性和方法、然后把这些对象包装成有自己完整功能的系统。
举例 面向对象的特征
面向对象的四大特征继承、多态、封装、抽象
封装把每一个对象的信息都隐藏起来只留出少量的接口方法给外界访问来获取和更改对象的信息良好的封装可以有效的保证数据的合理性。
继承从已有的类中派生出新的类新的类继承旧的类旧的类叫做新的类的父类新的对象具有父类的属性和方法并可以具有自己独有的属性和方法java中继承是单继承每一个子类都只能有一个直接的父类
多态多态就是事物的多种形态在不同的情况下所表现的不同的形式。
多态的存在条件
继承或实现在多态中必须存在有继承或实现关系的子类和父类方法的重写子类对父类中的某些方法进行重新定义父类引用指向子类对象父类类型指子类对象继承的父类类型或实现的父接口类型
形式
父类类型 变量名 new 子类类型
作用
当使用变量名调用成员变量时调用的是父类的成员变量调用方法时则是调用的子类重写的方法。无法调用子类独特的方法和成员变量当子类和父类拥有相同的静态变量和方法时调用的是父类的变量和方法。
向上转型父类引用指向子类对象多态的一种体现。无需强制转型
形式父类类型 变量名 new 子类类型
向下转型子类引用指向父类对象此时可以调用子类特有的方法需要强制转型
形式子类类型 变量名 子类类型 new 父类类型
抽象把具体的事物使用代码表示出来。
抽象方法没有方法体的方法
抽象类包含抽象方法的类
如果有类继承了抽象类那么这个类要把所继承的抽象类的所有的抽象方法给实现出来除非这个子类也是抽象类。
java基本类型
int、long、short、float、double、char、boolean、byte。
在保存金额时不能使用浮点型进行储存因为浮点型在储存十进制的小数时保存的是近似值所以并不准确如要保存可以使用BigDecimalBigDecimal通过使用BigInteger用于表示整数部分和scale用于表示小数部分的位数来表示高精度的十进制数值从而可以准确地表示和计算大数。
java在传输参数的时候传输的是值的副本
如果传输的不是对象那么传输过去的是变量的值的副本在方法中改变值不会改变原变量的值。
如果传输的是对象那么传输的是对象引用的副本在方法中改变对象的值那么对象引用的值也会和方法中一样
举例
public class Main {public static void main(String[] args) {int x5;chang(x);System.out.println(x);StringBuilder stringBuildernew StringBuilder(123);changClass(stringBuilder);System.out.println(stringBuilder);}public static void chang(int x){x6;}public static void changClass(StringBuilder stringBuilder){stringBuilder.append(123);}
}
运行结果 包装类
java中很多地方需要使用对象而不是基本数据类型比如集合集合中只能存放对象那么这时就轮到包装类出场了。包装类相当于把基本数据类型进行包装后使其获得对象的性质、添加了属性和方法。 基本数据类型 包装类 int Integer long Long float Float double Double char Character byte Byte boolean Boolean short Short
自动装箱和拆箱
装箱将基础类型转化为包装类型。
拆箱将包装类型转化为基础类型。
当基础类型于包装类进行运算时会自动进行装箱和拆箱。
String类
String类是不可改变的在保存字符串时使用的是byte数组来进行存储的而这个数组是使用final进行修饰的所以String类是不可以改变的对String类进行运算则是生成了一个新的变量。
String类中对byte数组的定义 为什么不用char数组呢因为使用byte数组更节省空间
因为String类本身是不可改变的要通过新建才能达到修改的效果所以如果要频繁的对字符串进行修改就会对内存进行比较大的消耗那么有没有一种类可以直接修改呢
Stringbuffer类和Stringbuilder类
Stringbuffer和Stringbuilder都是继承的抽象类AbstractStringBuilder可以对字符串进行直接的修改不用新建。
AbstractStringBuilder中对byte数组的定义 Stringbuffer和Stringbuilder、String的区别 是否线程安全 是否可改变 String 是 否 Stringbuffer 是 是 Stringbuilder 否 是
Stringbuffer是所有的方法都添加了synchronized关键字来确保数据的同步的而Stringbuilder却没有所以Stringbuilder在单线程的情况下是要比Stringbuffer的效率要高的。
StringJoiner
StringJoiner是基于String来实现的网上说是Stringbuilder但我自己看是基于String数组实现的。 StringJoiner可以在添加字符串的时候自动的去添加用户设置的前缀、后缀、和分隔符。
import java.util.StringJoiner;public class Main {public static void main(String[] args) {StringJoiner stringJoinernew StringJoiner(,);stringJoiner.add(张三);System.out.println(stringJoiner);stringJoiner.add(李四);System.out.println(stringJoiner);stringJoiner.add(王五);System.out.println(stringJoiner);}
}
运行结果 注意
new String(suibian); 这一条语句运行完后建立了几个对象呢
答案是1或2个。
1.当字符串常量池没有suibian是会建立一个字符串对象放到字符串常量池里去。
2.new一个字符串对象放到堆栈里去。
String类的大小
Java中的字符串长度是使用int类型来表示的所以String类字符串最大长度为2^31字符串常量在常量池中的最大长度是65534
Object类常用的方法有那些
Object类常用的方法有toString、equals、hashCode、clone等。
toString默认输出对象地址。
equals默认比较两个引用变量是否指向同一个对象内存地址。
hashCode将与对象相关的信息映射成一个哈希值默认的实现hashCode值是根据内存地址换算出来。
clone得到一个对象的副本。
浅拷贝和深拷贝
浅拷贝拷贝对象和原始对象里的引用类型引用同一个对象。
在下面这个例子中person1和person2的引用对象引用的是同一个对象。
public class Main {public static void main(String[] args) throws CloneNotSupportedException {Person person1 new Person(Alice, new Address(New York));Person person2 person1.clone();System.out.println(person1.getName());System.out.println(person1.getAddress().getCity());System.out.println(person2.getName());System.out.println(person2.getAddress().getCity());person2.getAddress().setCity(123);System.out.println(person1.getName());System.out.println(person1.getAddress().getCity());System.out.println(person2.getName());System.out.println(person2.getAddress().getCity());}
}
class Person implements Cloneable{private String name;private Address address;public Person(String name, Address address) {this.name name;this.address address;}public Person() {}public String getName() {return name;}public void setName(String name) {this.name name;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address address;}Overridepublic Person clone() throws CloneNotSupportedException {Person clone (Person) super.clone();return clone;}
}class Address {private String city;public Address(String city) {this.city city;}public Address() {}public String getCity() {return city;}public void setCity(String city) {this.city city;}
}
运行结果 可以看到原对象的值会受到拷贝对象的影响
深拷贝拷贝对象和原始对象的引用类型指向不同的对象
对上面的程序进行更改使Address也实现Cloneable接口并且在Person的clone中调用Address中的clone方法。
public class Main {public static void main(String[] args) throws CloneNotSupportedException {Person person1 new Person(Alice, new Address(New York));Person person2 person1.clone();System.out.println(person1.getName());System.out.println(person1.getAddress().getCity());System.out.println(person2.getName());System.out.println(person2.getAddress().getCity());person2.getAddress().setCity(123);System.out.println(person1.getName());System.out.println(person1.getAddress().getCity());System.out.println(person2.getName());System.out.println(person2.getAddress().getCity());}
}
class Person implements Cloneable{private String name;private Address address;public Person(String name, Address address) {this.name name;this.address address;}public Person() {}public String getName() {return name;}public void setName(String name) {this.name name;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address address;}Overridepublic Person clone() throws CloneNotSupportedException {Person clone (Person) super.clone();clone.addressaddress.clone();return clone;}
}class Address implements Cloneable{private String city;public Address(String city) {this.city city;}public Address() {}public String getCity() {return city;}public void setCity(String city) {this.city city;}Overridepublic Address clone() throws CloneNotSupportedException {Address clone (Address) super.clone();return clone;}
}
运行结果 可以看到原对象的值不会受到拷贝对象的影响。