类:具有相同特性(状态)和行为(功能)的对象的抽象就是类,因此,对象的抽象就是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。 类具有特性:对象的状态,用成员变量来描述。 类具有功能:对象的为用方法来描述.什么是类:类是对象的类型/模板。创建一个对象就是使用一个类作为构建该对象的基础不过在面向对象编程里,我们肯定是先有类 如果没有类,对象就没有实例化。
--------------------------------分割线-----------------------------------------------------
package com.anonymous.javase.day02;
public class Demo_Day02 {
//类的定义
/**
* [修饰符] class 类名{
* 0~N个字段;
* 0~N个方法;
* }
*/
String name = "杰克";
int age = 23;
public static void f1(){
System.out.println("测试函数1");
}
//主程序,运行所有程序的入口
public static void main(String[] args) {
}
}
package com.anonymous.javase.day02;
//对象的创建和字段,方法的调用
public class Demo2_day02 {
String name ;
int age ;
public void f1(){
System.out.println("name"+name+"\n"+"age:"+age);
}
public static void main(String[] args) {
//创建对象
Demo2_day02 demo = new Demo2_day02();
demo.name = "杰克";
demo.age = 34;
demo.f1();
}
}
----------------------------
package com.anonymous.javase.day02;
//构造器的重载和自定义
public class Demo3_day02 {
String name;
String age;
static String gender ;
//static关键字的使用
/**
*static代表全局的修饰符
*调用static修饰的方法或者字段,直接类名调用即可
*/
/**
* 为何使用static修饰
* 比如这eat(表示吃的方法),
* 如果同时有5个对象,这样我每个对象都要去写一次eat方法
* 5个对象既然都要吃,就把他们设计成共享的数据,
* 让一个对象创建,其他对象共享就行了
*/
public static void eat(){
System.out.println("gender"+gender+"\n"+"吃");
}
//无参构造器
public Demo3_day02(){
}
//有参构造器
public Demo3_day02(String name ,String age){
}
/**
* 构造的规则:
* 修饰符 构造器名([参数]...[参数]){
* }
*/
public static void main(String[] args) {
//有参构造器对象
Demo3_day02 demo1 = new Demo3_day02("杰克" ,"34");
//无参构造器对象
Demo3_day02 demo2 = new Demo3_day02();
//使用static修饰的方法(字段也是同样的道理)
Demo3_day02.eat();
Demo3_day02.gender="男";
}
/**
* 默认情况下:我们在没有设置任何构造器的情况下,
* JVM会自动帮助我们生成一个无参的构造器,(可以使用反编译工具查看)
* 如果我们设置一个有参的构造器,
* 我们必须自己手动的去设置一个无参的构造器
* 否者使用的时候会报错
*/
}
package com.anonymous.javase.day02;
public class Demo4_day02 {
//成员变量(也称之为全局变量)
//使用static修饰
static String name;
//不使用static修饰
String age;
public static void main(String[] args) {
//局部变量
int source = 89;
String gender = "男";
for (int i = 0; i < 90; i++) {
System.out.println(i);
}
// 这里的i就访问不到了..限制了作用域只能在for循环中使用
//System.out.println(i);
}
}
变量生命周期:
package com.anonymous.javase.day02;
//封装
class Student{
String name ;
String age;
private String gender;
private String height;
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getHeight() {
return height;
}
public void setHeight(String height) {
this.height = height;
}
}
public class Demo5_day02 {
public static void main(String[] args) {
Student student = new Student();
student.name = "ROSE";
student.age = "34";
student.name = "KAC";
student.age = "34";
/**
* 这样设计不合理:
* 不能让调用者直接解除数据,从而篡改数据
*/
//解决
/**
* 使用get和set方法进行设置值和获取值.
* 不能让用户直接对数据进行修改(这样不能体现面对对象的思想),
*/
student.setGender("男");
student.setHeight("189");
String gender = student.getGender();
String height = student.getHeight();
System.out.println(gender+height);
}
}
package com.anonymous.javase.day02;
//子类
class Son extends Father{
public void f1(){
super.f1();
System.out.println("456");
}
}
//父类
class Father{
public void f1(){
System.out.println("123");
}
}
//测试类
public class Demo6_day02 {
public static void main(String[] args) {
Father son = new Son();
son.f1();
}
}
package com.anonymous.javase.day02;
//父类
class Animal{
public void eat(){
}
}
//子类
class Cat extends Animal{
public void eat(){
System.out.println("(猫)喂养中...");
}
}
//子类
class Dog extends Animal{
public void eat(){
System.out.println("(狗)喂养中...");
}
}
//喂养者
class People{
//喂养狗
public void feed(Dog d){
d.eat();
}
//喂养猫
public void feed(Cat c){
c.eat();
}
}
/**
* 上面没有使用多态思想
*/
/**
* 使用多态思想
*/
class People2{
//喂养狗
public void feed(Animal a){
a.eat();
}
}
public class Demo7_day02 {
public static void main(String[] args) {
People people = new People();
people.feed(new Dog());
people.feed(new Cat());
}
}
package com.anonymous.javase.day02;
abstract class TestTime{
//抽象类中可存在方法体
//模板方法(不允许子类覆盖加上final)
final public void getTime(){
//开始时间
long begin = System.currentTimeMillis();
this.doWork();
//结束时间
System.out.println(System.currentTimeMillis()-begin);
}
//抽象方法
abstract public void doWork();
}
class Sub1 extends TestTime{
@Override
public void doWork() {
for (int i = 0; i < 10000; i++) {
i+=1;
}
}
}
class Sub2 extends TestTime{
@Override
public void doWork() {
String str = "";
for (int i = 0; i <100000; i++) {
str+=i;
}
}
}
public class Demo8_day02 {
public static void main(String[] args) {
new Sub1().getTime();//0
new Sub2().getTime();//13144
}
}