//匿名对象_1
class Car
{
//描述属性;
String color;
int number; //描述行为:
void run()
{
System.out.println(color+":"+number);
}
}
class CarDemo
{
//定义主函数,为了让程序运行起来。
public static void main(String[] args)
{
//创建Car.class类的对象。
//Car c = new Car(); //这个c是类类型的变量。类类型的变量一定
//指向对象。(引用型的变量也可以不指向
//变量,例如Car c = null)
//调用对象的成员。
//c.color = "red";
//c.number = 4;
//c.run(); //这两句可以简化。
//Car c = new Car();
//c.run(); //简化成如下写法,匿名对象就是为了简化书写。
new Car().run(); //这个对象没有名字,这就是匿名对象。 /*
记住:凡是简化的都有局限。 */ new Car().color = "red"; //这一句一旦在堆内存中执行完,
//因为没有任何对象去指向这个对象,
//这个对象就成为了垃圾,至于什么
//时候被垃圾回收机制回收这片内存,
//要等到多线程才能理解。
new Car().number = 4;
new Car().run(); /*
匿名对象有什么用呢?为了简化书写。
使用场景:当对象对对方法进行调用时,而且只调用一次时,
可以简化成匿名对象。
Car c = new Car(); c.run(); --->new Car().run(); Car c = new Car();
c.run();
c.run();
c.run();
是不可以简化成以下书写的。因为对象不同。
new Car().run();
new Car().run();
new Car().run();
记住:当对象需要调用多次成员的时候,不可以简化成匿名对象调用。
*/
}
}
 //匿名对象_2  匿名对象作为实参。
class Car
{
//描述属性;
String color;
int number; //描述行为:
void run()
{
System.out.println(color+":"+number);
}
} class CarDemo2
{
public static void main(String[] args)
{
/*
Car c = new Car();
c.color = "red";
c.number = 4;
c.run(); Car c1 = new Car();
c1.color = "red";
c1.number = 4;
c1.run();
*/ //以上代码的复用性差,只有对象不同,而调用的成员和赋值都相同。
//可以进行抽取,定义一个功能。将重复的代码进行封装。
Car c = new Car();
Car c1 = new Car();
show(c);//简化成show(new Car())
//show(c1);
show(new Car()); } //功能的结果是什么呢?没有具体值,所以是void.
//功能的未知参数是什么呢?对象不明确,可以将其定义成函数。
public static void show(Car cc)//Car cc = c
{
cc.color = "red";
cc.number = 4;
cc.run();
}
}
 //基本数据和引用数据参数传递过程。
class Demo
{
public static void main(String[] args)
{
int x = 4;
show(x);
System.out.println("x="+x);//打印结果为:x=4
}
public static void/*int*/ show(int x)
{
x = 5;
//return x;
}
} class Demo2
{
int x;
public static void main(String[] agrs)
{
Demo2 d = new Demo2();
d.x = 5;
show(d);//show(new Demo());
System.out.println("x="+d.x);//打印结果为x=6
}
public static void show(Demo d)
{
d.x = 6;
}
}

 //封装。

 /*
封装:
表现:
1,函数就是一个封装最基本的封装体。
2,类其实也是一个封装体。 从以上两点得出结论:
1,提高了代码的复用性。
2,隐藏了实现的细节,对外提供访问方式。
3,提高了安全性。
它也是面向对象思想的特征之一。
共有三个特征:封装,继承,多态。 举例:机箱。隐藏了板卡设备的细节,对外提供了插口以及开关等
访问内部细节的方式。
*/
//描述人。Person
//属性:说话:说出自己的年龄。 /*
总结:
类中不需要对外提供的内容私有化,包括属性和行为。 selectSort(int[] arr)
{
swap(){}
} bubbleSort(int[] arr)
{
swap(){}
} 重点:以后再描述事物,属性都私有化,并提供setXXX,getXXX方法对其进行访问。
*/
class Person
{
//属性。
private int age; //age就被修饰为了private私有,
//也就是被隐藏了,这就是封装的
//一种体现。 //行为。
void speak()
{
System.out.println("age="+age);
} /*
年龄已被私有,错误的值无法赋值,可是正确的值也赋值不了。不行。
咋办,安照之前所学习的封装的原理,隐藏后,还需要提供访问方式。
通过方法的方式,让其他程序访问到就可以了,更重要的是可以在方法
中加入逻辑判断。 记住:对变量的访问操作有两个动作;赋值(设置),取值(获取).
所以,对私有的变量访问的方式就是set变量,get变量--->setAge,getAge.
*/ //定义一个对age赋值的方法,
void setAge(int a)
{
//加入逻辑判断。
if(a>0 && a<130)
age = a;
else
// System.out.println("对不起,您的年龄数值"+a+"是非法的。");
// throw new RuntimeException("对不起,您的年龄数值"+a+"是非法的。");//异常。一旦出现,程序结束,需要修改代码。
} //定义一个获取age值得方法。
int getAge()
{
return age;
}
} class PersonDemo
{
public static void main(String[] args)
{
//测试Person.class.
//创建对象。
Person p = new Person(); /*
赋值-20是可以的,因为age属性是int型的,但是不符合现实生活中的
事物属性。 不让它访问就可以了,怎么在代码中体现呢?需要使用一个java中的关
键字private。(私有 修饰符)
*/
// p.age = -20;//age不能再Person类以外的程序中直接访问了。 //演示:对age设置和获取方法的体现。
p.setAge(-20);
int a = p.getAge();
System.out.println("a="+a);
// p.speak();
}
} /*
什么叫做封装:
隐藏了实现细节,提供对外访问的方式,这才叫封装,而私有仅仅是
封装的一种体现。
*/
 //面向对象---构造函数。
/*
需求:为了描述事物更准确,发现事物对应的很多对象一创建时,
就有了一些基本的属性等内容。一些初始化的数据,在类中
该如何完成。 通过Java中的另一个小技术完成:就是构造函数,对象本身就是构造出来的。
构造时,需要做一些动作,这些应该定义在函数内。 构造函数有什么用?可以在对象创建时对对象进行初始化。
1,没有返回值类型。因为构造对象,创建完成就结束,不需要结果。void也不要写
因为要区别于一般函数。
2,构造函数的名字和类名一样。(构造函数就是给类在创建对象是而提供的)
3,没有具体的返回值。
接下来,安照以上三点,在Person类中定义一个构造函数。
Person类的对象一创建就具备了姓名。 发现了问题.
没有学习构造函数时,对象也被创建出来了,那么该对象是否有被构造呢?后者
说是否有调用构造函数呢? 是的,必须调用!
那么类中那个构造函数是什么呢? class Person
{
//Person(){}//默认的空参数的构造函数。
} main()
{
Person p = new Person(); //这个已经调用了Person类中的空参数的构造
//函数,类中有定义构造函数吗?有的,只要
//定义了一个类,该类中就有一个空参数的构造
//函数,是编译器编译时自动加上的。 //注意:如果在类中自定义了构造函数,那么默认
//的空参数的构造函数就不添加了。防止冲突。 //原理:没有定义对象的初始化过程,编译器会添加一个默认的
//初始化过程,如果定义了指定的初始化过程,默认的就不添加了。
} 什么时候需要些构造函数呢?
如果对象一初始化就具备了一些内容,这需要写构造函数,在对象被创建的时候,用这个构造函数来初始化这个对象。
如果对象初始化时不具备内容,这不需要写构造函数。用setXXX来指定。 构造函数细节:
1,一个类可以有多个构造函数,它们的存在是以重载的形式体现的。
2,构造函数中也是有return语句的,用于结束初始化动作的。
3,构造函数是否能被private修饰呢? 能。作用就是,其他程序无法创建该类的对象。
但是在本类里面还是可以创建对象的。
class Person
{
private person(){}//私有化构造函数。
}
main()
{
Person p = new Person(); //创建对象无法初始化
} 构造函数和一般函数的区别:
1,写法不一样。
2,运行上有差别,对象一创建就会调用对应的构造函数。
一般方法是对象创建后,才会调用所需的一般函数。
问:有了构造函数初始化姓名,那么还需要setName方法吗?需要,因为对象创建之后,
如果需要对数据进行修改,可以通过set完成。
3,构造函数在对象创建时,仅调用一次(因为初始化动作只做一次,而且先执行)。而一般方法可以被调用多次。
class Person
{
//这个类里面还有一个默认的空参数构造函数。
void Person(){}//这不是构造函数,这是一般函数。
}
main()
{
Person p = new Person();
}
*/
class Person
{
//属性:姓名,年龄
private String name;
private int age; //一初始化,既没有姓名,又没有年龄。
Person()
{ } //return语句用于结束初始化动作演示:
// Person(int a)
// {
// if(a<0)
// return; //return语句用于提前结束初始化动作。
// age = a;
// } //定义构造函数。
Person(String n)
{
//将接受到的值赋值给对象的name。
this.name = n;
} //一初始化,既有姓名,又有年龄。
Person(String n,int a)
{
name = n;
age = a;
} //行为:
public void speak()
{
System.out.println("name="+this.name+",age="+age);
}
}
class PersonDemo2
{
public static void main(String[] args)
{
Person p1 = new Person();
Person p = new Person("lisi"); //对象创建时,必须会调用对应的构造函数。
Person p2 = new Person("wangwu",18);
p.speak();
p1.speak();
p2.speak();
}
}
 //构造函数——之间的调用。
/*
当构造函数之间进行互相调用时,该如何解决呢? 构造函数是对象初始化时调用的。
给哪个对象初始化呢?通过this关键字来明确被初始化的对象。 在构造函数中调用其他构造函数的格式:this(实参列表);就会调用对应的构造函数。 小结:
this到底代表什么呢?
this就代表对象,代表哪个对象呢?哪个对象调用了this所在的函数,this就代表了哪个对象。
*/
class Person
{
private String name;
private int age;
Person()
{ }
//初始化姓名。
private Person(String n)
{
name = n;
// cry(); //构造函数调用一般方法,
}
//初始化姓名和年龄,既然第二个构造函数已经做完了构造姓名的动作,这个构造函数就没有必要做了。直接调用就好了。
Person(String n,int a)
{
this(n); //thsi代表当前对象,//这是在调用一个字符串参数的构造函数。
//注意:调用其他构造函数的语句,必须定义在构造函数的第一行,
//原因是,初始化动作必须要先执行。
// name = n;
age = a;
} //一般方法,
void cry()
{ }
} class PersonDemo3
{
public static void main(String[] args)
{ }
}

 //this关键字的应用。
/*
this关键字的另一个作用:
可以用this标识符哪个变量是成员变量。这个标识符可以省略不写。
但是,当局部变量和成员变量同名时,this不能省略,因为要用this
标识成员变量。
*/ class Person
{
private String name;
private int age; Person(String name,int age)
{
this.name = name;
this.age = age;
} public void speak()
{
String name = "haha";
System.out.println("name="+this.name+",age="+this.age);
} public void method()
{
this.speak();//这个方法可以省略,因为方法如果同名的话还可以用参数列表来区分。
} //定义一个功能,判断两个人是否是同龄人。
//1,明确结果,boolean 2,明确未知内容,1个,Person类型。
public boolean equalsAge(Person pp)
{
/*
if(pp.age == this.age)//当函数中使用到了调用该函数的对象时,用this表示这个对象。
return true;
return false;
*/
// return (pp.age == this.age)?true:false;
return pp.age == this.age;
}
} class PersonDemo4
{
public static void main(String[] args)
{
/*
Person p = new Person("lisi",20);
p.speak();
Person p1 = new Person("xiaoming",24);
p1.speak();
p1.method();
*/
Person p = new Person("lisi",20);
boolean l = p.equalsAge(new Person("xiaoming",21));
System.out.println(l);
}
}

《java笔记 day07》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. mysql数据库回滚

    在应用$mysqli时,因没常用到数据回滚,老忘,整理下,做个记录. $mysqli->autocommit(FALSE);//自动提交设置关闭 $mysqli->query(" ...

  2. android 客户端 RSA加密 要注意的问题

    针对java后端进行的RSA加密,android客户端进行解密,结果是部分乱码的问题:注意两点,编码问题和客户端使用的算法问题 即:都使用UTF-8编码,Base64使用一致,另外,使用下面的代码在后 ...

  3. sublime2配置python环境

    只需要在以下文件写入python编译器的路径: 在工具栏点击Preferences,打开Browse Packages.在打开的文件夹中找到Python,并打开这个文件夹.找到文件Python.sub ...

  4. fushioncharts的使用教程

    FusionCharts 是使用javascript 实现统计图表的js组件:其官网地址:http://www.fusioncharts.com.其早期版本FusionCharts Free 是基于f ...

  5. IE和主流浏览器

    1.添加事件 addEventListener 主流 attachEvent     IE 2.移除事件 removeEventListener detachEvent 3.获取事件对象 event ...

  6. js字符串函数之indexOf()

    indexOf 返回字符串中指定字符首次出现的位置 var str="hello, I am Miss bean!"; str.indexOf("l")//结果 ...

  7. JS实现会动的小车

    2015-06-05怎么说呢,我想要实现的功能是很简单的,但是过程中,遇到不少问题. 我要实现的功能是页面右侧有辆小车,鼠标滚动或者拉动滚动条,小车消失,在底部点击“返还顶部”按钮后,页面缓慢向上滚动 ...

  8. jquery.query.js 插件的用法

    转载自:http://www.cnblogs.com/dachie/archive/2010/09/16/1827840.html 代码如下: var url = location.search; & ...

  9. OpenTSDB介绍——基于Hbase的分布式的,可伸缩的时间序列数据库,而Hbase本质是列存储

    原文链接:http://www.jianshu.com/p/0bafd0168647 OpenTSDB介绍 1.1.OpenTSDB是什么?主要用途是什么? 官方文档这样描述:OpenTSDB is ...

  10. ACTIVITI 研究代码 之 模版模式

    模板方法模式需要开发抽象类和具体子类的设计师之间的协作.一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤.代表这些具体逻辑步骤的方法称做基本方法(primitive ...