标签:image div 封装 的区别 span 添加 getname ati 类与对象
面向对象:
三大特征:封装性,继承性,多态性
类与对象的关系:类是对某一事物描述,是抽象,概念上的定义;对象是实际存在该类事物的每个个体,因而成为实例
定义类和对象:
class 类名称{
数据类型 属性;
..... // 声明成员变量(属性)
public 返回值的数据类型 方法名称(参数1,参数2,,,,){
程序语句;
【return表达式;】
} // 定义方法内容 }
class Person{
String name;
int age;
public void tell(){
System.out.println("姓名:"+name+"年龄:"+age);
}
}
此时定义了一个类,一个类定义完成之后不能直接使用,需要产生对象;
对象也需要使用其产生的固定格式,
对象的创建及使用
类名对象名称=null; //声明对象 |
类名名称=new 类名(); //实例化对象 |
类名 对象名称=new 类名(); |
class Person{
String name;
int age;
public void tell(){
System.out.println("姓名"+name+"年龄"+age);
}
}
public class ClassDemo{
public static void main(String args[]){
Person per=new Person(); //创建并实例化对象
}
}
类属于引用传递类型,从数组中可以知道,引用数据类型必然存在栈内存-堆内存的引用关系;
类与对象也存在这样的关系
|
Person per=new Person();
|-String:是一个字符串,本身是一个类,就是一个引用数据类型,此时默认值为null;
|-int:是一个整数,本身是一个数,是基本数据类型,此时默认值就是0;
可以进一步划分以上代码,则可以写成如下的形式:
Person per=null; //声明对象 per=new Person(); //实例化对象 |
为属性赋值,并调用类中的方法,使用格式:
public class ClassDemo{ public static void main(){ Person per=new Person(); per.name="张三";//为姓名赋值 per.age=15; //为年龄赋值 per.tell(); //调用方法,打印信息 } } |
此时,内容显示出来之后,实际所有的操作都是要在内存中直接体现出来的;
注意:在使用对象的时候,对象必须被实例化之后才可以使用(实例化对象,并不单单指的是直接通过new关键字时实现的,只有其有堆内存的空间指向,则就表示实例化成功)
不实例化会出现空指向异常;在应用操作中,如果一个对象没有堆内存的引用,而调用了类中的属性或方法,则会出现此问题;
空间没有任何的栈内存空间所引用,就形成了垃圾空间,等待垃圾收集机制进行回收;
为方法封装:private 方法返回值 方法名称(参数列表){}
私有的访问权限,外部根本无法调用
Getter String getName()
只要一有对象实例化就会调用构造方法 ;构造方法的名称必须与类名一致,不能有任何返回值类型的声明,
package holidayjava; class Person{ public Person() { //声明构造方法 System.out.println("一个新的Person对象产生"); } } public class Demo { public static void main(String[] args) { System.out.println("声明对象:Person per=null"); Person per=null; //声明对象是并不去调用构造方法 System.out.println("实例化对象:per=new Person();"); per=new Person(); //实例化对象 } }
在整个java操作中,如果一个类中没有明确的声明一个构造方法,则会自动生成一个无参的什么都不做的构造方法,供用户使用,就类似于以下的形式:
class Person{ public Person(){ } //如果没有编写构造方法,则会自动生成此代码 }
构造方法的主要目的是为类中的属性初始化,
package holidayjava; class Person{ private String name; private int age; public Person(String n,int a) { //声明构造方法 this.setName(n); this.setAge(a); } public void setName(String n) { name=n; } public void setAge(int a) { age=a; } public String getName() { return name; } public int getAge() { return age; } public void tell() { System.out.println("姓名:"+name+"年龄;"+age); } } public class Demo { public static void main(String[] args) { System.out.println("声明对象:Person per=null"); Person per=null; //声明对象是并不去调用构造方法 System.out.println("实例化对象:per=new Person();"); per=new Person("张三",15); //实例化对象 per.tell(); } }
构造方法重载:构造方法本身与普通方法一样,都是支持重载操作的,只要参数的类型的个数或个数不同,则可以完成重载操作
匿名对象:在Java中如果一个对象只使用一次,则可以将其定义成匿名对象
所谓的匿名对象就是比之前少一个栈内存的引用关系,只在堆内存中开辟空间,而不存在栈内存的引用。
public class Noname{ public static void main(String args[]){ new Person("张三",30).tell(); //匿名对象 } }
程序分析思路:
1.根据要求写出类包含的属性 2.所有的属性必须进行封装(private) 3.封装之后的属性通过setter和getter设置和取得 4.如果需要可以加入若干构造方法 5.再根据其他要求添加相应的方法 6.类中的所有方法都不要直接输出,而是交给被调用处输出 |
String类
1.1 实例化String对象
A.直接复制
String name="zhanghong";
B.通过new关键字
String name=new String("zhanghong");
1.2 String的内容比较
基本数据类型中使用“==”进行比较,
package holidayjava; public class Demo { public static void main(String[] args) { String str1="hello"; //直接赋值 String str2=new String("hello"); //通过new赋值 String str3=str2; //传递引用 System.out.println("str1==str2"+(str1==str2)); //flase System.out.println("str1==str3"+(str1==str3)); //flase System.out.println("str2==str3"+(str2==str3)); //true } }
进行内存的分析,
现在使用判断相等,是判断地址空间是否相等,判断的是地址值;
如果是判断其内容是否相等,则必须使用String类提供的equals()方法
public class Demo { public static void main(String[] args) { String str1="hello"; //直接赋值 String str2=new String("hello"); //通过new赋值 String str3=str2; //传递引用 System.out.println("str1==str2"+str1.contentEquals(str2)); //true System.out.println("str1==str3"+str1.contentEquals(str3)); //true System.out.println("str2==str3"+str2.contentEquals(str3)); //true } }
结论:String有两种比较方式:“==”-------->地址值 equals-------->具体内容
1.3两种实例化方式的区别
一个字符串就是String的匿名对象,通过以下代可知:
public class Demo { public static void main(String[] args) { System.out.println("hello".equals("hello")); //true } }
String name="zhanghong";
就表示将一个堆内存空间的指向给了栈内存空间,使用直接赋值方式,可以有效节省内存
使用new String()方式则意味着要开辟两个内存空间;
1.4字符串的内容一旦声明不可改变
public class StringDemo{ public static void main(String[]args){ String str="hello"; str=str+"hello"; System.out.println("str="+str); } }
此时,字符串对象改变了,但是字符串改变了么?
实际上字符串内容的改变,改变的是内存地址的引用关系;
在开发中应该避免使用如下操作:
public class Demo { public static void main(String[] args) { String str1="zhanghong"; //声明字符串 for(int i=0;i<100;i++) { //循环修改内容 str1=str1+i; //字符串的引用不断改变 } } }
这样的操作,要断开-连接引用100次才可以完成,性能很低,应该避免使用。
2.String类的常用方法
一个字符串可以变为一个字符数组,同样,也可以把一个字符数组,变为一个字符串,
2.1将字符串变为字符数组 public char[] toCharArray()
将字符数组变为字符串 public String(char[]value)
public String(char[] value,int offset,int count)
package holidayjava; public class Demo { public static void main(String[] args) { String str1="hello"; //定义字符串 char c[]=str1.toCharArray(); //将一个字符串变为字符数组 for(int i=0;i<c.length;i++) { //循环数组 System.out.print(c[i]+","); } System.out.println(""); //换行 String str2=new String(c); //将全部字符数组变为String String str3=new String(c,0,3); //将部部字符数组变为String System.out.println(str2); //输出字符 } }
2.2从字符串中取出指定位置的字符
str.charAt(int index);
2.3字符串与byte数组的转换
byte数组(字节数组),在一般IO操作中会经常使用到,在String 类中提供了以下的方法可以进行字符串与字节数组间的转换:
2.4取得一个字符串的长度
public class Stringdemo{ public static void main(){ String str1="hello Lixinghua"; System.out.println("/"+str1+"/的长度为:"+str1.length()); } }
2.5查找指定的字符串是否存在
2.6去掉空格
去掉左右空格 trim()
2.7字符截取
从一个指定的字符串中取出里面的部分内容,使用方法:
String str=“hello world”; //定义字符串 System.out.println("str.substring(6)"); //从第7个位置开始截取 System.out.println("str.substring(0,5)"); //截取0到5位置的内容
2.8拆分字符串
public class Demo { public static void main(String[] args) { String str1="hello world"; //定义字符串 String s[]=str1.split(" "); //按空格进行字符串的拆分 for(int i=0;i<s.length;i++) { //循环输出 System.out.println(s[i]); } } }
3.9大小写转换
大写变小写;小写变大写;
public class Demo { public static void main(String[] args) { System.out.println("将\"hello world\"转成大写:"+"hello world".toUpperCase()); System.out.println("将\"HELLO WORLD\"转成小写:"+"HELLO WORLD".toLowerCase()); } }
3.10判断字符串是否以指定字符串开头或结尾
sartWith,endWith
3.11不区分大小写的比较
在String类中equals()比较,则可以使用一下的方法:方法是可以用来进行字符串比较的,但是此种比较方法的只能针对于大小写完全一样的字符串进行比较,如果现在要是想进行不区分大小写的比较,则可以使用equalsIgnoreCase(str2);
3.12字符串替换功能
replaceAll
标签:image div 封装 的区别 span 添加 getname ati 类与对象
原文地址:https://www.cnblogs.com/QNaa/p/12257446.html