引入概念
-
小花猫的问题:老奶奶养了两只猫:①小白,2岁,白色 ②小花,3岁,黄色
问题:请设计程序,当输入名字的时候输出对应的猫的花色,年龄。(出现的问题,猫咪不能用我们已经知道的
数据类型来表示)
-
类就是指:猫这个动物类
-
对象:小白这个整体(名字,年龄,花色,听到铃铛就去吃饭,喵喵叫)
-
属性:(指的是对象的特征)名字,年龄,花色
-
方法:(对象具有的行为)听到铃铛就去吃饭,喵喵叫
-
-
总结
-
学习int double String数据类型(java里面自带的) 而类可以看作是自定义的数据类型
-
对象就是我们具体的案例
-
入门
-
小花猫的问题:老奶奶养了两只猫:①小白,2岁,白色,小白叫 ②小花,3岁,黄色,小花叫
问题:请设计程序,当输入名字的时候输出对应的猫的花色,年龄,叫法。
import java.util.Scanner; public class Text { public static void main(String[] args) { cat_ []cats = new cat_[2]; cats[0] = new cat_(); cats[1] = new cat_(); cats[0].name = "小白"; cats[0].age =2; cats[0].color = "白色"; cats[1].name = "小花"; cats[1].color = "黄色"; cats[1].age = 2; Scanner scan = new Scanner(System.in); String name = scan.next(); boolean flag = false; for (int i = 0 ;i<cats.length;i++){ if (name.equals(cats[i].name)){ cats[i].show(); flag = true; } } if (!flag){ System.out.println("没找到"); } } } class cat_{ String name; int age; String color; void call(){ System.out.println(name+"叫"); } void show(){ System.out.println(name); System.out.println(age); System.out.println(color); call(); } }
内存分配
-
解析:b=a,是a和b有相同的地址,所以b.name=a.name=小明。b.age改变了相同的地址下的age,所以a也跟着改变了。b=null,断掉了连向堆的线,也就是说在堆里面没有b的空间,只是一个变量名。输出b.age出错。
-
答案:小明 200 b.age出现异常
重载
-
重载的基本介绍:java中允许同一个类中,多个同名方法同时存在,但要求形参列表不一致!
-
使用细节(来求和sum举例)
-
方法名:必须相同(都是sum)
-
形参列表:必须不同(参数名无要求)
void sum(int a ,int b)和void sum(int m,int n)不构成
-
返回值:无要求(一个int 一个void不构成重载)
void sum(int a ,int b)和int sum(int m,int n)不构成
-
public class text {
public static void main(String[] args){
Meth meth = new Meth();
meth.m (10);//输出
meth.m (1,4);
meth.m ("xiaoming");
}
}
class Meth{
public void m (int a){
System.out.println(a*a);
}
public void m (int a1,int a2){
System.out.println(a1*a2);
}
public void m(String a){
System.out.println(a);
}
}
public class text {
public static void main(String[] args){
Meth meth = new Meth();
System.out.println(meth.max(12,19));
System.out.println(meth.max(12.9,19.8));
System.out.println(meth.max(12.2,19.3,12.1));
}
}
class Meth{
public int max(int m,int n){
return m>n?m:n;
}
public double max(double m,double n){
return m>n?m:n;
}
public double max (double a ,double b ,double c){
double more;
more = a>b?a:b;
return more>c?more:c;
}
}
作用域的基本使用(*)
局部变量和全局变量
-
全局变量:也就是属性作用域为整个cat类,,cry eat等方法使用属性
-
局部变量:也就是除了属性之外的其他变量,作用域在定义它的代码块中
-
全局变量可以不赋值,因为有默认值,局部变量必须赋值,才能使用因为没有默认值
class cat{
int a;//全局
void cry(){
int b;//局部
System.out.println(a);//输出的是默认值0
System.out.println(b);//报错了
}
}
class dog{
void eat(){
cat cat_1 = new cat();
System.out.println(cat_1.a);
}
}
-
细节
-
属性和局部变量可以重名,访问时遵循就近原则
-
在同一个作用域中,比如在同一个成员方法中,两个局部变量不能重名
-
当执行方法时,局部变量会创建,当方法执行完毕后,局部变量销毁,但是属性(全局变量)仍然可以使用
-
全局变量可以加修饰符,局部变量不可以加修饰符
-
全局变量可以直接在本类当中使用,在其他类中使用要引用
-
构造器
-
基本介绍:构造方法也叫做构造器,是类的一种特殊的方法,它的主要作用是完成对新对象的初始化
-
特点和注意
-
方法名和类名相同
-
没有返回值,不用加void
-
在创建对象时,系统会自动的调用该类构造器完成对象的初始化
-
一个类可以定义多个不同的构造器,即构造器重载
-
如果程序员没有定义构造器,系统会自动给类生成一个默认无参构造器
-
一旦定义了自己的构造器,默认的构造器就会覆盖,就不能使用默认的无参构造器,除非显式的定义一下,即cat(){}
-
-
入门
class Cat{
String name;
String color;
int age;
void Shout(){
System.out.println(name+"叫");
}
void show(){
System.out.println(name+" "+color+" "+age+"岁");
Shout();
}
public Cat(String n,String c,int a){
name = n;
color = c;
age = a;
}
public Cat(){
}
}
public class first {
public static void main(String[] args) {
Cat cat3 = new Cat("小黑","黑色",3);
cat3.show();
}
}
this
-
基本介绍:java虚拟机会给每个对象分配this,代表当前对象。哪个对象调用,this就代表哪个对象
public person (String name , int age ){
this.name = name //this表示当前对象的属性
this.age = age;
}