面向对象
-
面向对象分为3个阶段
(1) New ,class 属性,方法,参数,返回值,this
(2)封装 构造函数 static final 内部类
(3)继承 super、abstract、interface -
new
(1)User zhang=new User(); 体现的是堆栈管理模式
User对象在栈内存 创建的对象zhang = 指针指引到 堆内存的实例
并且调用堆内存的空构造函数,new还有指针含义 -
new特点
(1)new指的是单线程连接方式,new只能交互一个类对象的操作模式
(2)所以new和C++指针函数用处有差异的 -
class属性
(1)属性访问性质是3种:
a.私有属性: private int id=1; 只能当前类应用,类的属性大多数都是 private,因为封装的缘故
b.共有属性: public int age=12; 都能调用
c.受保护: Protected String name =“sun”;常用在继承,子类调用父 类的属性,往往和public很相似
(2)注意:如果new对象调用的类和当前类不一个包,那么只能调用public的属性和方法,所以常用的就是private和public
(3)属性的目的是供其他new实例化对象的调用和赋值的,当前值是初始化的值,未必是显示和调用的值 -
方法:C语言函数,一个程序块
-
方法的参数:
(1)在一个类中,全局变量(类的属性),可以替代其价值
(2)方法的参数是动态,灵活,可以没有可以有,如果有调用的顺序,类型,必须匹配 -
方法的返回值
(1)ava的返回值必须匹配方法声明的类型的返回值
(2)Java的返回值如果有,必须是一个,在方法程序执行的最后执行return
(3)Return是关键字,有返回值需要加上返回的变量或者value
(4)方法执行的每一个过程都需要一个匹配类型的返回值,否则语法错误,涉及到线程 -
类:工厂
属性: 工厂共有共享的原材料
构造函数: 工厂的传达室
方法: 工厂的一个生产车间
参数: 该车间 生产需要的原材料,根据不同的原材料,进行不同的生成
返回值: 车间根据原材料生成后的产成品
-
方法的重载:方法名一样,参数肯定不一样,return可能不一样,java在调用的过程中,自动匹配调用参数方法
-
This 关键字:针对的是方法调用全局变量,
this.只能调用类下的属性,方法内的变量参数不能调用
与this关键字呼应的是对象的就近原则
-
封装 setter getter,本身是一个方法,是给私有属性取值和赋值的一个方法,该方法可以限定取值范围
-
封装的特点:
(1)取值和赋值的方法可以限定赋值的范围,给赋值或者取值一个判断限定其取值范围
(2)属性不能直接调用,因为需要判断和限定取值范围,所以属性是private,但是赋值和取值的方法是public,所以封装的方法通常是public,也就是共有方法访问私有属性
(3) Java和非java协议的技术体现融合
程序
-
代码
//public class User // int age=12; // String name="greey"; // String sex="男"; /* * 调用用户的类对象,并且赋值其初始值, * 首先实例化User对象 */ //实例化User对象 //对象User:房产4s店 购房的合同、房本= 指向、引导指引 实例User:真实房屋( 进入真实房屋的比如钥匙); // User对象在栈内存,创建的对象zhang = 指针指引到 堆内存的实例,并且调用堆内存的空构造函数; User zhang=new User(); //此时new对象zhang,没有丝毫赋值,所以执行的结果是User属性的初始值 System.out.println(zhang.name);//greey //赋值value,所以new对象的属性值改变了 zhang.age=45; zhang.name="张三"; zhang.sex="女"; System.out.println(zhang.name);//改变后的值,可以理解为替换了zhang对象声明时候的初始值greey了, //但是始终还是一个new对象。 //创建新的new对象 User li=new User(); li.name="李四"; System.out.println(zhang.name+"-"+li.name+"-"+li.sex); //张三-李四-男(li对象没有赋值sex的value所以显示的是还是原始User的初始值) //但是zhang li是两个new对象了。
-
替换的案例
//替换案例1 import java.util.Scanner; public class String替换 { //输入被替换的String private String input=null; /** * 输入一个合法存在的String,那么返回一个[]参数 */ public String[] GetString() { System.out.println("用户输入了一个存在的String,返回结果[]"); //测试,模拟用户输入的是被替换的String 是 y input="y"; //又称为给全局变量赋值 String str[]= { "1","7","19"}; return str; } /** * 根据[]获取用户输入合法的位置,返回 */ public int GetNumber(String[] str) { System.out.println("用户输入了一个存在的替换位置,并且返回"); //匹配[] 来验证用户是否的位置是否合法 //测试,视为用户输入的替换位置是2 return 2; } /** * 显示替换的结果 * 需要第一步方法被替换的String参考,或许借助于当前类属性 */ public String GetResult(int number) { System.out.println("根据被替换的String:"+this.input+",根据替换的位置:"+number); System.out.println("执行替换操作"); //返回最终替换后的结果,视为result是最终替换的结果。 return "result"; } //以上是我对String替换的案例的面向对象方式的写法,写法非常众多的。 //在众多的写法中,哪个最正确,标准不是执行出结果,而是最终项目的维护和运行使用。 public static void main(String[] args) { // Scanner s=new Scanner(System.in); String替换 string=new String替换();