-----------android培训、java培训、java学习型技术博客、期待与您交流!-----------
1、 什么是面相对象
使用对象编程,相对面向过程而言
三大特征:封装(encapsultion)继承(inheritance)、多态(polymorphism)。
2、 什么是对象
使用类创建的一个实例就是对象,一个类可以创建多个实例,每一个实例都是这个类的对象。
3、 什么是类
类是用来描述一类事物的,可以理解为一类事物的设计图,类名是名词,首字母大写(而方法都是动词,首字母小写)
如:帐号、人
4、 怎么用类描述事物
在类中使用成员变量描述事物的特征,
在类中使用方法描述事物的行为
5、 怎么创建对象
使用new关键字和指定类名来创建一个对象
例如:Person p = new Person();
这句话先在堆内存中创建了一个对象,然后栈内存中创建一个变量引用了对象的地址。
6、怎么使用对象
创建对象后,使用变量引用对象
通过变量.变量名访问对象中的特征和行为
7、实例:
class Demo_Object {
public static void main(String[] args)
{
Person p=new Person();//使用new类名()创建对象
p.name="张三";//给对象的变量赋值
p.age=26;
System.out.println(p.name);
System.out.println(p.age);
p.eat();//调用对象的方法
p.sleep();
p.speak();
}
}
class Person
{
//在类中使用成员变量描述事物的特征
String name;
int age;
//在类中使用方法描述事物的行为
void eat(){
System.out.println(name+"吃饭");
}
void sleep(){
System.out.println(name+"睡觉");
}
void speak(){
System.out.println(name+"今年"+age+"岁了");
}
}
分析:
当编译Demo_Object.java,时候,在内部发现需要Person类,此时虚拟机会查找Person.class,如果没有找到就会在当前目录查找Person.java,找到了后,会先编译它,然后得到Person.class,才编译Demo_Object.java。
8、成员变量和局部变量的区别?
成员变量:
①成员变量定义在类中,在整个类中都可以被访问。
②成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。
③成员变量有默认初始化值。
局部变量:
①局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。
②局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。
③局部变量没有默认初始化值。
9、成员变量初始化
当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。基本数据类型初始化值为0,引用数据类型初始化值为null。
成员变量类型
|
初始值
|
byte
|
0
|
short
|
0
|
int
|
0
|
long
|
0
|
float
double
|
0.0F
0.0D
|
char
boolean
|
‘\u000’
False
|
其他变量类型
|
null
|
10、举例 创建对象、使用对象
class Person { // 类名: 名词, 首字母大写
private String name; // 在类中使用成员变量变量描述事物的特征
private int age; // 变量名: 首字母小写
Person() {
System.out.println("Person类的构造函数: Person()");
}
Person(String n, int a) {
System.out.println("Person类的构造函数: Person(String name, int age)");
name = n;//局部变量/临时变量
age = a;//局部变量
} //提供set方法,让其他类中可以设置成员变量
public void setName(String name){
this.name=name;
}
//提供一个get方法,让其他类中的可以获取成员变量
public String getName(){
return name;
}
// 在类中使用成员方法描述事物的行为 void eat(){ System.out.println(name + "吃饭, 雕爷牛腩");
}
class Demo_Object
{
public static void main(String[] args)
{
Person p= new Person();//使用new类名()创建对象,P就是一个引用变量,指向该类的对象
p.setName("张三三");//给对象的变量赋值 System.out.println(p.getName());
p.eat();//调用对象的方法
}
结果:
11、匿名对象
我们可以不定义变量引用对象,使用new关键字创建对象后直接使用,这样的对象没有名字,所以叫匿名对象。
new person().eat();//匿名对象
通常我们需要使用一个对象且只使用一次的时候,就可以使用匿名对象。比如将对象作为一个参数传递给另外一个函数。
匿名对象因为没有任何引用到达,在使用一次之后即成为垃圾。
举例:匿名对象
class Person
{
String name="胡歌";
int age=26;
void speak() {
System.out.println("我叫" + name + ", 今年" + age + "岁了");
}
}
class Demo_Person
{
public static void main(String[] args){
//对对象仅调用一次时,可以是用匿名对象
new Person().speak();
//匿名对象可以做为实参进行传递
show(new Person());
}
public static void show(Person p){
p.name="";
p.age=20;
System.out.println(p.name+"......"+p.age);
}
}
结果:
12、构造函数
是一个特殊的函数
没有返回值类型,注意:没有返回值类型不等同于void。
函数名和类名一致,大写(而一般方法通常:返回值类型+小写方法名,不过写成和类名相同也没错,但不推荐)
在使用new关键字创建对象之后自动调用。
在构造函数的第一天语句,this(参数列表)可以调用当前类的其他构造函数(递归构造器调用==死循环,如无参的调有参的,有参的调无参的,没完了)
一个类如果没定义任何构造函数,会默认生成一个无参的构造函数(隐式的),没有任何代码,如果定义了有参构造函数,则会覆盖掉这个无参构造函数;如过还想调用无参的构造函数,则需要同时定义无参和有参构造函数。
举例:构造函数
class Person
{
String name="胡歌";
int age=26;
//定义一个Person类的构造函数
//构造函数,而且是空参数的
Person(){
System. out.println("空参数的构造函数" );
}
void speak() {
System.out.println("我叫" + name + ", 今年" + age + "岁了");
}
}
class Demo
{
public static void main(String[] args){
//构造函数:构建创造对象时调用的函数
//作用:可以给对象进行初始化
Person p = new Person();
p.speak();
}
}
结果:
13、this关键字
(1)、在方法中的局部变量和成员变量同名的时候,如果直接使用变量名调用,会优先访问局部变量,没有才会访问成员变量,如果希望直接访问成员变量,则用this.变量名
(2)、this(参数列表)可以调用当前类的其他构造函数
举例 this关键字使用
class Person
{
String name;
int age;
//定义一个Person类的构造函数
Person(String name){
//通过this区分成员变量和局部变量
this.name=name;
}
Person(String name,int age){
//this也可以用于在构造函数中调用其他构造函数
this.name=name;
this.age=age;
}
void speak() {
System.out.println("我叫" + this.name + ", 今年" + this.age + "岁了");
}
}
class Demo
{
public static void main(String[] args){
//构造函数:构建创造对象时调用的函数
//作用:可以给对象进行初始化
Person p1 = new Person("胡歌");
p1.speak();
Person p2 = new Person("王菲",40);
p2.speak();
}
}
结果:
附:通过this在构造函数中调用其他构造函数的时候,只能定义在构造函数的第一行,因为初始化动作要先执行,否则就会报错
14、static关键字
什么是static关键字?
代表静态的,它可以用来修饰类的成员(变量,方法,代码块,内部类)
被static修饰的成员,随着类的加载而加载、优先于对象存在、被所有对象所共享、可以直接被类名调用。
举例 static关键字
class Demo_SellTicket
{
public static void main(String[] args)
{
TicketSeller seller1=new TicketSeller();
TicketSeller seller2=new TicketSeller();
seller1.name="张三";
seller2.name="李四";
seller1.sell();
seller2.sell();
seller1.sell();
}
}
class TicketSeller
{
String name;
static int ticketCount=100;//当前某个数据需要共享的时候,就应该定义
public void sell(){
System.out.println("售票员"+name+"卖出了一张车票,剩余"+--ticketCount+"张");
}
}
结果:
15、主函数
//主函数是Java程序的入口,在虚拟机启动的时候,
自动找主函数运行
// public代表公有的,所有的类都能访问的,
为了能让虚拟机访问到,所以加上public
// static代表静态的,虚拟机调用主方法时,
不用创建该类对象,可以直接使用
// void代表返回值为空,虚拟机调用该方法后不需要返回值
// main代表函数的名字,虚拟机启动的时候就找这个名字
//String[] args代表运行方法时传入的参数, 启动虚拟机的时候是可以传入参数的
class Demo_Main
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
附:当类不需要独立运行时候可以不加主函数
-----------android培训、java培训、java学习型技术博客、期待与您交流!-----------
分享到:
相关推荐
b站黑马程序员java视频学习笔记
Javaweb基础全课程笔记,黑马程序员上课笔记,主要涉及前端 jsp和servlet等
正在自学黑马程序员Java全套,目前只学了Javase,接下来是Javaweb,把自己整理的笔记分享一下。
day01_Object类、常用API day02_Collection、泛型 day03_List、Set、数据结构、Collections day04_Map,斗地主案例 day05_异常,线程 day06_线程、同步 day07_等待与唤醒案例、线程池、Lambda...Java基础小节练习题答案
观黑马程序员JAVA学习笔记
黑马程序员java培训就业班笔记:day10总结
集合—黑马程序员Java学习笔记
本压缩包包含很多java基础题,笔记,都是来自黑马论坛,为java学习者提供复习资料,同时帮助需要考入黑马的同学学习。
黑马程序员Java基础视频辅导班Day01上课笔记
黑马程序员Java基础视频辅导班课堂笔记总结Day08
IO—黑马程序员Java学习笔记.rar
B站黑马程序员Python教程学习笔记
黑马程序员java培训就业班笔记:day06总结
黑马程序员Java基础视频辅导班课堂笔记总结Day09
黑马程序员基础班精华笔记总汇
黑马程序员的学习笔记,java基础
2018年黑马程序员全套教程java基础第1天 jdk9教程,idea的使用等,java小白的最优之教程
黑马程序员python基础班教程笔记:(51)异常简介全文共7页,当前为第1页。黑马程序员python基础班教程笔记:(51)异常简介全文共7页,当前为第1页。异常 黑马程序员python基础班教程笔记:(51)异常简介全文共7页,当前...
黑马程序员java培训就业班笔记:day05总结