JavaSE学习笔记(二)

面向对象概述:
面向过程:当需要一个功能的时候,每一个具体步骤亲力亲为,详细处理每一个细节
面向对象:当需要一个功能的时候,不关心具体的步骤,而是找一个具有该功能的人,来帮我做事。

面向对象特征:封装、继承、多态

public class Demo{
    
    

        public static void main(String[] args){
    
    
		      int[] array={
    
    10,20,30,40}
			  
			  //要求打印 [10,20,30,40]
			  //面向过程是亲力亲为
			  
			  System.out.print("[");
			  for(int i=0;i<array.length;i++)
			  {
    
    
			        if(i==array.length)
					       System.out.print(array[i]+"]");
					else
					        System.out.print(array[i]+",");
			   }
               
               System.out.println("================");
               
			   //使用面向对象
			   //找一个JDK给我们提供的Arrays类
			   //其中有一个toString方法,直接就能把数组变成想要的字符串
               System.out.println(Arrays.toString(array));
}			  

类和对象

类:是一组相关属性和行为的集合。一类事物的模板。使用事物的属性和特征来描述该类实物
现实中:
属性:状态信息(名字 体重 年纪)
行为:能做什么(走 跑 叫)

对象:一类事物的具体表现,对象是类的实例
现实中:一类事物的实例:一只小猫;

类是一类事物的描述。抽象的
对象是一类事物的实例,是具体的

类是对象的模板,对象是类的实体。


类的定义

定义一个类,用来模拟学生事务,两个组成部分

属性(是什么)
姓名
年龄
行为(能做什么)
吃饭饭
睡觉觉
学习习

对应到java中

成员变量(属性)
String name;//姓名
int age;//年龄
成员方法(行为)
public void eat(){}//吃饭饭
public void sleep(){}//睡觉觉
public void study(){}//学习习

******定义一个学生类 叫Student;

public class Student{
    
    

    //成员变量   (直接写在了类里(成员变量),没有建在方法里(局部变量))
    String name;//姓名
    int age;//年龄
	
	
	//成员方法
	public void eat(){
    
    
	     System.out.println("吃饭饭");
	}
	public void sleep(){
    
    
         System.out.println("睡觉觉");
	}
    public void study(){
    
    
         System.out.println("学习习");
	}	

1.成员变量是直接定义再类当中的,再方法外面;
2.成员方法不要写static关键字;(普通方法写)

---------------------------------------------

通常情况下,一个类并不能直接使用,需要根据一个类创建一个对象,才能使用。

1.导包:指出需要的类在什么位置。
import 包名称.类名称;
import cn.itcast.day.Student;
和当前类属于同一个包的情况,可以省略不写

2.创建:

类名称 对象名 = new 类名称();
Student stu = new Student();

3.使用:分两种情况
使用成员变量:对象名.成员变量名
使用成员方法:对象名.成员方法名(参数)

Public class Dem{
    
    
 
      public static void main(String[] args){
    
    
	              //导包。
				  //需要使用Student类。和我Dem位于同一个包下,不用导包
				  
				  //2.创建:
				  //类名称 对象名 =new 类名称();
				  //根据Student类,创建一个stu对象
				  Student stu = new Student();
				  
				  //3.使用其中成员变量
				  //对象名.成员变量名
				  System.out.println(stu.name);//类中没有赋值,会默认值null
				  System.out.println(stu.age);0
				  
				  //可以赋值
				  stu.name="赵丽颖";
				  stu.age=18;
				  
				 stu.eat();
                 stu.sleep();
                 stu.study();

public class Phone {
    
    
    String yanse;
    int change;

    public void tonghua(String who){
    
               //带参数的
        System.out.println("给"+who+"打电话");
    }

    public void liaotian(){
    
                         //不带参数的
        System.out.println("吃饭了没!!!");
    }


}
public class pho {
    
    
    public static void main(String[] args){
    
    
        //导包
        //import

        //创建
        Phone one = new Phone();

        //使用
        System.out.println(one.yanse);
        System.out.println(one.change);
		one.yanse="黄色";
		one.change=5999;
		System.out.println(one.yanse);
        System.out.println(one.change);
 
 
 
        one.liaotian();
        one.tonghua("乔布斯");
    }
}

——-----------------------------------------------------------
两个对象内存图

public class Phone {
    
    
    String yanse;
    int change;
    public void tonghua(String who){
    
               //带参数的
        System.out.println("给"+who+"打电话");
    }
    public void liaotian(){
    
                         //不带参数的
        System.out.println("吃饭了没!!!");
    }
}
public class pho {
    
    
    public static void main(String[] args){
    
    
        Phone one = new Phone();
        System.out.println(one.yanse);
        System.out.println(one.change);
		one.yanse="黄色";
		one.change=5999;
		System.out.println(one.yanse);
        System.out.println(one.change);
        one.liaotian();
        one.tonghua("乔布斯");
        
		Phone two = new Phone();
        System.out.println(two.yanse);
        System.out.println(two.change);
		two.yanse="黄色";
		two.change=5999;
		System.out.println(two.yanse);
        System.out.println(two.change);
        one.liaotian();
        one.tonghua("欧巴");
    }
}

在这里插入图片描述


两个引用指向同一对象
在这里插入图片描述


对象也可以作为方法的参数

public class Phone{
    
    
         String yanse;
		 int change;
		 
		 public void dianhua(String who){
    
    
		           System.out.println("给"+who+"打电话");
				   }
		public void liaotian(){
    
    
		System.out.println("hihihi");
		}
	}
	
public class Ph{
    
    
    public static void main(String[] args){
    
    
	
         Phone one = new Phone();
		 one.yanse="土豪金";
		 one.change=5999;
		 
		 moth(one);     //这里传的是one对象的地址;
		 }
	public static void moth(Phone pm){
    
     //参数是一个对象,Phone出来的pm;pm存储的是one对象的地址
	     Systrm.out.println(pm.yanse);
		 System.out.pirntln(pm.change);
		 }
	 }

在这里插入图片描述


对象作为返回值

当时用一个对象作为返回值的时候,返回值其实就是对象的地址值;

pbulic static void main(String[] args){
    
    
    Phone two = getphone();
	System.out.println(two.change);
	System.out.println(two.yanse);
	}
public static Phone getphone(){
    
    
    Phone one = new Phone();
	one.change=8999;
	one.yanse="玫瑰金";
	return one;
	}

在这里插入图片描述


局部变量与成员变量
1.定义位置不一样
局部变量:方法内部
成员变量:方法外部,直接写到了类中;//new …
2.作用范围不一样
局部变量:只有在方法中才能使用,出了方法不能用
成员变量:整个类全部都能用;
3.默认值不一样
局部变量:没有默认值,如果想要使用,必须进行赋值
成员变量:如果没有赋值,有默认值
4.内存位置不一样
局部变量:栈内存中
成员变量:堆内存中
5.生命周期不一样
局部变量:随着进栈诞生,出栈消失
成员变量;随着对象创建而诞生,随着垃圾回收消失;

*方法参数是局部变量


面向对象三大特征:封装、继承、多态

封装性:1.方法就是一种封装
2.关键字privote也是一种封装

     //封装就是将一些细节隐藏起来,对外界不可见

prinvate关键字使用

问题描述:定义persion的年龄时,无法阻止不合理的数据设置进来;
解决方案:用prinvate关键字将需要保护的成员变量进行修饰。

一旦修饰,本类当中任然可以直接访问。
但是超出本类就不能直接访问。

间接访问: 定义一对Getter/Setter方法

public class Persion{
    
    
         String name;
		 private int age;
		 
		 public void show(){
    
    
		     System.out.println("我叫" +name",年龄"+age);
			 }
			 
		 public void setAge(int num){
    
    
		     if(age<0||age>130)
			      age=num;
			 else
			   System.out.println("输入年龄不合法");
			   }
		public int getAge(){
    
    
		    return age;
			}
	}
			
public calss Dem{
    
    

    public static void main(String[] args){
    
    
	    Person per = new Person();
        
        person.name="赵丽颖";
        person.setAge(20);
        person.show();
}
}

private练习

public class Student(){
    
    

          private String name;
		  private int age;
		  private boolean male;
		  
		  public void setName(String nm){
    
    
		        name=nm;
		  }
		  
		  public String getName(){
    
    
		        return name;
		  }
		  
		  
		  public void setAge(int ae){
    
    
		        age=ae;
	      }
          public int getAge(){
    
    
                return age;
          }
		  
		  
		  
		  public void setMale(boolean b){
    
    
		          male=b;
		  }
		  public boolean isMale(){
    
    
                  return male;
          } 
	}	  
				
				
		          
public calss Demo0{
    
    
      public static void main(String[] args){
    
    
	       Student stu = new Student();
		   
		   stu.setName("鹿晗");
		   stu.setAge(20);
		   stu.setMale(true);
		   
		   System.out.println("姓名:"+stu.getName);
		   System.out.println("年龄:"+stu.getAge);
		   System.out.println("是不是爷们儿:"stu.isMale);
		   }
		  }

this指向

:解决重名问题

public class Person{
    
    
     String name;//我自己的名字
	 public void sayHello(String who){
    
                           //参数也是name时   
	      System.out.println(who+",你好","我是"+name);       //王思聪,你好。我是王思聪
		  }                                                  // 把后面的name改为 this.name.  就行了。就指成员变量我的名字
		  
	}
	
	          
	
public class Demo1{
    
    
    public static void main(String[] args){
    
    
	      Person per=new Person();
		  
		  person.name="王健林";
		  person.sayHello("王思聪");      //谁调用的方法,谁就是this   person调用的方法,this.name就是person.name 
		  }
}
-----------------------------------------------------------------------	  
 构造方法
 
 注意事项:
 1.构造方法的名称和所在的类名称完全相同
 2.构造方法不写返回类型。
 3.构造方法不能return
 4.没有编写构造方法时,编译器会送一个方法,什么都不做
 5.一旦编写至少一个方法,编译器将不再赠送
public class person {
    
    
    private String name;
    private int age;

    public person(){
    
                                //这里构造方法
        System.out.println("无参构造执行啦");
    }
    public person(String name,int age){
    
              //构造方法,有参数时可以直接赋值
        this.name=name;
        this.age=age;
        System.out.println("有参构造执行啦");
    }

    public void setName(String name){
    
    
        this.name=name;
    }
    public String getName(){
    
    
        return name;
    }

    public void setAge(int age){
    
    
        this.age=age;
    }
    public int getAge(){
    
    
        return age;
    }
}



public class Demo1 {
    
    

    public static void main(String[] args){
    
    
      //  person per =new person();
        System.out.println("++++++++++++");
        person per =new person("赵丽颖",20);
        System.out.println("姓名:"+per.getName()+",年龄"+per.getAge());
         per.setAge(22);
        System.out.println("姓名:"+per.getName()+",年龄:"+per.getAge());
    }
}

一个标准的类
1.所有成员变量编写都使用private关键字
2.每一个成员变量都编写一个Getter/Setter方法
3.编写一个无参构造
4.编写一个有参构造

其中几个重要的对象在内存中的状态 在主页有专门的博客

猜你喜欢

转载自blog.csdn.net/weixin_45511599/article/details/108564876
今日推荐