JAVA学习第7-8天(2合1)

1.面向对象
要想了解面向对象,就要先了解面向过程,面向过程的代表语言是C语言,面向过程就是你想要完成一个需求,必须把完成这个需求的每一步走好,就比如你想去河对面,你就要先造船或者造桥,这就是面向过程,而面向对象时,就比如你想要过河,已经存在桥或者河了,你只需要把他们找出来供你驱使就行了,这就是面向对象.
举例,以学生为对象,学生的属性(成员变量)有:姓名,年龄,性别,学号;
行为有(成员方法):学Java,睡觉,吃饭
//定义一个学生类
class Student{
//成员变量
String name ;
String gender;
int age ;
String id;

//成员方法
//玩游戏
public void playGame(){
	System.out.println("学习无聊了,玩绝地求生游戏");
}

public void sleep(){
	System.out.println("学习累了,需要睡觉...");
}

public void  eat(){
	System.out.println("学习饿了,需要吃饭...");
}

}
class StudentDemo{
在这里插入图片描述
public static void main(String[] args){
//创建学生类具体的对象
//类名 对象名 = new 类名() ;
Student s = new Student();
//对象名.成员变量;
//null----null-----0-----null
System.out.println(s.name+"----"+s.gender+"-----"+s.age+"-----"+s.id) ;//为了方便,使用输出语句输出成员变量
//应该给当前对象s的成员赋值
s.name = “张无忌” ;
s.gender = “男” ;
s.age = 39 ;
s.id = “9527” ;
//张无忌----男-----39-----9527
System.out.println(s.name+"----"+s.gender+"-----"+s.age+"-----"+s.id) ;

}

}
其中:Student s = new Student() 完成了以下几件事情:
1)将Student.class 字节码文件加载进内存 ;
2)Student s---------->进栈内存开辟空间 ;
3)new Student(); ------>在堆内存中申请空间;
4)执行Student()无参构造方法,进行系统默认初始化
5)执行显示初始化通过s.name,s.genfer …给成员变量赋值 ;
6)初始化完毕,在堆内存中产生一个空间地址值
7)将当前堆内存中,空间地址值赋值给栈内存中的变量s
2.成员变量和局部变量的区别
1)在类中的位置不同
成员变量 :类中方法外
局部变量 :方法内或者方法声明上
2)在内存中的位置不同
成员变量 :堆内存
局部变量 :栈内存
3)生命周期不同
成员变量 :随着对象的存在而存在,随着对象的消失而消失
局部变量 :随着方法的调用而存在,随着方法的调用完毕而消失
4)初始化值不同
成员变量 :有默认的初始化值
局部变量 :没有默认的初始化值,必须先定义,赋值,才能使用。

3.匿名对象

匿名对象:就是没有名字的对象。
是对象的一种简化表示形式
3.1匿名对象的两种使用情况
1)对象调用方法仅仅一次的时候
2)作为实际参数传递

4封装概述
是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:
隐藏实现细节,提供公共的访问方式
提高了代码的复用性
提高安全性。
封装原则:
将不需要对外提供的内容都隐藏起来。
把属性隐藏,提供公共方法对其访问。
通过学生案例,给年龄赋值为负数引出数据问题。通过private解决这个问题。最后
这就是封装。

class Student {
public void show() {
System.out.println(“show”);
}
}
class StudentDemo {
//如果参数是一个类名,那么实际需要的是一个具体的对象
public void method(Student s) {
s.show();
}
}
class StudentTest {
public static void main(String[] args) {
StudentDemo sd = new StudentDemo();
Student s = new Student();
sd.method(s);
//多个匿名对象的写法
new StudentDemo.method(new Student());
}
}
1:new Student().show();
2:new StudentTest().method(new StudentDemo());
private关键字
private关键字:
是一个权限修饰符。
可以修饰成员(成员变量和成员方法)
被private修饰的成员只在本类中才能访问。
private最常见的应用:
把成员变量用private修饰
提供对应的getXxx()/setXxx()方法

//一个标准类的写法
class Student2{
//成员变量
//姓名
private String name ;
//性别
private String gender ;
//年龄
private int age ;
//学号
private String id;

//提供对外的公共访问方法:seXXX()/getXXX()
//给name设置
public void setName(String n) { //n 局部变量
	name = n ;
}

//获取年龄的值
public String getName(){
	return name ;
}

//性别的设置和获取
public void setGender(String g){
	gender = g ;
}

public String getGender(){
	return gender ;
}

//年龄
public void setAge(int a){
	age = a ;
}
public int getAge(){
	return age ;
}

//id学号
public void setId(String i){
	id = i ;
}

public String getId(){
	return id ;
}

//定义成员方法:显示成员变量
public void show(){
	System.out.println("姓名是:"+name+",她的年龄是:"+age+",性别是: "+gender+",她的学号是:"+id) ;
}

}
//测试类
class StudentTest{
public static void main(String[] args){

	//需求: 给学生事物的具体对象的成员变量进行赋值
	//创建学生对象
	Student2 s = new Student2() ;
	
	//私有的成员不能访问
	//s.name = "张无忌" ;
	//s.age = 38 ;
	//给name赋值
	s.setName("张无忌") ;
	s.setGender("男") ;
	s.setAge(38) ;
	s.setId("9527") ;
	//姓名是:张无忌,她的年龄是:38,性别是: 男,她的学号是:9527
	s.show() ;
	System.out.println("--------------------------");
	System.out.println(s.getName()+"----"+s.getGender()+"----"+s.getAge()+"-----"+s.getId());
	
}

}
this:代表所在类的对象引用
记住:
方法被哪个对象调用,this就代表那个对象
什么时候使用this呢?
局部变量隐藏成员变量,即,局部变量和成员变量同名时,如下:
class Student{
//private修饰
private String name ; //此处系统给定的默认值
private int age ;

//提供对外公共访问方法setXXX()/getXXX()
//public void setName(String n){
//public void setName(String name){    //当局部变量名称和成员变量名称一致的情况,采用就近原则!
//	name = name ;
//}

//使用this改进
public void setName(String name){   
	this.name = name ;
}

public String getName(){
	return name ;
}

//public void setAge(int a){
//public void setAge(int age){
//	age  = age ;
//}

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

public int getAge(){
	return age ;
}

//学生学习...
public void study(){
	System.out.println("Good Good Study,Day Day Up...");
}

//将成员变量输出
public void show(){
	System.out.println(this.name+"----"+this.age) ; //隐藏this
}

}

//测试类
class StudentTest{

public static void main(String[] args){
	
	//创建学生类对象
	Student s = new Student() ;
	//s.name = "张无忌" ;
	
	s.setName("张无忌") ;
	s.setAge(30);
	//输出
	//null---0
	System.out.println(s.getName()+"---"+s.getAge()) ;
	s.show() ;
}

}

4构造方法
4.1构造方法作用:给对象的数据进行初始化
4.1构造方法格式
1)方法名与类名相同
2)没有返回值类型,连void都没有
3)没有具体的返回值
4)构造方法注意事项
如果你不提供构造方法,系统会给出默认构造方法
如果你提供了构造方法,系统将不再提供
构造方法也是可以重载的
4.3:虽然构造方法没有返回值,但是也可以写一个return,在最后写return;这种做法在任何void类
型的方法最后都是没有问题的。
4.4:举例,构造方法的作用给成员变量赋值
类的成员方法
4.4方法具体划分:
根据返回值
有明确返回值方法
返回void类型的方法
根据形式参数
无参方法
带参方法
class Student{
//成员变量
private String name ;
private int age ;

//构造方法
//无参构造
public Student(){}

//有参构造
public Student(String name,int age){
	this.name = name ;
	this.age = age ;
}

//成员方法:
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 void study(){
	System.out.println("学习Java...") ;
}

}

//测试类
class StudentTest{
public static void main(String[] args){

	//方式1:无参构造方法+setXXX() 
	Student s = new Student() ;
	s.setName("张无忌") ;
	s.setAge(27) ;
	s.study();
	System.out.println(s.getName() +"---"+s.getAge()) ;
	
	System.out.println("---------------------");
	//方式2:通过有参构造进行赋值
	Student s2 = new Student("扬过",29) ;
	System.out.println(s2.getName() +"---"+s2.getAge()) ;
	s2.study();
}

}
5,static关键字:前面创建的对象方法中都没有加static,是因为
5.1static的特点:
1)随着类的加载而加载
想一想:main() ---->public static void main(String[] args){}
2)static修饰的变量/方法,优先与对象存在!
回想:对比Student s = new Student(); 完成了哪些事情

	3)被static修饰的具有共享,共用(多个对象共同访问同一个static修饰的成员变量)
		什么时候去使用static关键字... 
		
		举例:类似的这些,都是用static修饰
			班级编号(共享)
			饮水机 (共享)
			水杯(不能被共享的)
	4)被static修饰的变量或者成员方法,可以直接被类名调用 
5.2	static关键字的注意事项:
		1)在静态的方法中是没有this关键字的!
			静态优先于对象存在
		2)一句话:
			静态只能访问静态的变量/方法
		非静态的成员方法:
					可以访问非静态成员变量,静态的成员变量
					可以访问静态的成员方法,非静态的成员方法
					
		5.3  静态的成员方法:
				只能访问静态成员变量,只能访问静态成员方法
				class Demo2{

public int num = 10 ;
public static int num2 = 20 ;	//和类有关系

public void method(){
	System.out.println(num) ;//10     this.num
	System.out.println(num2) ;//20
}

public static void function(){
	//System.out.println(this.num) ; //静态方法中不能存在this
	//System.out.println(num) ;//无法从静态上下文中引用非静态 变量 num
	System.out.println(num2);
}

//非静态的成员方法
public void function2(){
	function() ;
	method() ;
}


public static void show(){
	//method() ;
	function();
}

}

class StaticDemo2{
public static void main(String[] args){
Demo2 d = new Demo2() ;
d.method() ;

	d.function() ;
	System.out.println("----------");
	d.function2() ;
	System.out.println("----------");
	d.show() ;
	
	System.out.println("----------");
	int result = sum(100,50) ;
	System.out.println(result) ;
}

//求两个数据之和
public static int sum(int a,int b){
	return a+b ;
}

}
例子中num2就是static修饰的静态变量,它可以同时应用在d.function() ;d.function2() ;d.show() ;中.
6.main方法中各个成员的解释如下:
main方法的解释:

	public static void main(String[] args):	jvm识别的程序的入口
	
	public :权限修饰符,公共的,公开的,保证访问权限足够大
	static:静态修饰,和类有关系,优先对象存在
	void:由jvm调用,没有具体的返回值类型 ,使用void代替
	main:方法名, 编程语言,大部分都是有一个程序的入口,Java叫main(主方法)
	String[] args: 接收字符串数组,参数名args,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值